X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fc-pragma.h;h=685f54aeb78c645fc853d1df8ac908e7daa82487;hb=ad5951a860956fd4285a3438cb9c22cff8457679;hp=49c39fa591e9503f42fc22e2f3a9aac29a44bc34;hpb=8d62a21cd3d8c4d8311bab2e02530218e76db6a7;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/c-pragma.h b/gcc/c-pragma.h index 49c39fa591e..685f54aeb78 100644 --- a/gcc/c-pragma.h +++ b/gcc/c-pragma.h @@ -1,5 +1,5 @@ /* Pragma related interfaces. - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 1998 Free Software Foundation, Inc. This file is part of GNU CC. @@ -18,29 +18,83 @@ along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#ifndef _C_PRAGMA_H +#define _C_PRAGMA_H + +#ifdef HANDLE_SYSV_PRAGMA /* Support #pragma weak iff ASM_WEAKEN_LABEL and ASM_OUTPUT_DEF are defined. */ #if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF) #define HANDLE_PRAGMA_WEAK SUPPORTS_WEAK #endif +/* We always support #pragma pack for SYSV pragmas. */ +#ifndef HANDLE_PRAGMA_PACK +#define HANDLE_PRAGMA_PACK 1 +#endif +#endif /* HANDLE_SYSV_PRAGMA */ + + +#ifdef HANDLE_PRAGMA_PACK_PUSH_POP +/* If we are supporting #pragma pack(push... then we automatically + support #pragma pack() */ +#define HANDLE_PRAGMA_PACK 1 +#define PRAGMA_INSERT_ATTRIBUTES(node, pattr, prefix_attr) \ + insert_pack_attributes (node, pattr, prefix_attr) +extern void insert_pack_attributes PROTO((tree, tree *, tree *)); +#endif /* HANDLE_PRAGMA_PACK_PUSH_POP */ + + +#ifdef HANDLE_PRAGMA_WEAK +/* This structure contains any weak symbol declarations waiting to be emitted. */ +struct weak_syms +{ + struct weak_syms * next; + char * name; + char * value; +}; + +/* Declared in varasm.c */ +extern struct weak_syms * weak_decls; +#endif /* HANDLE_PRAGMA_WEAK */ + + +#if defined HANDLE_PRAGMA_PACK || defined HANDLE_PRAGMA_WEAK +/* Define HANDLE_GENERIC_PRAGMAS if any kind of front-end pragma + parsing is to be done. The code in GCC's generic C source files + will only look for the definition of this constant. They will + ignore definitions of HANDLE_PRAGMA_PACK and so on. */ +#define HANDLE_GENERIC_PRAGMAS 1 +#endif + + +#ifdef HANDLE_GENERIC_PRAGMAS enum pragma_state { ps_start, ps_done, - ps_bad, +#ifdef HANDLE_PRAGMA_WEAK ps_weak, ps_name, ps_equals, ps_value, +#endif +#ifdef HANDLE_PRAGMA_PACK ps_pack, ps_left, ps_align, - ps_right + ps_right, +#endif +#ifdef HANDLE_PRAGMA_PACK_PUSH_POP + ps_push, + ps_pop, + ps_comma, +#endif + ps_bad }; -/* Output asm to handle ``#pragma weak'' */ -extern void handle_pragma_weak PROTO((enum pragma_state, char *, char *)); - /* Handle a C style pragma */ -extern void handle_pragma_token PROTO((char *, tree)); +extern int handle_pragma_token PROTO((char *, tree)); + +#endif /* HANDLE_GENERIC_PRAGMAS */ +#endif /* _C_PRAGMA_H */