diff options
author | 2019-09-11 17:33:00 +0930 | |
---|---|---|
committer | 2019-09-11 21:58:39 +0930 | |
commit | 0a4632b5637fa63ea4dc7651cdbae21e8b7005cd (patch) | |
tree | da6b685dc76e3c67ef578e73c9749ec0d87676ac /binutils | |
parent | Rename elf32.em to elf.em (diff) | |
download | binutils-gdb-0a4632b5637fa63ea4dc7651cdbae21e8b7005cd.tar.gz binutils-gdb-0a4632b5637fa63ea4dc7651cdbae21e8b7005cd.tar.bz2 binutils-gdb-0a4632b5637fa63ea4dc7651cdbae21e8b7005cd.zip |
Re: Enhance the disassembler
PR 24907
* objdump.c (disassemble_bytes): Adjust code to avoid overlong
lines. Correct max_reloc_offset_into_insn test.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 6 | ||||
-rw-r--r-- | binutils/objdump.c | 11 |
2 files changed, 13 insertions, 4 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 7ccf842955b..2e41773d878 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2019-09-11 Alan Modra <amodra@gmail.com> + + PR 24907 + * objdump.c (disassemble_bytes): Adjust code to avoid overlong + lines. Correct max_reloc_offset_into_insn test. + 2019-09-10 Nick Clifton <nickc@redhat.com> PR 24907 diff --git a/binutils/objdump.c b/binutils/objdump.c index 2303fe4abf8..00541cbec5f 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -1994,12 +1994,15 @@ disassemble_bytes (struct disassemble_info * inf, { bfd_signed_vma distance_to_rel; int insn_size = 0; + int max_reloc_offset + = aux->abfd->arch_info->max_reloc_offset_into_insn; - distance_to_rel = (**relppp)->address - - (rel_offset + addr_offset); + distance_to_rel = ((**relppp)->address - rel_offset + - addr_offset); if (distance_to_rel > 0 - && aux->abfd->arch_info->max_reloc_offset_into_insn <= distance_to_rel) + && (max_reloc_offset < 0 + || distance_to_rel <= max_reloc_offset)) { /* This reloc *might* apply to the current insn, starting somewhere inside it. Discover the length @@ -2029,7 +2032,7 @@ disassemble_bytes (struct disassemble_info * inf, the instruction that we are about to disassemble. */ if (distance_to_rel == 0 || (distance_to_rel > 0 - && distance_to_rel < (bfd_signed_vma) (insn_size / opb))) + && distance_to_rel < insn_size / (int) opb)) { inf->flags |= INSN_HAS_RELOC; aux->reloc = **relppp; |