aboutsummaryrefslogtreecommitdiff
path: root/gdb/nlmread.c
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1994-06-09 06:30:38 +0000
committerStu Grossman <grossman@cygnus>1994-06-09 06:30:38 +0000
commita4b4f5205874ff2b856aad63a4298f7eb205262f (patch)
tree184658dd550b80260f6a69d8da435e96c77eb966 /gdb/nlmread.c
parent5005cbca02225dc77057fc86d08c73e5675c02fe (diff)
downloadgdb-a4b4f5205874ff2b856aad63a4298f7eb205262f.zip
gdb-a4b4f5205874ff2b856aad63a4298f7eb205262f.tar.gz
gdb-a4b4f5205874ff2b856aad63a4298f7eb205262f.tar.bz2
* 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.
Diffstat (limited to 'gdb/nlmread.c')
-rw-r--r--gdb/nlmread.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/gdb/nlmread.c b/gdb/nlmread.c
index 3895053..a5d6186 100644
--- a/gdb/nlmread.c
+++ b/gdb/nlmread.c
@@ -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. */