Add support for FreeBSD/i386 ELF.
[deliverable/binutils-gdb.git] / gdb / somread.c
index 861f34d754965bf83f2449151f3964b6e5379ec6..b1370abffa0a386c693107f4a61e5ca483e31fc0 100644 (file)
@@ -52,13 +52,13 @@ static void
 som_symtab_read PARAMS ((bfd *, struct objfile *,
                         struct section_offsets *));
 
-static struct section_offsets *
-som_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
+static void
+som_symfile_offsets PARAMS ((struct objfile *, struct section_addr_info *));
 
 /* FIXME: These should really be in a common header somewhere */
 
 extern void
-hpread_build_psymtabs PARAMS ((struct objfile *, struct section_offsets *, int));
+hpread_build_psymtabs PARAMS ((struct objfile *, int));
 
 extern void
 hpread_symfile_finish PARAMS ((struct objfile *));
@@ -366,7 +366,7 @@ som_symfile_read (objfile, mainline)
   do_pxdb (symfile_bfd_open (objfile->name));
 
   init_minimal_symbol_collection ();
-  back_to = make_cleanup ((make_cleanup_func) discard_minimal_symbols, 0);
+  back_to = make_cleanup_discard_minimal_symbols ();
 
   /* Read in the import list and the export list.  Currently
      the export list isn't used; the import list is used in
@@ -398,7 +398,7 @@ som_symfile_read (objfile, mainline)
      This builds the psymtab. This used to be done via a scan of
      the DNTT, but is now done via the PXDB-built quick-lookup tables
      together with a scan of the GNTT. See hp-psymtab-read.c. */
-  hpread_build_psymtabs (objfile, objfile->section_offsets, mainline);
+  hpread_build_psymtabs (objfile, mainline);
 
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile. 
@@ -459,57 +459,46 @@ som_symfile_init (objfile)
 
    Plain and simple for now.  */
 
-static struct section_offsets *
-som_symfile_offsets (objfile, addr)
+static void
+som_symfile_offsets (objfile, addrs)
      struct objfile *objfile;
-     CORE_ADDR addr;
+     struct section_addr_info *addrs;
 {
-  struct section_offsets *section_offsets;
   int i;
+  CORE_ADDR text_addr;
 
   objfile->num_sections = SECT_OFF_MAX;
-  section_offsets = (struct section_offsets *)
+  objfile->section_offsets = (struct section_offsets *)
     obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
 
+  /* FIXME: ezannoni 2000-04-20 The section names in SOM are not
+     .text, .data, etc, but $TEXT$, $DATA$,... We should initialize
+     SET_OFF_* from bfd. (See default_symfile_offsets()). But I don't
+     know the correspondence between SOM sections and GDB's idea of
+     section names. So for now we default to what is was before these
+     changes.*/
+  objfile->sect_index_text = 0;
+  objfile->sect_index_data = 1;
+  objfile->sect_index_bss = 2;
+  objfile->sect_index_rodata = 3;
+
   /* First see if we're a shared library.  If so, get the section
-     offsets from the library, else get them from addr.  */
-  if (!som_solib_section_offsets (objfile, section_offsets))
+     offsets from the library, else get them from addrs.  */
+  if (!som_solib_section_offsets (objfile, objfile->section_offsets))
     {
+      /* Note: Here is OK to compare with ".text" because this is the
+         name that gdb itself gives to that section, not the SOM
+         name. */
+      for (i = 0; i < SECT_OFF_MAX && addrs->other[i].name; i++)
+       if (strcmp (addrs->other[i].name, ".text") == 0)
+         break;
+      text_addr = addrs->other[i].addr;
+
       for (i = 0; i < SECT_OFF_MAX; i++)
-       ANOFFSET (section_offsets, i) = addr;
+       ANOFFSET (objfile->section_offsets, i) = text_addr;
     }
-
-  return section_offsets;
 }
 
-
-
-/* Check if a given symbol NAME is in the import list
-   of OBJFILE.
-   1 => true, 0 => false
-   This is used in hp_symtab_read.c to deal with static variables
-   that are defined in a different shared library than the one
-   whose symbols are being processed. */
-
-int
-is_in_import_list (name, objfile)
-     char *name;
-     struct objfile *objfile;
-{
-  register int i;
-
-  if (!objfile ||
-      !name ||
-      !*name)
-    return 0;
-
-  for (i = 0; i < objfile->import_list_size; i++)
-    if (objfile->import_list[i] && STREQ (name, objfile->import_list[i]))
-      return 1;
-  return 0;
-}
-
-
 /* Read in and initialize the SOM import list which is present
    for all executables and shared libraries.  The import list
    consists of the symbols that are referenced in OBJFILE but
This page took 0.02557 seconds and 4 git commands to generate.