From 962257181f42f4faa4a02a316c3e5a4f6d2e057b Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Sun, 1 Jul 2007 22:39:04 +0000 Subject: [PATCH] * minsyms.c (lookup_minimal_symbol_by_pc_section): Search fewer objfiles. --- gdb/ChangeLog | 5 +++++ gdb/minsyms.c | 26 +++++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9fa7e7b74f..a8670d1662 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2007-07-01 Daniel Jacobowitz + + * minsyms.c (lookup_minimal_symbol_by_pc_section): Search fewer + objfiles. + 2007-07-01 Daniel Jacobowitz * top.c (gdb_readline_wrapper_line): Call rl_callback_handler_remove. diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 45f0c2f301..68193bbe3e 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -387,20 +387,20 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc, asection *section) if (pc_section == NULL) return NULL; - /* NOTE: cagney/2004-01-27: Removed code (added 2003-07-19) that was - trying to force the PC into a valid section as returned by - find_pc_section. It broke IRIX 6.5 mdebug which relies on this - code returning an absolute symbol - the problem was that - find_pc_section wasn't returning an absolute section and hence - the code below would skip over absolute symbols. Since the - original problem was with finding a frame's function, and that - uses [indirectly] lookup_minimal_symbol_by_pc, the original - problem has been fixed by having that function use - find_pc_section. */ + /* We can not require the symbol found to be in pc_section, because + e.g. IRIX 6.5 mdebug relies on this code returning an absolute + symbol - but find_pc_section won't return an absolute section and + hence the code below would skip over absolute symbols. We can + still take advantage of the call to find_pc_section, though - the + object file still must match. In case we have separate debug + files, search both the file and its separate debug file. There's + no telling which one will have the minimal symbols. */ - for (objfile = object_files; - objfile != NULL; - objfile = objfile->next) + objfile = pc_section->objfile; + if (objfile->separate_debug_objfile) + objfile = objfile->separate_debug_objfile; + + for (; objfile != NULL; objfile = objfile->separate_debug_objfile_backlink) { /* If this objfile has a minimal symbol table, go search it using a binary search. Note that a minimal symbol table always consists