[Binutils][Objdump]Check symbol section information while search a mapping symbol...
authorRenlin Li <renlin.li@arm.com>
Mon, 11 Dec 2017 15:33:18 +0000 (15:33 +0000)
committerRenlin Li <renlin.li@arm.com>
Mon, 11 Dec 2017 15:42:47 +0000 (15:42 +0000)
When checking mapping symbols backwardly, the section which defines the symbol
is not considerted. This patch fixes this by moving the section checking code
into get_sym_code_type () function which is shared by forward and backword
mapping symbol searching.

opcodes/

2017-12-11  Petr Pavlu  <petr.pavlu@arm.com>
    Renlin Li  <renlin.li@arm.com>

* aarch64-dis.c (print_insn_aarch64): Move symbol section check ...
(get_sym_code_type): Here.

binutils/

2017-12-11  Renlin Li  <renlin.li@arm.com>

* testsuite/binutils-all/aarch64/objdump.d: New.
* testsuite/binutils-all/aarch64/objdump.s: New.

binutils/ChangeLog
binutils/testsuite/binutils-all/aarch64/objdump.d [new file with mode: 0644]
binutils/testsuite/binutils-all/aarch64/objdump.s [new file with mode: 0644]
opcodes/ChangeLog
opcodes/aarch64-dis.c

index 4f29d19c3156b19009de1c0acba7526f83f29e88..f820280dcccccb9337e7495091e118b01dc2fb0e 100644 (file)
@@ -1,3 +1,8 @@
+2017-12-11  Renlin Li  <renlin.li@arm.com>
+
+       * testsuite/binutils-all/aarch64/objdump.d: New.
+       * testsuite/binutils-all/aarch64/objdump.s: New.
+
 2017-12-08  Nick Clifton  <nickc@redhat.com>
 
        * objcopy.c (copy_relocations_in_section): Use the orelocations
diff --git a/binutils/testsuite/binutils-all/aarch64/objdump.d b/binutils/testsuite/binutils-all/aarch64/objdump.d
new file mode 100644 (file)
index 0000000..4aca57b
--- /dev/null
@@ -0,0 +1,19 @@
+#PROG: objcopy
+#objdump: -d
+#name: Check that the disassembler properly dump instruction and data.
+
+.*: +file format .*aarch64.*
+
+Disassembly of section \.text:
+
+0+000 <l1>:
+   0:  d503201f        nop
+
+0+004 <l2>:
+   4:  d503201f        nop
+   8:  00c0ffee        \.word  0x00c0ffee
+
+Disassembly of section .fini:
+
+0+000 <\.fini>:
+   0:  0000dead        \.word  0x0000dead
diff --git a/binutils/testsuite/binutils-all/aarch64/objdump.s b/binutils/testsuite/binutils-all/aarch64/objdump.s
new file mode 100644 (file)
index 0000000..68de703
--- /dev/null
@@ -0,0 +1,9 @@
+.text
+l1:
+  nop
+l2:
+  nop
+.word 0xc0ffee
+
+.section .fini, "x"
+.word 0xdead
index 10d9e638e8a2510a848d986fe67cabba7d2ec55e..7751ef27b1440a8a7bec466cdafcc36238a44a27 100644 (file)
@@ -1,3 +1,9 @@
+2017-12-11  Petr Pavlu  <petr.pavlu@arm.com>
+           Renlin Li  <renlin.li@arm.com>
+
+       * aarch64-dis.c (print_insn_aarch64): Move symbol section check ...
+       (get_sym_code_type): Here.
+
 2017-12-03  Alan Modra  <amodra@gmail.com>
 
        * ppc-opc.c (extract_li20): Rewrite.
index df67a066fdd8c6475b3920db5e222b183a31bfb6..8fd1ecfc920a4970104422a6444503102fadf526 100644 (file)
@@ -3097,6 +3097,10 @@ get_sym_code_type (struct disassemble_info *info, int n,
   unsigned int type;
   const char *name;
 
+  /* If the symbol is in a different section, ignore it.  */
+  if (info->section != NULL && info->section != info->symtab[n]->section)
+    return FALSE;
+
   es = *(elf_symbol_type **)(info->symtab + n);
   type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
 
@@ -3171,9 +3175,7 @@ print_insn_aarch64 (bfd_vma pc,
          addr = bfd_asymbol_value (info->symtab[n]);
          if (addr > pc)
            break;
-         if ((info->section == NULL
-              || info->section == info->symtab[n]->section)
-             && get_sym_code_type (info, n, &type))
+         if (get_sym_code_type (info, n, &type))
            {
              last_sym = n;
              found = TRUE;