* config/obj-som.c (obj_read_begin_hook): Delete unused function.
authorJeff Law <law@redhat.com>
Mon, 6 Dec 1993 07:19:13 +0000 (07:19 +0000)
committerJeff Law <law@redhat.com>
Mon, 6 Dec 1993 07:19:13 +0000 (07:19 +0000)
        * config/obj-som.h (obj_read_begin_hook): Provide dummy definition.
        (TARGET_SYMBOL_FIELDS): Delete.  SOM isn't making use of them.

gas/ChangeLog
gas/config/obj-som.c
gas/config/obj-som.h

index 527ddb46029ec7b22ac8273fe64e11c8ef78d3e2..64f6dcf2c6b56fe7312f513ab299f8684e8f0b60 100644 (file)
@@ -1,5 +1,9 @@
 Sun Dec  5 17:05:29 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)
 
+       * config/obj-som.c (obj_read_begin_hook): Delete unused function.
+       * config/obj-som.h (obj_read_begin_hook): Provide dummy definition.
+       (TARGET_SYMBOL_FIELDS): Delete.  SOM isn't making use of them.
+
        * config/tc-hppa.c (tc_gen_reloc, SOM version): Handle relocation
        expansion due to rounding mode selectors.  Handle R_[RDSN]_MODE
        relocations for selecting the current rounding mode.
index 9f6e4f37fd97653ffc94628625dc43aab4cf56bb..fd8943a9bcdcc8211ffc3ab61158189e520d3d8b 100644 (file)
@@ -32,13 +32,6 @@ const pseudo_typeS obj_pseudo_table[] =
   {NULL}
 };
 
-/* SOM does not use this.  */
-
-void
-obj_read_begin_hook ()
-{
-}
-
 /* Handle a .version directive.  FIXME.  We just parse the .version
    directive and throw away the results!.  */
 
@@ -46,7 +39,7 @@ void
 obj_som_version (unused)
      int unused;
 {
-  SKIP_WHITESPACE ()
+  SKIP_WHITESPACE ();
   if (*input_line_pointer == '\"')
     {
       ++input_line_pointer;
@@ -71,27 +64,91 @@ void
 obj_som_init_stab_section (seg)
      segT seg;
 {
-  segT saved_seg = now_seg, space;
+  segT saved_seg = now_seg;
+  segT space;
   subsegT saved_subseg = now_subseg;
+  char *p, *file;
+  unsigned int stroff;
 
   /* Make the space which will contain the debug subspaces.  */
   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.  */
-  obj_set_section_attributes (space, 1, 1, 255, 2);
+     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
+     reserve range 72/73 which appear to work well.  */
+  obj_set_section_attributes (space, 1, 1, 72, 2);
+  bfd_set_section_alignment (stdoutput, space, 2);
 
   /* Set the containing space for both stab sections to be $GDB_DEBUG$
      (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, 255, 0);
+  obj_set_subsection_attributes (seg, space, 0x1f, 73, 0);
+  bfd_set_section_alignment (stdoutput, seg, 2);
+
+  /* Make some space for the first stab entry which is special.
+     It contains information about the length of this file's
+     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
+     the call to get_stab_string_offset.  */
+  p = frag_more (12);
+  as_where (&file, (unsigned int *) NULL);
+  stroff = get_stab_string_offset (file, "$GDB_STRINGS$");
+  know (stroff == 1);
+  md_number_to_chars (p, stroff, 4);
+  seg_info (seg)->stabu.p = p;
 
-  /* Likewise for the $GDB_STRINGS$ subspace.  Note the section
-     hasn't been created at the time of this call, so we create
-     it now.  */
-  seg = subseg_new ("$GDB_STRINGS$", 0);
-  obj_set_subsection_attributes (seg, space, 0x1f, 254, 0);
+  /* Set the containing space for both stab sections to be $GDB_DEBUG$
+     (just created above).  Also set some attributes which BFD does
+     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);
+  bfd_set_section_alignment (stdoutput, seg, 2);
 
   subseg_set (saved_seg, saved_subseg);
 }
+
+/* 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;
+{
+  asection *strsec;
+  char *p;
+  int strsz, nsyms;
+
+  if (strcmp ("$GDB_SYMBOLS$", sec->name))
+    return;
+
+  strsec = bfd_get_section_by_name (abfd, "$GDB_STRINGS$");
+  if (strsec)
+    strsz = bfd_section_size (abfd, strsec);
+  else
+    strsz = 0;
+  nsyms = bfd_section_size (abfd, sec) / 12 - 1;
+
+  p = seg_info (sec)->stabu.p;
+  assert (p != 0);
+
+  bfd_h_put_16 (abfd, (bfd_vma) nsyms, (bfd_byte *) p + 6);
+  bfd_h_put_32 (abfd, (bfd_vma) strsz, (bfd_byte *) p + 8);
+}
+
+/* Called late in the asssembly phase to adjust the special
+   stab entry.  This is where any other late object-file dependent
+   processing which should happen.  */
+
+void
+som_frob_file ()
+{
+  bfd_map_over_sections (stdoutput, adjust_stab_sections, (PTR) 0);
+}
index 783468535e979018371dfbb165ac78bd04cfe87c..5d2bbf816bd66d9a2b5f4fbf299a9c86eb1dade5 100644 (file)
@@ -34,9 +34,6 @@
 #define TRUE !FALSE
 #endif
 
-#define TARGET_SYMBOL_FIELDS   int local:1; unsigned long sy_name_offset;
-
-
 /* should be conditional on address size!  */
 #define som_symbol(asymbol) ((som_symbol_type *)(&(asymbol)->the_bfd))
 
@@ -54,6 +51,7 @@ extern void obj_som_version PARAMS ((int));
 extern void obj_som_init_stab_section PARAMS ((segT));
 
 #define obj_symbol_new_hook(s) {;}
+#define obj_read_begin_hook() {;}
 
 /* SOM has several attributes for spaces/subspaces which can not
    be easily expressed in BFD.  We use these macros to trigger calls
@@ -64,6 +62,10 @@ extern void obj_som_init_stab_section PARAMS ((segT));
 /* Likewise for symbol types.  */
 #define obj_set_symbol_type bfd_som_set_symbol_type
 
+/* This is the trigger for calling a BFD routine to attach unwind
+   information to a function symbol.  */
+#define obj_attach_unwind_info bfd_som_attach_unwind_info
+
 /* Stabs go in a separate sections.  GDB expects to find them in sections
    with the names $GDB_SYMBOLS$ and $GDB_STRINGS$ rather than .stab and
    .stabstr.  */