X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gas%2Fconfig%2Fobj-som.c;h=a736c9658ead6130f13ec9eaa68c8645caf0f7cb;hb=351e2b5aa7a71258e6b682ac1a3228964de8d22c;hp=80af18fd37b3ec4651bc9e3c13923d5eba1c14e1;hpb=5b64ad42d36e6d487e1f7287d37fbc243a178e72;p=binutils-gdb.git diff --git a/gas/config/obj-som.c b/gas/config/obj-som.c index 80af18fd37b..a736c9658ea 100644 --- a/gas/config/obj-som.c +++ b/gas/config/obj-som.c @@ -1,5 +1,5 @@ /* SOM object file format. - Copyright (C) 1993, 1998 Free Software Foundation, Inc. + Copyright 1993, 1994, 1998, 2000, 2002 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -26,11 +26,12 @@ #include "aout/stab_gnu.h" #include "obstack.h" -/* SOM does not need any pseudo-ops. */ +static void obj_som_weak PARAMS ((int)); const pseudo_typeS obj_pseudo_table[] = { - {NULL} + {"weak", obj_som_weak, 0}, + {NULL, NULL, 0} }; static int version_seen = 0; @@ -38,12 +39,16 @@ static int copyright_seen = 0; static int compiler_seen = 0; /* Unused by SOM. */ -void obj_read_begin_hook () {} + +void +obj_read_begin_hook () +{ +} /* Handle a .compiler directive. This is intended to create the compilation unit auxiliary header for MPE such that the linkeditor can handle SOM extraction from archives. The format of the quoted - string is "sourcefile language version" and is delimited by blanks.*/ + string is "sourcefile language version" and is delimited by blanks. */ void obj_som_compiler (unused) @@ -93,8 +98,9 @@ obj_som_compiler (unused) } *p = '\000'; - language_name = ++p; - while (*p != ' ' && *p != '\000') p++; + language_name = ++p; + while (*p != ' ' && *p != '\000') + p++; if (*p == '\000') { as_bad (".compiler directive missing version"); @@ -102,8 +108,9 @@ obj_som_compiler (unused) } *p = '\000'; - version_id = ++p; - while (*p != '\000') p++; + version_id = ++p; + while (*p != '\000') + p++; /* Remove the trailing quote. */ *(--p) = '\000'; @@ -151,10 +158,11 @@ obj_som_version (unused) } version_seen = 1; - if (bfd_som_attach_aux_hdr (stdoutput, VERSION_AUX_ID, version) == false) + if (!bfd_som_attach_aux_hdr (stdoutput, VERSION_AUX_ID, version)) { bfd_perror (stdoutput->filename); - as_perror (_("FATAL: Attaching version header %s"), stdoutput->filename); + as_perror (_("FATAL: Attaching version header %s"), + stdoutput->filename); exit (EXIT_FAILURE); } *input_line_pointer = c; @@ -196,10 +204,11 @@ obj_som_copyright (unused) } copyright_seen = 1; - if (bfd_som_attach_aux_hdr (stdoutput, COPYRIGHT_AUX_ID, copyright) == false) + if (!bfd_som_attach_aux_hdr (stdoutput, COPYRIGHT_AUX_ID, copyright)) { bfd_perror (stdoutput->filename); - as_perror (_("FATAL: Attaching copyright header %s"), stdoutput->filename); + as_perror (_("FATAL: Attaching copyright header %s"), + stdoutput->filename); exit (EXIT_FAILURE); } *input_line_pointer = c; @@ -227,7 +236,7 @@ obj_som_init_stab_section (seg) space = bfd_make_section_old_way (stdoutput, "$GDB_DEBUG$"); /* Set SOM specific attributes for the space. In particular we set - the space "defined", "private", "sort_key", and "spnum" values. + the space "defined", "private", "sort_key", and "spnum" values. Due to a bug in pxdb (called by hpux linker), the sort keys of the various stabs spaces/subspaces need to be "small". We @@ -239,12 +248,12 @@ obj_som_init_stab_section (seg) (just created above). Also set some attributes which BFD does not understand. In particular, access bits, sort keys, and load quadrant. */ - obj_set_subsection_attributes (seg, space, 0x1f, 73, 0); + obj_set_subsection_attributes (seg, space, 0x1f, 73, 0, 0, 0, 0); bfd_set_section_alignment (stdoutput, seg, 2); /* Make some space for the first special stab entry and zero the memory. It contains information about the length of this file's - stab string and the like. Using it avoids the need to + stab string and the like. Using it avoids the need to relocate the stab strings. The $GDB_STRINGS$ space will be created as a side effect of @@ -262,7 +271,7 @@ obj_som_init_stab_section (seg) not understand. In particular, access bits, sort keys, and load quadrant. */ seg = bfd_get_section_by_name (stdoutput, "$GDB_STRINGS$"); - obj_set_subsection_attributes (seg, space, 0x1f, 72, 0); + obj_set_subsection_attributes (seg, space, 0x1f, 72, 0, 0, 0, 0); bfd_set_section_alignment (stdoutput, seg, 2); subseg_set (saved_seg, saved_subseg); @@ -297,7 +306,7 @@ adjust_stab_sections (abfd, sec, xxx) bfd_h_put_32 (abfd, (bfd_vma) strsz, (bfd_byte *) p + 8); } -/* Called late in the asssembly phase to adjust the special +/* Called late in the assembly phase to adjust the special stab entry and to set the starting address for each code subspace. */ void @@ -305,3 +314,34 @@ som_frob_file () { bfd_map_over_sections (stdoutput, adjust_stab_sections, (PTR) 0); } + +static void +obj_som_weak (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + char *name; + int c; + symbolS *symbolP; + + do + { + name = input_line_pointer; + c = get_symbol_end (); + symbolP = symbol_find_or_make (name); + *input_line_pointer = c; + SKIP_WHITESPACE (); + S_SET_WEAK (symbolP); +#if 0 + symbol_get_obj (symbolP)->local = 1; +#endif + if (c == ',') + { + input_line_pointer++; + SKIP_WHITESPACE (); + if (*input_line_pointer == '\n') + c = '\n'; + } + } + while (c == ','); + demand_empty_rest_of_line (); +}