diff options
Diffstat (limited to 'gas/config/obj-aout.c')
-rw-r--r-- | gas/config/obj-aout.c | 300 |
1 files changed, 122 insertions, 178 deletions
diff --git a/gas/config/obj-aout.c b/gas/config/obj-aout.c index 6a47a9b..720d09c 100644 --- a/gas/config/obj-aout.c +++ b/gas/config/obj-aout.c @@ -2,22 +2,22 @@ Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. -This file is part of GAS, the GNU Assembler. + This file is part of GAS, the GNU Assembler. -GAS is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2, -or (at your option) any later version. + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, + or (at your option) any later version. -GAS is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See -the GNU General Public License for more details. + GAS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See + the GNU General Public License for more details. -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, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ + 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, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ #define OBJ_HEADER "obj-aout.h" @@ -29,20 +29,20 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "obstack.h" #ifndef BFD_ASSEMBLER -/* in: segT out: N_TYPE bits */ +/* in: segT out: N_TYPE bits. */ const short seg_N_TYPE[] = { N_ABS, N_TEXT, N_DATA, N_BSS, - N_UNDF, /* unknown */ - N_UNDF, /* error */ - N_UNDF, /* expression */ - N_UNDF, /* debug */ - N_UNDF, /* ntv */ - N_UNDF, /* ptv */ - N_REGISTER, /* register */ + N_UNDF, /* Unknown. */ + N_UNDF, /* Error. */ + N_UNDF, /* Expression. */ + N_UNDF, /* Debug. */ + N_UNDF, /* Ntv. */ + N_UNDF, /* Ptv. */ + N_REGISTER, /* Register. */ }; const segT N_TYPE_seg[N_TYPE + 2] = @@ -60,51 +60,15 @@ const segT N_TYPE_seg[N_TYPE + 2] = SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, - SEG_REGISTER, /* dummy N_REGISTER for regs = 30 */ + SEG_REGISTER, /* Dummy N_REGISTER for regs = 30. */ SEG_GOOF, }; #endif -static void obj_aout_line PARAMS ((int)); -static void obj_aout_weak PARAMS ((int)); -static void obj_aout_type PARAMS ((int)); - -const pseudo_typeS aout_pseudo_table[] = -{ - {"line", obj_aout_line, 0}, /* source code line number */ - {"ln", obj_aout_line, 0}, /* coff line number that we use anyway */ - - {"weak", obj_aout_weak, 0}, /* mark symbol as weak. */ - - {"type", obj_aout_type, 0}, - - /* coff debug pseudos (ignored) */ - {"def", s_ignore, 0}, - {"dim", s_ignore, 0}, - {"endef", s_ignore, 0}, - {"ident", s_ignore, 0}, - {"line", s_ignore, 0}, - {"ln", s_ignore, 0}, - {"scl", s_ignore, 0}, - {"size", s_ignore, 0}, - {"tag", s_ignore, 0}, - {"val", s_ignore, 0}, - {"version", s_ignore, 0}, - - {"optim", s_ignore, 0}, /* For sun386i cc (?) */ - - /* other stuff */ - {"ABORT", s_abort, 0}, - - {NULL, NULL, 0} /* end sentinel */ -}; /* aout_pseudo_table */ - #ifdef BFD_ASSEMBLER void -obj_aout_frob_symbol (sym, punt) - symbolS *sym; - int *punt ATTRIBUTE_UNUSED; +obj_aout_frob_symbol (symbolS *sym, int *punt ATTRIBUTE_UNUSED) { flagword flags; asection *sec; @@ -184,23 +148,18 @@ obj_aout_frob_symbol (sym, punt) } } else - { - symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING; - } + symbol_get_bfdsym (sym)->flags |= BSF_DEBUGGING; aout_symbol (symbol_get_bfdsym (sym))->type = type; /* Double check weak symbols. */ - if (S_IS_WEAK (sym)) - { - if (S_IS_COMMON (sym)) - as_bad (_("Symbol `%s' can not be both weak and common"), - S_GET_NAME (sym)); - } + if (S_IS_WEAK (sym) && S_IS_COMMON (sym)) + as_bad (_("Symbol `%s' can not be both weak and common"), + S_GET_NAME (sym)); } void -obj_aout_frob_file_before_fix () +obj_aout_frob_file_before_fix (void) { /* Relocation processing may require knowing the VMAs of the sections. Since writing to a section will cause the BFD back end to compute the @@ -208,15 +167,12 @@ obj_aout_frob_file_before_fix () bfd_byte b = 0; bfd_boolean x = TRUE; if (bfd_section_size (stdoutput, text_section) != 0) - { - x = bfd_set_section_contents (stdoutput, text_section, &b, (file_ptr) 0, - (bfd_size_type) 1); - } + x = bfd_set_section_contents (stdoutput, text_section, &b, (file_ptr) 0, + (bfd_size_type) 1); else if (bfd_section_size (stdoutput, data_section) != 0) - { - x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0, - (bfd_size_type) 1); - } + x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0, + (bfd_size_type) 1); + assert (x); } @@ -224,16 +180,12 @@ obj_aout_frob_file_before_fix () /* Relocation. */ -/* - * emit_relocations() - * - * Crawl along a fixS chain. Emit the segment's relocations. - */ +/** Crawl along a fixS chain. Emit the segment's relocations. */ + void -obj_emit_relocations (where, fixP, segment_address_in_file) - char **where; - fixS *fixP; /* Fixup chain for this segment. */ - relax_addressT segment_address_in_file; +obj_emit_relocations (char **where, + fixS *fixP, /* Fixup chain for this segment. */ + relax_addressT segment_address_in_file) { for (; fixP; fixP = fixP->fx_next) if (fixP->fx_done == 0) @@ -264,14 +216,12 @@ obj_emit_relocations (where, fixP, segment_address_in_file) } #ifndef obj_header_append -/* Aout file generation & utilities */ +/* Aout file generation & utilities. */ /* An AOUT header on disk is laid out in target byte order. */ void -obj_header_append (where, headers) - char **where; - object_headers *headers; +obj_header_append (char **where, object_headers *headers) { char *p; @@ -302,9 +252,7 @@ obj_header_append (where, headers) #endif /* ! defined (obj_header_append) */ void -obj_symbol_to_chars (where, symbolP) - char **where; - symbolS *symbolP; +obj_symbol_to_chars (char **where, symbolS *symbolP) { char *p = *where; md_number_to_chars (p, S_GET_OFFSET (symbolP), 4); @@ -320,9 +268,7 @@ obj_symbol_to_chars (where, symbolP) } void -obj_emit_symbols (where, symbol_rootP) - char **where; - symbolS *symbol_rootP; +obj_emit_symbols (char **where, symbolS *symbol_rootP) { symbolS *symbolP; @@ -331,7 +277,7 @@ obj_emit_symbols (where, symbol_rootP) { /* Used to save the offset of the name. It is used to point to the string in memory but must be a file offset. */ - register char *temp; + char *temp; temp = S_GET_NAME (symbolP); S_SET_OFFSET (symbolP, symbolP->sy_name_offset); @@ -362,21 +308,19 @@ obj_emit_symbols (where, symbol_rootP) #endif /* ! BFD_ASSEMBLER */ static void -obj_aout_line (ignore) - int ignore ATTRIBUTE_UNUSED; +obj_aout_line (int ignore ATTRIBUTE_UNUSED) { /* Assume delimiter is part of expression. BSD4.2 as fails with delightful bug, so we are not being incompatible here. */ new_logical_line ((char *) NULL, (int) (get_absolute_expression ())); demand_empty_rest_of_line (); -} /* obj_aout_line() */ +} /* Handle .weak. This is a GNU extension. */ static void -obj_aout_weak (ignore) - int ignore ATTRIBUTE_UNUSED; +obj_aout_weak (int ignore ATTRIBUTE_UNUSED) { char *name; int c; @@ -408,8 +352,7 @@ obj_aout_weak (ignore) we can't parse it. */ static void -obj_aout_type (ignore) - int ignore ATTRIBUTE_UNUSED; +obj_aout_type (int ignore ATTRIBUTE_UNUSED) { char *name; int c; @@ -441,8 +384,7 @@ obj_aout_type (ignore) #ifndef BFD_ASSEMBLER void -obj_crawl_symbol_chain (headers) - object_headers *headers; +obj_crawl_symbol_chain (object_headers *headers) { symbolS *symbolP; symbolS **symbolPP; @@ -465,7 +407,7 @@ obj_crawl_symbol_chain (headers) if (flag_readonly_data_in_text && (S_GET_SEGMENT (symbolP) == SEG_DATA)) { S_SET_SEGMENT (symbolP, SEG_TEXT); - } /* if pushing data into text */ + } resolve_symbol_value (symbolP); @@ -525,25 +467,21 @@ obj_crawl_symbol_chain (headers) /* This warning should never get triggered any more. Well, maybe if you're doing twisted things with register names... */ - { - as_bad (_("Local symbol %s never defined."), decode_local_label_name (S_GET_NAME (symbolP))); - } /* oops. */ + as_bad (_("Local symbol %s never defined."), + decode_local_label_name (S_GET_NAME (symbolP))); /* Unhook it from the chain */ *symbolPP = symbol_next (symbolP); - } /* if this symbol should be in the output */ - } /* for each symbol */ + } + } H_SET_SYMBOL_TABLE_SIZE (headers, symbol_number); } -/* - * Find strings by crawling along symbol table chain. - */ +/* Find strings by crawling along symbol table chain. */ void -obj_emit_strings (where) - char **where; +obj_emit_strings (char **where) { symbolS *symbolP; @@ -551,11 +489,9 @@ obj_emit_strings (where) *where += 4; for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP)) - { - if (S_GET_NAME (symbolP)) - append (where, S_GET_NAME (symbolP), - (unsigned long) (strlen (S_GET_NAME (symbolP)) + 1)); - } /* walk symbol chain */ + if (S_GET_NAME (symbolP)) + append (where, S_GET_NAME (symbolP), + (unsigned long) (strlen (S_GET_NAME (symbolP)) + 1)); } #ifndef AOUT_VERSION @@ -563,8 +499,7 @@ obj_emit_strings (where) #endif void -obj_pre_write_hook (headers) - object_headers *headers; +obj_pre_write_hook (object_headers *headers) { H_SET_DYNAMIC (headers, 0); H_SET_VERSION (headers, AOUT_VERSION); @@ -578,126 +513,135 @@ obj_pre_write_hook (headers) /* Support for an AOUT emulation. */ -static void aout_pop_insert PARAMS ((void)); -static int obj_aout_s_get_other PARAMS ((symbolS *)); -static void obj_aout_s_set_other PARAMS ((symbolS *, int)); -static int obj_aout_s_get_desc PARAMS ((symbolS *)); -static void obj_aout_s_set_desc PARAMS ((symbolS *, int)); -static int obj_aout_s_get_type PARAMS ((symbolS *)); -static void obj_aout_s_set_type PARAMS ((symbolS *, int)); -static int obj_aout_separate_stab_sections PARAMS ((void)); -static int obj_aout_sec_sym_ok_for_reloc PARAMS ((asection *)); -static void obj_aout_process_stab PARAMS ((segT, int, const char *, int, int, int)); - static void -aout_pop_insert () +aout_pop_insert (void) { pop_insert (aout_pseudo_table); } static int -obj_aout_s_get_other (sym) - symbolS *sym; +obj_aout_s_get_other (symbolS *sym) { return aout_symbol (symbol_get_bfdsym (sym))->other; } static void -obj_aout_s_set_other (sym, o) - symbolS *sym; - int o; +obj_aout_s_set_other (symbolS *sym, int o) { aout_symbol (symbol_get_bfdsym (sym))->other = o; } static int -obj_aout_sec_sym_ok_for_reloc (sec) - asection *sec ATTRIBUTE_UNUSED; +obj_aout_sec_sym_ok_for_reloc (asection *sec ATTRIBUTE_UNUSED) { return obj_sec_sym_ok_for_reloc (sec); } static void -obj_aout_process_stab (seg, w, s, t, o, d) - segT seg ATTRIBUTE_UNUSED; - int w; - const char *s; - int t; - int o; - int d; +obj_aout_process_stab (segT seg ATTRIBUTE_UNUSED, + int w, + const char *s, + int t, + int o, + int d) { aout_process_stab (w, s, t, o, d); } static int -obj_aout_s_get_desc (sym) - symbolS *sym; +obj_aout_s_get_desc (symbolS *sym) { return aout_symbol (symbol_get_bfdsym (sym))->desc; } static void -obj_aout_s_set_desc (sym, d) - symbolS *sym; - int d; +obj_aout_s_set_desc (symbolS *sym, int d) { aout_symbol (symbol_get_bfdsym (sym))->desc = d; } static int -obj_aout_s_get_type (sym) - symbolS *sym; +obj_aout_s_get_type (symbolS *sym) { return aout_symbol (symbol_get_bfdsym (sym))->type; } static void -obj_aout_s_set_type (sym, t) - symbolS *sym; - int t; +obj_aout_s_set_type (symbolS *sym, int t) { aout_symbol (symbol_get_bfdsym (sym))->type = t; } static int -obj_aout_separate_stab_sections () +obj_aout_separate_stab_sections (void) { return 0; } /* When changed, make sure these table entries match the single-format definitions in obj-aout.h. */ + const struct format_ops aout_format_ops = { bfd_target_aout_flavour, - 1, /* dfl_leading_underscore */ - 0, /* emit_section_symbols */ - 0, /* begin */ - 0, /* app_file */ + 1, /* dfl_leading_underscore. */ + 0, /* emit_section_symbols. */ + 0, /* begin. */ + 0, /* app_file. */ obj_aout_frob_symbol, - 0, /* frob_file */ - 0, /* frob_file_before_adjust */ + 0, /* frob_file. */ + 0, /* frob_file_before_adjust. */ obj_aout_frob_file_before_fix, - 0, /* frob_file_after_relocs */ - 0, /* s_get_size */ - 0, /* s_set_size */ - 0, /* s_get_align */ - 0, /* s_set_align */ + 0, /* frob_file_after_relocs. */ + 0, /* s_get_size. */ + 0, /* s_set_size. */ + 0, /* s_get_align. */ + 0, /* s_set_align. */ obj_aout_s_get_other, obj_aout_s_set_other, obj_aout_s_get_desc, obj_aout_s_set_desc, obj_aout_s_get_type, obj_aout_s_set_type, - 0, /* copy_symbol_attributes */ - 0, /* generate_asm_lineno */ + 0, /* copy_symbol_attributes. */ + 0, /* generate_asm_lineno. */ obj_aout_process_stab, obj_aout_separate_stab_sections, - 0, /* init_stab_section */ + 0, /* init_stab_section. */ obj_aout_sec_sym_ok_for_reloc, aout_pop_insert, - 0, /* ecoff_set_ext */ - 0, /* read_begin_hook */ - 0 /* symbol_new_hook */ + 0, /* ecoff_set_ext. */ + 0, /* read_begin_hook. */ + 0 /* symbol_new_hook. */ }; #endif /* BFD_ASSEMBLER */ + +const pseudo_typeS aout_pseudo_table[] = +{ + {"line", obj_aout_line, 0}, /* Source code line number. */ + {"ln", obj_aout_line, 0}, /* COFF line number that we use anyway. */ + + {"weak", obj_aout_weak, 0}, /* Mark symbol as weak. */ + + {"type", obj_aout_type, 0}, + + /* coff debug pseudos (ignored) */ + {"def", s_ignore, 0}, + {"dim", s_ignore, 0}, + {"endef", s_ignore, 0}, + {"ident", s_ignore, 0}, + {"line", s_ignore, 0}, + {"ln", s_ignore, 0}, + {"scl", s_ignore, 0}, + {"size", s_ignore, 0}, + {"tag", s_ignore, 0}, + {"val", s_ignore, 0}, + {"version", s_ignore, 0}, + + {"optim", s_ignore, 0}, /* For sun386i cc (?). */ + + /* other stuff */ + {"ABORT", s_abort, 0}, + + {NULL, NULL, 0} +}; |