diff options
author | Joel Brobecker <brobecker@gnat.com> | 2003-10-10 20:49:40 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2003-10-10 20:49:40 +0000 |
commit | 8d4ce20aa3ed34265884df3a9b426028e26b9ab5 (patch) | |
tree | 685c888923eea41afbb1d1371512b31dc31a69c7 /gdb/blockframe.c | |
parent | afce3d2aa20daedddd9855d0a0fa10f899c837f8 (diff) | |
download | gdb-8d4ce20aa3ed34265884df3a9b426028e26b9ab5.zip gdb-8d4ce20aa3ed34265884df3a9b426028e26b9ab5.tar.gz gdb-8d4ce20aa3ed34265884df3a9b426028e26b9ab5.tar.bz2 |
* blockframe.c (inside_main_func): No longer use symbol_lookup()
to lookup the main function symbol.
Diffstat (limited to 'gdb/blockframe.c')
-rw-r--r-- | gdb/blockframe.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/gdb/blockframe.c b/gdb/blockframe.c index 4deb3c1..04be0d1 100644 --- a/gdb/blockframe.c +++ b/gdb/blockframe.c @@ -83,22 +83,35 @@ deprecated_inside_entry_file (CORE_ADDR addr) int inside_main_func (CORE_ADDR pc) { + struct minimal_symbol *msymbol; + if (pc == 0) return 1; if (symfile_objfile == 0) return 0; + msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); + /* If the addr range is not set up at symbol reading time, set it up now. This is for DEPRECATED_FRAME_CHAIN_VALID_ALTERNATE. I do this for coff, because it is unable to set it up and symbol reading time. */ - if (symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC && - symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC) + if (msymbol != NULL + && symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC + && symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC) { - struct symbol *mainsym; + /* brobecker/2003-10-10: We used to rely on lookup_symbol() to search + the symbol associated to the main function. Unfortunately, + lookup_symbol() uses the current-language la_lookup_symbol_nonlocal + function to do the global symbol search. Depending on the language, + this can introduce certain side-effects, because certain languages + such as Ada for instance may find more than one match. So we prefer + to search the main function symbol using its address rather than + its name. */ + struct symbol *mainsym + = find_pc_function (SYMBOL_VALUE_ADDRESS (msymbol)); - mainsym = lookup_symbol (main_name (), NULL, VAR_DOMAIN, NULL, NULL); if (mainsym && SYMBOL_CLASS (mainsym) == LOC_BLOCK) { symfile_objfile->ei.main_func_lowpc = @@ -111,8 +124,6 @@ inside_main_func (CORE_ADDR pc) /* Not in the normal symbol tables, see if "main" is in the partial symbol table. If it's not, then give up. */ { - struct minimal_symbol *msymbol - = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_text) { struct obj_section *osect |