diff options
author | Alan Modra <amodra@gmail.com> | 2008-07-07 04:37:53 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2008-07-07 04:37:53 +0000 |
commit | 2b4590fb4681a245f4b28c5b6121e0982a0c404a (patch) | |
tree | 48ec422fe146240159a1c7c327ce2e4897f1bf39 /binutils | |
parent | 9795b468eb39233498a5289ff3297f96c787e848 (diff) | |
download | gdb-2b4590fb4681a245f4b28c5b6121e0982a0c404a.zip gdb-2b4590fb4681a245f4b28c5b6121e0982a0c404a.tar.gz gdb-2b4590fb4681a245f4b28c5b6121e0982a0c404a.tar.bz2 |
* objdump.c (find_symbol_for_address): Prefer symbols in current
section.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 5 | ||||
-rw-r--r-- | binutils/objdump.c | 35 |
2 files changed, 28 insertions, 12 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ce2fa3b..699abcf 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,10 @@ 2008-07-07 Alan Modra <amodra@bigpond.net.au> + * objdump.c (find_symbol_for_address): Prefer symbols in current + section. + +2008-07-07 Alan Modra <amodra@bigpond.net.au> + * ieee.c (write_ieee_debugging_info): Use bfd_make_section_with_flags. * nlmconv.c (main, powerpc_build_stubs): Likewise. * rescoff.c (write_coff_file): Likewise. diff --git a/binutils/objdump.c b/binutils/objdump.c index d171d14..5894724 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -740,6 +740,27 @@ find_symbol_for_address (bfd_vma vma, == bfd_asymbol_value (sorted_syms[thisplace - 1]))) --thisplace; + /* Prefer a symbol in the current section if we have multple symbols + with the same value, as can occur with overlays or zero size + sections. */ + min = thisplace; + while (min < max + && (bfd_asymbol_value (sorted_syms[min]) + == bfd_asymbol_value (sorted_syms[thisplace]))) + { + if (sorted_syms[min]->section == sec + && info->symbol_is_valid (sorted_syms[min], info)) + { + thisplace = min; + + if (place != NULL) + *place = thisplace; + + return sorted_syms[thisplace]; + } + ++min; + } + /* If the file is relocatable, and the symbol could be from this section, prefer a symbol from this section over symbols from others, even if the other symbol's value might be closer. @@ -759,19 +780,9 @@ find_symbol_for_address (bfd_vma vma, || !info->symbol_is_valid (sorted_syms[thisplace], info)) { long i; - long newplace; - - for (i = thisplace + 1; i < sorted_symcount; i++) - { - if (bfd_asymbol_value (sorted_syms[i]) - != bfd_asymbol_value (sorted_syms[thisplace])) - break; - } - - --i; - newplace = sorted_symcount; + long newplace = sorted_symcount; - for (; i >= 0; i--) + for (i = min - 1; i >= 0; i--) { if ((sorted_syms[i]->section == sec || !want_section) && info->symbol_is_valid (sorted_syms[i], info)) |