This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[Patch/ARM] Skip private symbol when doing objdump
- From: Jiong Wang <jiong dot wang at arm dot com>
- To: "binutils at sourceware dot org" <binutils at sourceware dot org>
- Date: Tue, 03 Feb 2015 11:37:51 +0000
- Subject: [Patch/ARM] Skip private symbol when doing objdump
- Authentication-results: sourceware.org; auth=none
__tagsym$$ is used as a prefix to tag particular symbols by the proprietary
ARM toolchain. This patch gives higher priority to proper symbol names so
that they are shown in the disassembly appropriately.
before this patch, for "objdump -D", sometime we display
__tagsym$$noinline:
insn0
insn1
...
__tagsym$$used:
data_content
...
after this patch, we display:
foo:
insn0
insn1
global_a:
data_content
...
this result make more sense for the user.
pass native full binutils check
ok for trunk?
2015-02-03 Jiong Wang <jiong.wang@arm.com>
opcodes/
* arm-dis.c (arm_symbol_is_valid): Skip ARM private symbols.
binutils/testsuite/
* binutils-all/arm/rvct_symbol.s: New testcase.
* binutils-all/arm/objdump.exp: Run it.
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index e0a82c0..994586d 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -4558,7 +4558,10 @@ print_insn_data (bfd_vma pc ATTRIBUTE_UNUSED,
}
/* Disallow mapping symbols ($a, $b, $d, $t etc) from
- being displayed in symbol relative addresses. */
+ being displayed in symbol relative addresses.
+
+ Also disallow private symbol, with __tagsym$$ prefix,
+ from ARM RVCT toolchain being displayed. */
bfd_boolean
arm_symbol_is_valid (asymbol * sym,
@@ -4571,7 +4574,7 @@ arm_symbol_is_valid (asymbol * sym,
name = bfd_asymbol_name (sym);
- return (name && *name != '$');
+ return (name && *name != '$' && strncmp (name, "__tagsym$$", 10));
}
/* Parse an individual disassembler option. */
diff --git a/binutils/testsuite/binutils-all/arm/rvct_symbol.s b/binutils/testsuite/binutils-all/arm/rvct_symbol.s
new file mode 100644
index 0000000..f63240b
--- /dev/null
+++ b/binutils/testsuite/binutils-all/arm/rvct_symbol.s
@@ -0,0 +1,15 @@
+ .text
+foo:
+__tagsym$$0:
+ add r0, r1, r2
+
+ .data
+ .global global_a
+__tagsym$$used0:
+global_a:
+ .word 0xcafedead
+
+ .global __tagsym$$used1
+__tagsym$$used1:
+global_b:
+ .word 0xcafecafe
diff --git a/binutils/testsuite/binutils-all/arm/objdump.exp b/binutils/testsuite/binutils-all/arm/objdump.exp
index ce5a42c..cd10c4b 100644
--- a/binutils/testsuite/binutils-all/arm/objdump.exp
+++ b/binutils/testsuite/binutils-all/arm/objdump.exp
@@ -86,3 +86,25 @@ if [regexp $want $got] then {
} else {
fail "multiple input files"
}
+
+if {![binutils_assemble $srcdir/$subdir/rvct_symbol.s tmpdir/rvct_symbol.o]} then {
+ return
+}
+
+if [is_remote host] {
+ set objfile [remote_download host tmpdir/rvct_symbol.o]
+} else {
+ set objfile tmpdir/rvct_symbol.o
+}
+
+# Make sure multiple disassemblies come out the same
+
+set got [binutils_run $OBJDUMP "-D $objfile $objfile"]
+
+set want "foo.*global_a.*global_b"
+
+if [regexp $want $got] then {
+ pass "skip rvct symbol"
+} else {
+ fail "skip rvct symbol"
+}