2005-02-10 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / nlmread.c
index 79dcfe3f79befd2c7e20812937bcc1db66f040ec..1a9ecd3ca4284e81847c02db5fe2f5c9c13ab646 100644 (file)
@@ -1,55 +1,45 @@
 /* Read NLM (NetWare Loadable Module) format executable files for GDB.
-   Copyright 1993, 1994 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995, 1996, 1998, 1999, 2000
+   Free Software Foundation, Inc.
    Written by Fred Fish at Cygnus Support (fnf@cygnus.com).
 
-This file is part of GDB.
+   This file is part of GDB.
 
-This program 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 of the License, or
-(at your option) any later version.
+   This program 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 of the License, or
+   (at your option) any later version.
 
-This program 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.
+   This program 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 this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
-#include <string.h>
 #include "bfd.h"
 #include "symtab.h"
 #include "symfile.h"
 #include "objfiles.h"
-#include "gdb-stabs.h"
 #include "buildsym.h"
 #include "stabsread.h"
+#include "block.h"
 
-static void
-nlm_new_init PARAMS ((struct objfile *));
+extern void _initialize_nlmread (void);
 
-static void
-nlm_symfile_init PARAMS ((struct objfile *));
+static void nlm_new_init (struct objfile *);
 
-static void
-nlm_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
+static void nlm_symfile_init (struct objfile *);
 
-static void
-nlm_symfile_finish PARAMS ((struct objfile *));
+static void nlm_symfile_read (struct objfile *, int);
 
-static void
-nlm_symtab_read PARAMS ((bfd *,  CORE_ADDR, struct objfile *));
-
-static struct section_offsets *
-nlm_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
-
-static void
-record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type,
-                              struct objfile *));
+static void nlm_symfile_finish (struct objfile *);
 
+static void nlm_symtab_read (bfd *, CORE_ADDR, struct objfile *);
 
 /* Initialize anything that needs initializing when a completely new symbol
    file is specified (not just adding some symbols from another file, e.g. a
@@ -59,8 +49,7 @@ record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type,
    file at some point in the near future.  */
 
 static void
