aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2008-07-07 04:37:53 +0000
committerAlan Modra <amodra@gmail.com>2008-07-07 04:37:53 +0000
commit2b4590fb4681a245f4b28c5b6121e0982a0c404a (patch)
tree48ec422fe146240159a1c7c327ce2e4897f1bf39 /binutils
parent9795b468eb39233498a5289ff3297f96c787e848 (diff)
downloadfsf-binutils-gdb-2b4590fb4681a245f4b28c5b6121e0982a0c404a.zip
fsf-binutils-gdb-2b4590fb4681a245f4b28c5b6121e0982a0c404a.tar.gz
fsf-binutils-gdb-2b4590fb4681a245f4b28c5b6121e0982a0c404a.tar.bz2
* objdump.c (find_symbol_for_address): Prefer symbols in current
section.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/objdump.c35
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))