* 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.
This commit is contained in:
parent
5005cbca02
commit
a4b4f52058
6 changed files with 72 additions and 15 deletions
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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. */
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/* Many places in gdb want to test just to see if we have any partial
|
||||
|
|
|
@ -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)
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue