This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Improve obdump symbol filtering.
- From: Paul Brook <paul at codesourcery dot com>
- To: binutils at sourceware dot org
- Date: Mon, 21 May 2007 16:17:07 +0100
- Subject: Improve obdump symbol filtering.
Objdump (find_symbol_for_address) currently has logic to avoid certain
target-specific symbols when printing the symbol for an address. This is used
on ARM to skip mapping symbols.
The current logic for this is rather lame, and only really works if there is a
regular symbol at the same address as the mapping symbol.
Fortunately find_symbol_for_address already has reasonably sophisticated logic
for finding a symbol in a particular section. The attached patch merges the
target constraints into that logic.
Arm is currently the only target that this effects. The behavior of other
targets should be identical before and after this patch.
Tested on i686-linux, arm-none-eabi and arm-elf.
Ok?
Paul
2007-05-21 Paul Brook <paul@codesourcery.com>
bunutils/
* objdump.c (find_symbol_for_address): Merge section and target
specific filtering code.
ld/testsuite/
* ld-arm-mixed-lib.d: Update expected output.
* ld-arm/arm-app.d: Ditto.
* ld-arm/mixed-app.d: Ditto.
* ld-arm/arm-lib-plt32.d: Ditto.
* ld-arm/arm-app-abs32.d: Ditto.
* ld-arm/mixed-app-v5.d: Ditto.
* ld-arm/armthumb-lib.d: Ditto.
* ld-arm/arm-lib.d: Ditto.
gas/testsuite/
* gas/arm/backslash-at.d: Update expected output.
Index: binutils/objdump.c
===================================================================
--- binutils/objdump.c (revision 171561)
+++ binutils/objdump.c (working copy)
@@ -687,6 +687,7 @@ find_symbol_for_address (bfd_vma vma,
bfd *abfd;
asection *sec;
unsigned int opb;
+ bfd_boolean want_section;
if (sorted_symcount < 1)
return NULL;
@@ -732,15 +733,19 @@ find_symbol_for_address (bfd_vma vma,
Note that this may be wrong for some symbol references if the
sections have overlapping memory ranges, but in that case there's
no way to tell what's desired without looking at the relocation
- table. */
- if (sorted_syms[thisplace]->section != sec
- && (aux->require_sec
- || ((abfd->flags & HAS_RELOC) != 0
- && vma >= bfd_get_section_vma (abfd, sec)
- && vma < (bfd_get_section_vma (abfd, sec)
- + bfd_section_size (abfd, sec) / opb))))
+ table.
+
+ Also give the target a chance to reject symbols. */
+ want_section = (aux->require_sec
+ || ((abfd->flags & HAS_RELOC) != 0
+ && vma >= bfd_get_section_vma (abfd, sec)
+ && vma < (bfd_get_section_vma (abfd, sec)
+ + bfd_section_size (abfd, sec) / opb)));
+ if ((sorted_syms[thisplace]->section != sec && want_section)
+ || !info->symbol_is_valid (sorted_syms[thisplace], info))
{
long i;
+ long newplace;
for (i = thisplace + 1; i < sorted_symcount; i++)
{
@@ -750,27 +755,36 @@ find_symbol_for_address (bfd_vma vma,
}
--i;
+ newplace = sorted_symcount;
for (; i >= 0; i--)
{
- if (sorted_syms[i]->section == sec
- && (i == 0
- || sorted_syms[i - 1]->section != sec
- || (bfd_asymbol_value (sorted_syms[i])
- != bfd_asymbol_value (sorted_syms[i - 1]))))
+ if ((sorted_syms[i]->section == sec || !want_section)
+ && info->symbol_is_valid (sorted_syms[i], info))
{
- thisplace = i;
- break;
+ if (newplace == sorted_symcount)
+ newplace = i;
+
+ if (bfd_asymbol_value (sorted_syms[i])
+ != bfd_asymbol_value (sorted_syms[newplace]))
+ break;
+
+ /* Remember this symbol and keep searching until we reach
+ an earlier address. */
+ newplace = i;
}
}
- if (sorted_syms[thisplace]->section != sec)
+ if (newplace != sorted_symcount)
+ thisplace = newplace;
+ else
{
/* We didn't find a good symbol with a smaller value.
Look for one with a larger value. */
for (i = thisplace + 1; i < sorted_symcount; i++)
{
- if (sorted_syms[i]->section == sec)
+ if ((sorted_syms[i]->section == sec || !want_section)
+ && info->symbol_is_valid (sorted_syms[i], info))
{
thisplace = i;
break;
@@ -778,25 +792,12 @@ find_symbol_for_address (bfd_vma vma,
}
}
- if (sorted_syms[thisplace]->section != sec
- && (aux->require_sec
- || ((abfd->flags & HAS_RELOC) != 0
- && vma >= bfd_get_section_vma (abfd, sec)
- && vma < (bfd_get_section_vma (abfd, sec)
- + bfd_section_size (abfd, sec)))))
+ if ((sorted_syms[thisplace]->section != sec && want_section)
+ || !info->symbol_is_valid (sorted_syms[thisplace], info))
/* There is no suitable symbol. */
return NULL;
}
- /* Give the target a chance to reject the symbol. */
- while (! info->symbol_is_valid (sorted_syms [thisplace], info))
- {
- ++ thisplace;
- if (thisplace >= sorted_symcount
- || bfd_asymbol_value (sorted_syms [thisplace]) > vma)
- return NULL;
- }
-
if (place != NULL)
*place = thisplace;
Index: ld/testsuite/ld-arm/mixed-lib.d
===================================================================
--- ld/testsuite/ld-arm/mixed-lib.d (revision 171561)
+++ ld/testsuite/ld-arm/mixed-lib.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x1c>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -20,7 +20,7 @@ Disassembly of section .text:
.* <lib_func1>:
.*: e1a0c00d mov ip, sp
.*: e92dd800 push {fp, ip, lr, pc}
- .*: ebfffff. bl .* <.text-0x..?>
+ .*: ebfffff. bl .* <lib_func1-0x..?>
.*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: e1a00000 nop \(mov r0,r0\)
Index: ld/testsuite/ld-arm/arm-app.d
===================================================================
--- ld/testsuite/ld-arm/arm-app.d (revision 171561)
+++ ld/testsuite/ld-arm/arm-app.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -27,7 +27,7 @@ Disassembly of section .text:
.* <app_func>:
.*: e1a0c00d mov ip, sp
.*: e92dd800 push {fp, ip, lr, pc}
- .*: ebfffff4 bl .* <.text-0xc>
+ .*: ebfffff4 bl .* <_start-0xc>
.*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
Index: ld/testsuite/ld-arm/mixed-app.d
===================================================================
--- ld/testsuite/ld-arm/mixed-app.d (revision 171561)
+++ ld/testsuite/ld-arm/mixed-app.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x2c>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -50,7 +50,7 @@ Disassembly of section .text:
.* <app_tfunc>:
.*: b500 push {lr}
- .*: f7ff ffc. bl .* <.text-0x..>
+ .*: f7ff ffc. bl .* <_start-0x..>
.*: bd00 pop {pc}
.*: 4770 bx lr
.*: 46c0 nop \(mov r8, r8\)
Index: ld/testsuite/ld-arm/arm-lib-plt32.d
===================================================================
--- ld/testsuite/ld-arm/arm-lib-plt32.d (revision 171561)
+++ ld/testsuite/ld-arm/arm-lib-plt32.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -20,7 +20,7 @@ Disassembly of section .text:
.* <lib_func1>:
.*: e1a0c00d mov ip, sp
.*: e92dd800 push {fp, ip, lr, pc}
- .*: ebfffff9 bl .* <\.text-0xc>
+ .*: ebfffff9 bl .* <lib_func1-0xc>
.*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
Index: ld/testsuite/ld-arm/arm-app-abs32.d
===================================================================
--- ld/testsuite/ld-arm/arm-app-abs32.d (revision 171561)
+++ ld/testsuite/ld-arm/arm-app-abs32.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .* .*
@@ -20,7 +20,7 @@ Disassembly of section .text:
.* <_start>:
.*: e1a0c00d mov ip, sp
.*: e92dd800 push {fp, ip, lr, pc}
- .*: e59f0004 ldr r0, \[pc, #4\] ; .* <.text\+0x14>
+ .*: e59f0004 ldr r0, \[pc, #4\] ; .* <_start\+0x14>
.*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: .* .*
Index: ld/testsuite/ld-arm/mixed-app-v5.d
===================================================================
--- ld/testsuite/ld-arm/mixed-app-v5.d (revision 171561)
+++ ld/testsuite/ld-arm/mixed-app-v5.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x1c>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -48,7 +48,7 @@ Disassembly of section .text:
.* <app_tfunc>:
.*: b500 push {lr}
- .*: f7ff efc. blx .* <.text-0x..>
+ .*: f7ff efc. blx .* <_start-0x..>
.*: bd00 pop {pc}
.*: 4770 bx lr
.*: 46c0 nop \(mov r8, r8\)
Index: ld/testsuite/ld-arm/armthumb-lib.d
===================================================================
--- ld/testsuite/ld-arm/armthumb-lib.d (revision 171561)
+++ ld/testsuite/ld-arm/armthumb-lib.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x1c>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -20,7 +20,7 @@ Disassembly of section .text:
.* <lib_func1>:
.*: e1a0c00d mov ip, sp
.*: e92dd800 push {fp, ip, lr, pc}
- .*: ebfffff. bl .* <.text-0x..?>
+ .*: ebfffff. bl .* <lib_func1-0x..?>
.*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
.*: e1a00000 nop \(mov r0,r0\)
Index: ld/testsuite/ld-arm/arm-lib.d
===================================================================
--- ld/testsuite/ld-arm/arm-lib.d (revision 171561)
+++ ld/testsuite/ld-arm/arm-lib.d (working copy)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
.* <.plt>:
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <\.plt\+0x10>
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x10>
.*: e08fe00e add lr, pc, lr
.*: e5bef008 ldr pc, \[lr, #8\]!
.*: .*
@@ -20,7 +20,7 @@ Disassembly of section .text:
.* <lib_func1>:
.*: e1a0c00d mov ip, sp
.*: e92dd800 push {fp, ip, lr, pc}
- .*: ebfffff9 bl .* <\.text-0xc>
+ .*: ebfffff9 bl .* <lib_func1-0xc>
.*: e89d6800 ldm sp, {fp, sp, lr}
.*: e12fff1e bx lr
Index: gas/testsuite/gas/arm/backslash-at.d
===================================================================
--- gas/testsuite/gas/arm/backslash-at.d (revision 171561)
+++ gas/testsuite/gas/arm/backslash-at.d (working copy)
@@ -4,7 +4,7 @@
.*: file format .*arm.*
Disassembly of section .text:
-00000000 <.text> 615c .short 0x615c
+00000000 <foo-0x2> 615c .short 0x615c
00000002 <foo> e3a00000 mov r0, #0 ; 0x0
00000006 <foo\+0x4> e3a00000 mov r0, #0 ; 0x0
0000000a <foo\+0x8> e3a00000 mov r0, #0 ; 0x0