* config/i386/windows.mh (XDEPFILES): reduce to libwingdb.a.
[deliverable/binutils-gdb.git] / gdb / nlmread.c
index 3895053282f753eaee3a562b1de4e5ed3f51123b..fa588df1848f27557c8a9a25452e232631d413e6 100644 (file)
@@ -16,10 +16,10 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
-#include <string.h>
+#include "gdb_string.h"
 #include "bfd.h"
 #include "symtab.h"
 #include "symfile.h"
@@ -43,14 +43,6 @@ nlm_symfile_finish PARAMS ((struct objfile *));
 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 *));
-
-
 /* Initialize anything that needs initializing when a completely new symbol
    file is specified (not just adding some symbols from another file, e.g. a
    shared library).
@@ -82,18 +74,6 @@ nlm_symfile_init (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
@@ -150,27 +130,20 @@ nlm_symtab_read (abfd, addr, objfile)
              symaddr = sym -> value + sym -> section -> vma;
              /* Relocate all non-absolute symbols by base address.  */
              if (sym -> section != &bfd_abs_section)
-               {
-                 symaddr += addr;
-               }
+               symaddr += addr;
 
              /* For non-absolute symbols, use the type of the section
-                they are relative to, to intuit text/data.  Bfd provides
+                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;
-               }
+               ms_type = mst_text;
              else if (sym -> section -> flags & SEC_DATA)
-               {
-                 ms_type = mst_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);
@@ -214,6 +187,7 @@ nlm_symfile_read (objfile, section_offsets, mainline)
   bfd *abfd = objfile -> obfd;
   struct cleanup *back_to;
   CORE_ADDR offset;
+  struct symbol *mainsym;
 
   init_minimal_symbol_collection ();
   back_to = make_cleanup (discard_minimal_symbols, 0);
@@ -228,18 +202,20 @@ nlm_symfile_read (objfile, section_offsets, mainline)
   nlm_symtab_read (abfd, offset, objfile);
 
   stabsect_build_psymtabs (objfile, section_offsets, mainline, ".stab",
-                          ".stabstr");
+                          ".stabstr", ".text");
 
-  /* FIXME:  We could locate and read the optional native debugging format
-     here and add the symbols to the minimal symbol table. */
+  mainsym = lookup_symbol ("main", NULL, VAR_NAMESPACE, NULL, NULL);
 
-  if (!have_partial_symbols ())
+  if (mainsym
+      && SYMBOL_CLASS(mainsym) == LOC_BLOCK)
     {
-      wrap_here ("");
-      printf_filtered ("(no debugging symbols found)...");
-      wrap_here ("");
+      objfile->ei.main_func_lowpc = BLOCK_START (SYMBOL_BLOCK_VALUE (mainsym));
+      objfile->ei.main_func_highpc = BLOCK_END (SYMBOL_BLOCK_VALUE (mainsym));
     }
 
+  /* FIXME:  We could locate and read the optional native debugging format
+     here and add the symbols to the minimal symbol table. */
+
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile. */
 
@@ -264,34 +240,6 @@ nlm_symfile_finish (objfile)
     }
 }
 
-/* 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++)
-    {
-      ANOFFSET (section_offsets, i) = addr;
-    }
-  
-  return (section_offsets);
-}
-
-\f
 /* Register that we are able to handle NLM file format. */
 
 static struct sym_fns nlm_sym_fns =
@@ -301,7 +249,8 @@ static struct sym_fns nlm_sym_fns =
   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 */
+  default_symfile_offsets,
+                       /* sym_offsets:  Translate ext. to int. relocation */
   NULL                 /* next: pointer to next struct sym_fns */
 };
 
This page took 0.026395 seconds and 4 git commands to generate.