-nlm_new_init (ignore)
-     struct objfile *ignore;
+nlm_new_init (struct objfile *ignore)
 {
   stabsread_new_init ();
   buildsym_new_init ();
@@ -77,47 +66,31 @@ nlm_new_init (ignore)
    just a stub. */
 
 static void
-nlm_symfile_init (ignore)
-     struct objfile *ignore;
+nlm_symfile_init (struct objfile *ignore)
 {
 }
 
-static void
-record_minimal_symbol (name, address, ms_type, objfile)
-     char *name;
-     CORE_ADDR address;
-     enum minimal_symbol_type ms_type;
-     struct objfile *objfile;
-{
-  name = obsavestring (name, strlen (name), &objfile -> symbol_obstack);
-  prim_record_minimal_symbol (name, address, ms_type, objfile);
-}
-
-
 /*
 
-LOCAL FUNCTION
+   LOCAL FUNCTION
 
-       nlm_symtab_read -- read the symbol table of an NLM file
+   nlm_symtab_read -- read the symbol table of an NLM file
 
-SYNOPSIS
+   SYNOPSIS
 
-       void nlm_symtab_read (bfd *abfd, CORE_ADDR addr,
-                             struct objfile *objfile)
+   void nlm_symtab_read (bfd *abfd, CORE_ADDR addr,
+   struct objfile *objfile)
 
-DESCRIPTION
+   DESCRIPTION
 
-       Given an open bfd, a base address to relocate symbols to, and a
-       flag that specifies whether or not this bfd is for an executable
-       or not (may be shared library for example), add all the global
-       function and data symbols to the minimal symbol table.
-*/
+   Given an open bfd, a base address to relocate symbols to, and a
+   flag that specifies whether or not this bfd is for an executable
+   or not (may be shared library for example), add all the global
+   function and data symbols to the minimal symbol table.
+ */
 
 static void
-nlm_symtab_read (abfd, addr, objfile)
-     bfd *abfd;
-     CORE_ADDR addr;
-     struct objfile *objfile;
+nlm_symtab_read (bfd *abfd, CORE_ADDR addr, struct objfile *objfile)
 {
   long storage_needed;
   asymbol *sym;
@@ -127,50 +100,43 @@ nlm_symtab_read (abfd, addr, objfile)
   struct cleanup *back_to;
   CORE_ADDR symaddr;
   enum minimal_symbol_type ms_type;
-  
+
   storage_needed = bfd_get_symtab_upper_bound (abfd);
   if (storage_needed < 0)
-    error ("Can't read symbols from %s: %s", bfd_get_filename (abfd),
+    error (_("Can't read symbols from %s: %s"), bfd_get_filename (abfd),
           bfd_errmsg (bfd_get_error ()));
   if (storage_needed > 0)
     {
       symbol_table = (asymbol **) xmalloc (storage_needed);
-      back_to = make_cleanup (free, symbol_table);
-      number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table); 
+      back_to = make_cleanup (xfree, symbol_table);
+      number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table);
       if (number_of_symbols < 0)
-       error ("Can't read symbols from %s: %s", bfd_get_filename (abfd),
+       error (_("Can't read symbols from %s: %s"), bfd_get_filename (abfd),
               bfd_errmsg (bfd_get_error ()));
-  
+
       for (i = 0; i < number_of_symbols; i++)
        {
          sym = symbol_table[i];
-         if (sym -> flags & BSF_GLOBAL)
+         if ( /*sym -> flags & BSF_GLOBAL */ 1)
            {
              /* Bfd symbols are section relative. */
-             symaddr = sym -> value + sym -> section -> vma;
+             symaddr = sym->value + sym->section->vma;
              /* Relocate all non-absolute symbols by base address.  */
-             if (sym -> section != &bfd_abs_section)
-               {
-                 symaddr += addr;
-               }
+             if (sym->section != &bfd_abs_section)
+               symaddr += addr;
 
              /* For non-absolute symbols, use the type of the section
-                they are relative to, to intuit text/data.  Bfd provides
-                no way of figuring this out for absolute symbols. */
-             if (sym -> section -> flags & SEC_CODE)
-               {
-                 ms_type = mst_text;
-               }
-             else if (sym -> section -> flags & SEC_DATA)
-               {
-                 ms_type = mst_data;
-               }
+                they are relative to, to intuit text/data.  BFD provides
+                no way of figuring this out for absolute symbols. */
+             if (sym->section->flags & SEC_CODE)
+               ms_type = mst_text;
+             else if (sym->section->flags & SEC_DATA)
+               ms_type = mst_data;
              else
-               {
-                 ms_type = mst_unknown;
-               }
-             record_minimal_symbol ((char *) sym -> name, symaddr, ms_type,
-                                    objfile);
+               ms_type = mst_unknown;
+
+             prim_record_minimal_symbol (sym->name, symaddr, ms_type,
+                                         objfile);
            }
        }
       do_cleanups (back_to);
@@ -206,43 +172,34 @@ nlm_symtab_read (abfd, addr, objfile)
    is not currently used. */
 
 static void
-nlm_symfile_read (objfile, section_offsets, mainline)
-     struct objfile *objfile;
-     struct section_offsets *section_offsets;
-     int mainline;
+nlm_symfile_read (struct objfile *objfile, int mainline)
 {
-  bfd *abfd = objfile -> obfd;
+  bfd *abfd = objfile->obfd;
   struct cleanup *back_to;
   CORE_ADDR offset;
 
   init_minimal_symbol_collection ();
-  back_to = make_cleanup (discard_minimal_symbols, 0);
+  back_to = make_cleanup_discard_minimal_symbols ();
 
   /* FIXME, should take a section_offsets param, not just an offset.  */
 
-  offset = ANOFFSET (section_offsets, 0);
+  offset = ANOFFSET (objfile->section_offsets, 0);
 
   /* Process the NLM export records, which become the bfd's canonical symbol
      table. */
 
   nlm_symtab_read (abfd, offset, objfile);
 
-  /* FIXME:  We could locate and read the optional native debugging format
-     here and add the symbols to the minimal symbol table. */
-
-  if (!have_partial_symbols ())
-    {
-      wrap_here ("");
-      printf_filtered ("(no debugging symbols found)...");
-      wrap_here ("");
-    }
-
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile. */
 
   install_minimal_symbols (objfile);
-
   do_cleanups (back_to);
+
+  stabsect_build_psymtabs (objfile, mainline, ".stab",
+                          ".stabstr", ".text");
+  /* FIXME:  We could locate and read the optional native debugging format
+     here and add the symbols to the minimal symbol table. */
 }
 
 
@@ -252,58 +209,29 @@ nlm_symfile_read (objfile, section_offsets, mainline)
    objfile struct from the global list of known objfiles. */
 
 static void
-nlm_symfile_finish (objfile)
-     struct objfile *objfile;
+nlm_symfile_finish (struct objfile *objfile)
 {
-  if (objfile -> sym_private != NULL)
-    {
-      mfree (objfile -> md, objfile -> sym_private);
-    }
-}
-
-/* NLM specific parsing routine for section offsets.
-   FIXME:  This may or may not be necessary.  All the symbol readers seem
-   to have similar code.  See if it can be generalized and moved elsewhere. */
-
-static
-struct section_offsets *
-nlm_symfile_offsets (objfile, addr)
-     struct objfile *objfile;
-     CORE_ADDR addr;
-{
-  struct section_offsets *section_offsets;
-  int i;
-
-  objfile->num_sections = SECT_OFF_MAX;
-  section_offsets = (struct section_offsets *)
-    obstack_alloc (&objfile -> psymbol_obstack,
-                  sizeof (struct section_offsets) +
-                  sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
-
-  for (i = 0; i < SECT_OFF_MAX; i++)
+  if (objfile->deprecated_sym_private != NULL)
     {
-      ANOFFSET (section_offsets, i) = addr;
+      xfree (objfile->deprecated_sym_private);
     }
-  
-  return (section_offsets);
 }
 
-\f
 /* Register that we are able to handle NLM file format. */
 
 static struct sym_fns nlm_sym_fns =
 {
   bfd_target_nlm_flavour,
-  nlm_new_init,                /* sym_new_init: init anything gbl to entire symtab */
-  nlm_symfile_init,    /* sym_init: read initial info, setup for sym_read() */
-  nlm_symfile_read,    /* sym_read: read a symbol file into symtab */
-  nlm_symfile_finish,  /* sym_finish: finished with file, cleanup */
-  nlm_symfile_offsets, /* sym_offsets:  Translate ext. to int. relocation */
-  NULL                 /* next: pointer to next struct sym_fns */
+  nlm_new_init,                        /* sym_new_init: init anything gbl to entire symtab */
+  nlm_symfile_init,            /* sym_init: read initial info, setup for sym_read() */
+  nlm_symfile_read,            /* sym_read: read a symbol file into symtab */
+  nlm_symfile_finish,          /* sym_finish: finished with file, cleanup */
+  default_symfile_offsets,     /* sym_offsets:  Translate ext. to int. relocation */
+  NULL                         /* next: pointer to next struct sym_fns */
 };
 
 void
-_initialize_nlmread ()
+_initialize_nlmread (void)
 {
   add_symtab_fns (&nlm_sym_fns);
 }
This page took 0.039459 seconds and 4 git commands to generate.