From 4c5ae11b42433dbffc33fbde75c9e415594504d8 Mon Sep 17 00:00:00 2001 From: Renlin Li Date: Mon, 11 Dec 2017 15:33:18 +0000 Subject: [PATCH] [Binutils][Objdump]Check symbol section information while search a mapping symbol backward. 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 Renlin Li * aarch64-dis.c (print_insn_aarch64): Move symbol section check ... (get_sym_code_type): Here. binutils/ 2017-12-11 Renlin Li * testsuite/binutils-all/aarch64/objdump.d: New. * testsuite/binutils-all/aarch64/objdump.s: New. --- binutils/ChangeLog | 5 +++++ .../testsuite/binutils-all/aarch64/objdump.d | 19 +++++++++++++++++++ .../testsuite/binutils-all/aarch64/objdump.s | 9 +++++++++ opcodes/ChangeLog | 6 ++++++ opcodes/aarch64-dis.c | 8 +++++--- 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 binutils/testsuite/binutils-all/aarch64/objdump.d create mode 100644 binutils/testsuite/binutils-all/aarch64/objdump.s diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 4f29d19c315..f820280dccc 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2017-12-11 Renlin Li + + * testsuite/binutils-all/aarch64/objdump.d: New. + * testsuite/binutils-all/aarch64/objdump.s: New. + 2017-12-08 Nick Clifton * 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 index 00000000000..4aca57bae4d --- /dev/null +++ b/binutils/testsuite/binutils-all/aarch64/objdump.d @@ -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 : + 0: d503201f nop + +0+004 : + 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 index 00000000000..68de7037f77 --- /dev/null +++ b/binutils/testsuite/binutils-all/aarch64/objdump.s @@ -0,0 +1,9 @@ +.text +l1: + nop +l2: + nop +.word 0xc0ffee + +.section .fini, "x" +.word 0xdead diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 10d9e638e8a..7751ef27b14 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2017-12-11 Petr Pavlu + Renlin Li + + * aarch64-dis.c (print_insn_aarch64): Move symbol section check ... + (get_sym_code_type): Here. + 2017-12-03 Alan Modra * ppc-opc.c (extract_li20): Rewrite. diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c index df67a066fdd..8fd1ecfc920 100644 --- a/opcodes/aarch64-dis.c +++ b/opcodes/aarch64-dis.c @@ -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; -- 2.30.2