diff options
-rw-r--r-- | gas/as.h | 71 | ||||
-rw-r--r-- | gas/struc-symbol.h | 85 |
2 files changed, 102 insertions, 54 deletions
@@ -52,6 +52,14 @@ #include "host.h" #include "flonum.h" +/* Make Saber happier on obstack.h. */ +#ifdef SABER +#undef __PTR_TO_INT +#define __PTR_TO_INT(P) ((int)(P)) +#undef __INT_TO_PTR +#define __INT_TO_PTR(P) ((char *)(P)) +#endif + #ifndef __LINE__ #define __LINE__ "unknown" #endif /* __LINE__ */ @@ -60,15 +68,24 @@ #define __FILE__ "unknown" #endif /* __FILE__ */ +#ifndef __STDC__ +#ifndef const +#define const +#endif +#ifndef volatile +#define volatile +#endif +#endif /* ! __STDC__ */ + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free xfree #define xfree free -#define BAD_CASE(value) \ +#define BAD_CASE(val) \ { \ as_fatal("Case value %d unexpected at line %d of file \"%s\"\n", \ - value, __LINE__, __FILE__); \ + val, __LINE__, __FILE__); \ } @@ -76,8 +93,16 @@ #ifdef BFD_ASSEMBLER extern bfd *stdoutput; +typedef bfd_vma addressT; +typedef bfd_signed_vma offsetT; +#else +typedef unsigned long addressT; +typedef long offsetT; #endif +/* Type of symbol value, etc. For use in prototypes. */ +typedef addressT valueT; + #ifndef COMMON #ifdef TEST #define COMMON /* declare our COMMONs storage here. */ @@ -174,7 +199,7 @@ typedef enum _segT SEG_DEBUG, /* Debug segment */ SEG_NTV, /* Transfert vector preload segment */ SEG_PTV, /* Transfert vector postload segment */ - SEG_REGISTER, /* Mythical: a register-valued expression */ + SEG_REGISTER /* Mythical: a register-valued expression */ } segT; #define SEG_MAXIMUM_ORDINAL (SEG_REGISTER) @@ -199,7 +224,7 @@ COMMON segT now_seg; #ifdef BFD_ASSEMBLER #define segment_name(SEG) bfd_get_section_name (stdoutput, SEG) #else -extern char *CONST seg_name[]; +extern char *const seg_name[]; #define segment_name(SEG) seg_name[(int) (SEG)] #endif @@ -243,11 +268,11 @@ typedef enum _relax_state character. */ rs_org, - rs_machine_dependent, + rs_machine_dependent #ifndef WORKING_DOT_WORD /* JF: gunpoint */ - rs_broken_word, + , rs_broken_word #endif } relax_stateT; @@ -258,7 +283,7 @@ typedef unsigned long relax_substateT; /* Enough bits for address, but still an integer type. Could be a problem, cross-assembling for 64-bit machines. */ -typedef unsigned long relax_addressT; +typedef addressT relax_addressT; /* frags.c */ @@ -281,18 +306,18 @@ typedef unsigned long relax_addressT; struct frag { /* Object file address. */ - unsigned long fr_address; + addressT fr_address; /* Chain forward; ascending address order. Rooted in frch_root. */ struct frag *fr_next; /* (Fixed) number of chars we know we have. May be 0. */ - long fr_fix; + offsetT fr_fix; /* (Variable) number of chars after above. May be 0. */ - long fr_var; + offsetT fr_var; /* For variable-length tail. */ struct symbol *fr_symbol; /* For variable-length tail. */ - long fr_offset; + offsetT fr_offset; /* Points to opcode low addr byte, for relaxation. */ char *fr_opcode; @@ -323,7 +348,7 @@ typedef struct frag fragS; included in frchain_now. The fr_fix field is bogus; instead, use: obstack_next_free(&frags)-frag_now->fr_literal. */ COMMON fragS *frag_now; -#define frag_now_fix() (obstack_next_free (&frags) - frag_now->fr_literal) +#define frag_now_fix() ((char*)obstack_next_free (&frags) - frag_now->fr_literal) /* For foreign-segment symbol fixups. */ COMMON fragS zero_address_frag; @@ -387,6 +412,8 @@ PRINTF_LIKE (as_bad); PRINTF_LIKE (as_fatal); PRINTF_LIKE (as_tsktsk); PRINTF_LIKE (as_warn); +void fprint_value PARAMS ((FILE *file, addressT value)); +void sprint_value PARAMS ((char *buf, addressT value)); int had_errors PARAMS ((void)); int had_warnings PARAMS ((void)); @@ -396,7 +423,9 @@ char *atof_ieee PARAMS ((char *str, int what_kind, LITTLENUM_TYPE * words)); char *input_scrub_include_file PARAMS ((char *filename, char *position)); char *input_scrub_new_file PARAMS ((char *filename)); char *input_scrub_next_buffer PARAMS ((char **bufp)); +#if 0 /* incompatible with solaris 2 native cc */ char *strstr PARAMS ((const char *s, const char *wanted)); +#endif char *xmalloc PARAMS ((long size)); char *xrealloc PARAMS ((char *ptr, long n)); int do_scrub_next_char PARAMS ((int (*get) (), void (*unget) ())); @@ -426,7 +455,7 @@ void scrub_to_string PARAMS ((int ch)); void subsegs_begin PARAMS ((void)); void subseg_change PARAMS ((segT seg, int subseg)); #ifdef BFD_ASSEMBLER -segT subseg_new PARAMS ((char *name, subsegT subseg)); +segT subseg_new PARAMS ((const char *name, subsegT subseg)); void subseg_set PARAMS ((segT seg, subsegT subseg)); #else void subseg_new PARAMS ((segT seg, subsegT subseg)); @@ -450,4 +479,20 @@ void subseg_new PARAMS ((segT seg, subsegT subseg)); #include "listing.h" +#ifdef BFD_ASSEMBLER +/* Someday perhaps this will be selectable at run-time. */ +#if defined (OBJ_AOUT) || defined (OBJ_BOUT) +#define OUTPUT_FLAVOR bfd_target_aout_flavour +#endif +#ifdef OBJ_COFF +#define OUTPUT_FLAVOR bfd_target_coff_flavour +#endif +#ifdef OBJ_ECOFF +#define OUTPUT_FLAVOR bfd_target_ecoff_flavour +#endif +#ifdef OBJ_ELF +#define OUTPUT_FLAVOR bfd_target_elf_flavour +#endif +#endif /* BFD_ASSEMBLER */ + /* end of as.h */ diff --git a/gas/struc-symbol.h b/gas/struc-symbol.h index 1db476f..d840f83 100644 --- a/gas/struc-symbol.h +++ b/gas/struc-symbol.h @@ -13,36 +13,57 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - oYou should have received a copy of the GNU General Public License + You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __struc_symbol_h__ #define __struc_symbol_h__ -struct symbol /* our version of an nlist node */ +#ifdef BFD_ASSEMBLER +/* The BFD code wants to walk the list in both directions. */ +#undef SYMBOLS_NEED_BACKPOINTERS +#define SYMBOLS_NEED_BACKPOINTERS +#endif + +/* our version of an nlist node */ +struct symbol { - obj_symbol_type sy_symbol; /* what we write in .o file (if permitted) */ - unsigned long sy_name_offset; /* 4-origin position of sy_name in symbols */ - /* part of object file. */ - /* 0 for (nameless) .stabd symbols. */ - /* Not used until write_object_file() time. */ - long sy_number; /* 24 bit symbol number. */ - /* Symbol numbers start at 0 and are */ - /* unsigned. */ +#ifndef BFD_ASSEMBLER + /* The (4-origin) position of sy_name in the symbol table of the object + file. This will be 0 for (nameless) .stabd symbols. + + Not used until write_object_file() time. */ + unsigned long sy_name_offset; + + /* What we write in .o file (if permitted). */ + obj_symbol_type sy_symbol; + + /* The 24 bit symbol number. Symbol numbers start at 0 and are unsigned. */ + long sy_number; +#else + /* BFD symbol */ + asymbol *bsym; +#endif + struct symbol *sy_next; /* forward chain, or NULL */ #ifdef SYMBOLS_NEED_BACKPOINTERS struct symbol *sy_previous; /* backward chain, or NULL */ #endif /* SYMBOLS_NEED_BACKPOINTERS */ + struct frag *sy_frag; /* NULL or -> frag this symbol attaches to. */ + struct symbol *sy_forward; /* value is really that of this other symbol */ - /* We will probably want to add a sy_segment here soon. */ + + int written : 1; + +#ifdef TARGET_SYMBOL_FIELDS + TARGET_SYMBOL_FIELDS +#endif }; typedef struct symbol symbolS; -typedef unsigned valueT; /* The type of n_value. Helps casting. */ - #ifndef WORKING_DOT_WORD struct broken_word { @@ -52,7 +73,7 @@ struct broken_word fragS *dispfrag; /* where to add the break */ symbolS *add; /* symbol_x */ symbolS *sub; /* - symbol_y */ - long addnum; /* + addnum */ + offsetT addnum; /* + addnum */ int added; /* nasty thing happend yet? */ /* 1: added and has a long-jump */ /* 2: added but uses someone elses long-jump */ @@ -67,7 +88,7 @@ extern struct broken_word *broken_words; * This will change for infinite-segments support (e.g. COFF). */ /* #define SYMBOL_TYPE_TO_SEGMENT(symP) ( N_TYPE_seg [(int) (symP)->sy_type & N_TYPE] ) */ -extern segT N_TYPE_seg[]; /* subseg.c */ +extern const segT N_TYPE_seg[]; /* subseg.c */ #define SEGMENT_TO_SYMBOL_TYPE(seg) ( seg_N_TYPE [(int) (seg)] ) extern const short seg_N_TYPE[];/* subseg.c */ @@ -75,21 +96,13 @@ extern const short seg_N_TYPE[];/* subseg.c */ #define N_REGISTER 30 /* Fake N_TYPE value for SEG_REGISTER */ #ifdef SYMBOLS_NEED_BACKPOINTERS -#if __STDC__ == 1 - -void symbol_clear_list_pointers (symbolS * symbolP); -void symbol_insert (symbolS * addme, symbolS * target, symbolS ** rootP, symbolS ** lastP); -void symbol_remove (symbolS * symbolP, symbolS ** rootP, symbolS ** lastP); -void verify_symbol_chain (symbolS * rootP, symbolS * lastP); - -#else /* not __STDC__ */ -void symbol_clear_list_pointers (); -void symbol_insert (); -void symbol_remove (); -void verify_symbol_chain (); - -#endif /* not __STDC__ */ +void symbol_clear_list_pointers PARAMS ((symbolS * symbolP)); +void symbol_insert PARAMS ((symbolS * addme, symbolS * target, + symbolS ** rootP, symbolS ** lastP)); +void symbol_remove PARAMS ((symbolS * symbolP, symbolS ** rootP, + symbolS ** lastP)); +void verify_symbol_chain PARAMS ((symbolS * rootP, symbolS * lastP)); #define symbol_previous(s) ((s)->sy_previous) @@ -99,21 +112,11 @@ void verify_symbol_chain (); #endif /* SYMBOLS_NEED_BACKPOINTERS */ -#if __STDC__ == 1 -void symbol_append (symbolS * addme, symbolS * target, symbolS ** rootP, symbolS ** lastP); -#else /* not __STDC__ */ -void symbol_append (); -#endif /* not __STDC__ */ +void symbol_append PARAMS ((symbolS * addme, symbolS * target, + symbolS ** rootP, symbolS ** lastP)); #define symbol_next(s) ((s)->sy_next) #endif /* __struc_symbol_h__ */ -/* - * Local Variables: - * comment-column: 0 - * fill-column: 131 - * End: - */ - /* end of struc-symbol.h */ |