diff options
author | Nick Clifton <nickc@redhat.com> | 2015-06-22 16:53:27 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2015-06-22 16:53:27 +0100 |
commit | bdc4de1b24353c4213e404029252ec75065499de (patch) | |
tree | c3ad4f2c6df81c81c6caae1251ecfd91fbcaee3e /opcodes/dis-buf.c | |
parent | 07fcd30112bb071e8dda0a2229a860f2874a7816 (diff) | |
download | gdb-bdc4de1b24353c4213e404029252ec75065499de.zip gdb-bdc4de1b24353c4213e404029252ec75065499de.tar.gz gdb-bdc4de1b24353c4213e404029252ec75065499de.tar.bz2 |
Stop "objdump -d" from disassembling past a symbolic address.
include * dis-asm.h (struct disassemble_info): Add stop_vma field.
binuti * objdump.c (disassemble_bytes): Set the stop_vma field in the
disassemble_info structure when disassembling code sections with
-d.
* doc/binutils.texi (objdump): Document the discrepancy between -d
and -D.
opcodes * dis-buf.c (buffer_read_memory): Fail is stop_vma is set and the
requested region lies beyond it.
* bfin-dis.c (print_insn_bfin): Ignore sysop instructions when
looking for 32-bit insns.
* mcore-dis.c (print_insn_mcore): Disable stop_vma when reading
data.
* sh-dis.c (print_insn_sh): Likewise.
* tic6x-dis.c (print_insn_tic6x): Disable stop_vma when reading
blocks of instructions.
* vax-dis.c (print_insn_vax): Check that the requested address
does not clash with the stop_vma.
tests * gas/arm/backslash-at.s: Add extra .byte directives so that the
foo symbol does not appear to point half way through an
instruction.
* gas/arm/backslash-at.d: Update expected disassembly.
* gas/i386/ilp32/x86-64-opcode-inval-intel.d: Likewise.
* gas/i386/ilp32/x86-64-opcode-inval.d: Likewise.
* gas/i386/x86-64-opcode-inval-intel.d: Likewise.
* gas/i386/x86-64-opcode-inval.d: Likewise.
Diffstat (limited to 'opcodes/dis-buf.c')
-rw-r--r-- | opcodes/dis-buf.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/opcodes/dis-buf.c b/opcodes/dis-buf.c index cc0e3ad..7c5d9ad 100644 --- a/opcodes/dis-buf.c +++ b/opcodes/dis-buf.c @@ -38,7 +38,9 @@ buffer_read_memory (bfd_vma memaddr, if (memaddr < info->buffer_vma || memaddr - info->buffer_vma > max_addr_offset - || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset) + || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset + || (info->stop_vma && (memaddr >= info->stop_vma + || memaddr + end_addr_offset > info->stop_vma))) /* Out of bounds. Use EIO because GDB uses it. */ return EIO; memcpy (myaddr, info->buffer + octets, length); |