This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
tweak objdump disassembly of overlays
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: binutils at sourceware dot org
- Date: Mon, 7 Jul 2008 14:09:18 +0930
- Subject: tweak objdump disassembly of overlays
This change to objdump improves disassembly of SPU executables
containing overlays.
* objdump.c (find_symbol_for_address): Prefer symbols in current
section.
Index: binutils/objdump.c
===================================================================
RCS file: /cvs/src/src/binutils/objdump.c,v
retrieving revision 1.141
diff -u -p -r1.141 objdump.c
--- binutils/objdump.c 12 Jun 2008 11:57:40 -0000 1.141
+++ binutils/objdump.c 7 Jul 2008 01:18:00 -0000
@@ -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))
--
Alan Modra
Australia Development Lab, IBM