This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch/ARM] Skip private symbol when doing objdump


__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"
+}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]