]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gas/config/obj-som.c
* config/tc-ppc.c (md_section_align): Don't round up address for ELF.
[thirdparty/binutils-gdb.git] / gas / config / obj-som.c
index 80af18fd37b3ec4651bc9e3c13923d5eba1c14e1..571330efcb4250ed73c8637eb88983cb5287b334 100644 (file)
@@ -1,5 +1,6 @@
 /* SOM object file format.
-   Copyright (C) 1993, 1998 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1998, 2000, 2002, 2003, 2004, 2005
+   Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -15,8 +16,8 @@
 
    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.
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.
 
    Written by the Center for Software Science at the University of Utah
    and by Cygnus Support.  */
 #include "aout/stab_gnu.h"
 #include "obstack.h"
 
-/* SOM does not need any pseudo-ops.  */
-
-const pseudo_typeS obj_pseudo_table[] =
-{
-  {NULL}
-};
-
 static int version_seen = 0;
 static int copyright_seen = 0;
 static int compiler_seen = 0;
 
 /* Unused by SOM.  */
-void obj_read_begin_hook () {}
+
+void
+obj_read_begin_hook (void)
+{
+}
 
 /* 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)
-     int unused;
+obj_som_compiler (int unused ATTRIBUTE_UNUSED)
 {
   char *buf;
   char c;
@@ -93,8 +90,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 +100,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';
 
@@ -121,8 +120,7 @@ obj_som_compiler (unused)
 /* Handle a .version directive.  */
 
 void
-obj_som_version (unused)
-     int unused;
+obj_som_version (int unused ATTRIBUTE_UNUSED)
 {
   char *version, c;
 
@@ -151,10 +149,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;
@@ -166,8 +165,7 @@ obj_som_version (unused)
    If you care about copyright strings that much, you fix it.  */
 
 void
-obj_som_copyright (unused)
-     int unused;
+obj_som_copyright (int unused ATTRIBUTE_UNUSED)
 {
   char *copyright, c;
 
@@ -196,10 +194,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;
@@ -214,8 +213,7 @@ obj_som_copyright (unused)
    which BFD does not understand.  */
 
 void
-obj_som_init_stab_section (seg)
-     segT seg;
+obj_som_init_stab_section (segT seg)
 {
   segT saved_seg = now_seg;
   segT space;
@@ -227,7 +225,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 +237,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 +260,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);
@@ -271,10 +269,7 @@ obj_som_init_stab_section (seg)
 /* Fill in the counts in the first entry in a .stabs section.  */
 
 static void
-adjust_stab_sections (abfd, sec, xxx)
-     bfd *abfd;
-     asection *sec;
-     PTR xxx;
+adjust_stab_sections (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
 {
   asection *strsec;
   char *p;
@@ -297,11 +292,44 @@ 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
-som_frob_file ()
+som_frob_file (void)
 {
   bfd_map_over_sections (stdoutput, adjust_stab_sections, (PTR) 0);
 }
+
+static void
+obj_som_weak (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 (c == ',')
+       {
+         input_line_pointer++;
+         SKIP_WHITESPACE ();
+         if (*input_line_pointer == '\n')
+           c = '\n';
+       }
+    }
+  while (c == ',');
+  demand_empty_rest_of_line ();
+}
+
+const pseudo_typeS obj_pseudo_table[] =
+{
+  {"weak", obj_som_weak, 0},
+  {NULL, NULL, 0}
+};