[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  <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.
This commit is contained in:
Renlin Li 2017-12-11 15:33:18 +00:00
parent 3c0aa29aab
commit 4c5ae11b42
5 changed files with 44 additions and 3 deletions

View 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

View File

@ -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

View File

@ -0,0 +1,9 @@
.text
l1:
nop
l2:
nop
.word 0xc0ffee
.section .fini, "x"
.word 0xdead

View 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.

View 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;