* nlmread.c (nlm_symtab_read): Clean up a bit.
authorStu Grossman <grossman@cygnus>
Thu, 9 Jun 1994 06:30:38 +0000 (06:30 +0000)
committerStu Grossman <grossman@cygnus>
Thu, 9 Jun 1994 06:30:38 +0000 (06:30 +0000)
* (nlm_symfile_read):  Record bounds of main() so that backtrace
command will know where to stop.
* objfiles.c (objfile_relocate):  Relocate entry point/func info
for backtrace as well.
* objfiles.h:  Define values for invalid PCs for entry point info.
* symfile.c (init_entry_point_info):  Initialize invalid values
with aforementioned macros.
* config/alpha/tm-alphanw.h:  Turn on FRAME_CHAIN_VALID_ALTERNATE
to cause backtrace to stop when it gets back to main().
* config/i386/tm-i386nw.h:  Ditto.

gdb/ChangeLog
gdb/config/alpha/tm-alphanw.h
gdb/config/i386/tm-i386nw.h
gdb/nlmread.c
gdb/objfiles.c
gdb/objfiles.h

index 25ac157aef8cf3ea46287022c94de897cd51ae70..8964125a578c972f7533b7021e764b5c68d5c626 100644 (file)
@@ -1,3 +1,17 @@
+Wed Jun  8 23:20:45 1994  Stu Grossman  (grossman@cygnus.com)
+
+       * nlmread.c (nlm_symtab_read):  Clean up a bit.
+       * (nlm_symfile_read):  Record bounds of main() so that backtrace
+       command will know where to stop.
+       * objfiles.c (objfile_relocate):  Relocate entry point/func info
+       for backtrace as well.
+       * objfiles.h:  Define values for invalid PCs for entry point info.
+       * symfile.c (init_entry_point_info):  Initialize invalid values
+       with aforementioned macros.
+       * config/alpha/tm-alphanw.h:  Turn on FRAME_CHAIN_VALID_ALTERNATE
+       to cause backtrace to stop when it gets back to main().
+       * config/i386/tm-i386nw.h:  Ditto.
+
 Sat Jun  4 18:17:03 1994  Per Bothner  (bothner@kalessin.cygnus.com)
 
        Fix value_print, which used to be ostensibly langauge-indepentdent,
index cf3075e4636659dddd527c8fba898d9118b03a2e..6ee46511d4ea1831cbac0139e1b5af2f9503774a 100644 (file)
@@ -8,3 +8,7 @@
 #define VM_MIN_ADDRESS ((CORE_ADDR)0)
 
 #include "alpha/tm-alpha.h"
+
+/* Stop backtracing when we wander into main.  */
+
+#define FRAME_CHAIN_VALID_ALTERNATE
index 8cab41693373c9f1f6fee37a7181b06381d9ec66..45af050bbd519f6fa02da59e526dc59cd0a82c11 100644 (file)
@@ -1,5 +1,5 @@
-/* Macro definitions for i386 running under Univel NetWare.
-   Copyright 1993 Free Software Foundation, Inc.
+/* Macro definitions for i386 running NetWare.
+   Copyright 1993, 1994 Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -25,3 +25,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
    be extracted out and placed in a tm-i386.h file that all the others,
    including tm-i386v.h, includes as needed. */
 #include "i386/tm-i386v.h"
+
+/* Stop backtracing when we wander into main.  */
+
+#define FRAME_CHAIN_VALID_ALTERNATE
index 3895053282f753eaee3a562b1de4e5ed3f51123b..a5d6186722bd716d4ed1deadfdd861eb019c2443 100644 (file)
@@ -150,25 +150,18 @@ 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;
-               }
+               ms_type = mst_unknown;
+
              record_minimal_symbol ((char *) sym -> name, symaddr, ms_type,
                                     objfile);
            }
@@ -214,6 +207,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);
@@ -230,6 +224,15 @@ nlm_symfile_read (objfile, section_offsets, mainline)
   stabsect_build_psymtabs (objfile, section_offsets, mainline, ".stab",
                           ".stabstr");
 
+  mainsym = lookup_symbol ("main", NULL, VAR_NAMESPACE, NULL, NULL);
+
+  if (mainsym
+      && mainsym->class == LOC_BLOCK)
+    {
+      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. */
 
index 530e19b054b58a85a49e81eb25425fbac813221d..5e9e35467816f8258a2e5d6a40d99c3a68133b71 100644 (file)
@@ -578,6 +578,27 @@ objfile_relocate (objfile, new_offsets)
          }
       }
   }
+
+  if (objfile->ei.entry_point != ~0)
+    objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT);
+
+  if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
+    {
+      objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT);
+      objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT);
+    }
+
+  if (objfile->ei.entry_file_lowpc != INVALID_ENTRY_LOWPC)
+    {
+      objfile->ei.entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT);
+      objfile->ei.entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT);
+    }
+
+  if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
+    {
+      objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT);
+      objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT);
+    }
 }
 \f
 /* Many places in gdb want to test just to see if we have any partial
index 252a75d1e46eb4d1e46ff2eb0985adb0684ce66d..8a1fdc632fca5537753a228979932444e1262e3a 100644 (file)
@@ -93,6 +93,8 @@ struct entry_info
 
   CORE_ADDR entry_point;
 
+#define INVALID_ENTRY_POINT (~0) /* ~0 will not be in any file, we hope.  */
+
   /* Start (inclusive) and end (exclusive) of function containing the
      entry point. */
 
@@ -110,6 +112,15 @@ struct entry_info
   CORE_ADDR main_func_lowpc;
   CORE_ADDR main_func_highpc;
 
+/* Use these values when any of the above ranges is invalid.  */
+
+/* We use these values because it guarantees that there is no number that is
+   both >= LOWPC && < HIGHPC.  It is also highly unlikely that 3 is a valid
+   module or function start address (as opposed to 0).  */
+
+#define INVALID_ENTRY_LOWPC (3)
+#define INVALID_ENTRY_HIGHPC (1)
+
 };