This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Stop "objdump -d" from disassembling past a symbolic address.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bdc4de1b24353c4213e404029252ec75065499de

commit bdc4de1b24353c4213e404029252ec75065499de
Author: Nick Clifton <nickc@redhat.com>
Date:   Mon Jun 22 16:53:27 2015 +0100

    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.

Diff:
---
 binutils/ChangeLog                                 |  8 +++++++
 binutils/doc/binutils.texi                         |  9 ++++++++
 binutils/objdump.c                                 | 25 ++++++++++++++++------
 gas/testsuite/ChangeLog                            | 11 ++++++++++
 gas/testsuite/gas/arm/backslash-at.d               | 18 ++++++++--------
 gas/testsuite/gas/arm/backslash-at.s               |  7 +++---
 .../gas/i386/ilp32/x86-64-opcode-inval-intel.d     | 12 +++++------
 gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval.d | 12 +++++------
 gas/testsuite/gas/i386/x86-64-opcode-inval-intel.d | 12 +++++------
 gas/testsuite/gas/i386/x86-64-opcode-inval.d       | 12 +++++------
 include/ChangeLog                                  |  4 ++++
 include/dis-asm.h                                  |  8 +++++++
 opcodes/ChangeLog                                  | 14 ++++++++++++
 opcodes/bfin-dis.c                                 |  2 +-
 opcodes/dis-buf.c                                  |  4 +++-
 opcodes/mcore-dis.c                                | 11 +++++++---
 opcodes/sh-dis.c                                   |  2 ++
 opcodes/tic6x-dis.c                                |  3 +++
 opcodes/vax-dis.c                                  |  3 ++-
 19 files changed, 128 insertions(+), 49 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 63fefc8..c44146d 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,11 @@
+2015-06-22  Nick Clifton  <nickc@redhat.com>
+
+	* 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.
+
 2015-06-05  Nick Clifton  <nickc@redhat.com>
 
 	* dwarf.c (read_debug_line_header): Use reloc_at to detect
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 75852e6..0781036 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -2041,6 +2041,15 @@ expected to contain instructions.
 Like @option{-d}, but disassemble the contents of all sections, not just
 those expected to contain instructions.
 
+This option also has a subtle effect on the disassembly of
+instructions in code sections.  When option @option{-d} is in effect
+objdump will assume that any symbols present in a code section occur
+on the boundary between instructions and it will refuse to disassemble
+across such a boundary.  When option @option{-D} is in effect however
+this assumption is supressed.  This means that it is possible for the
+output of @option{-d} and @option{-D} to differ if, for example, data
+is stored in code sections.
+
 If the target is an ARM architecture this switch also has the effect
 of forcing the disassembler to decode pieces of data found in code
 sections as if they were instructions.
diff --git a/binutils/objdump.c b/binutils/objdump.c
index f51b6f5..c4387c4 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -1685,7 +1685,18 @@ disassemble_bytes (struct disassemble_info * inf,
 		    }
 		}
 
+	      if (! disassemble_all
+		  && (section->flags & (SEC_CODE | SEC_HAS_CONTENTS))
+		  == (SEC_CODE | SEC_HAS_CONTENTS))
+		/* Set a stop_vma so that the disassembler will not read
+		   beyond the next symbol.  We assume that symbols appear on
+		   the boundaries between instructions.  We only do this when
+		   disassembling code of course, and when -D is in effect.  */
+		inf->stop_vma = section->vma + stop_offset;
+	      
 	      octets = (*disassemble_fn) (section->vma + addr_offset, inf);
+
+	      inf->stop_vma = 0;
 	      inf->fprintf_func = (fprintf_ftype) fprintf;
 	      inf->stream = stdout;
 	      if (insn_width == 0 && inf->bytes_per_line != 0)
@@ -1911,7 +1922,7 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
   arelent **                   rel_pp = NULL;
   arelent **                   rel_ppstart = NULL;
   arelent **                   rel_ppend;
-  unsigned long                stop_offset;
+  bfd_vma                      stop_offset;
   asymbol *                    sym = NULL;
   long                         place = 0;
   long                         rel_count;
@@ -2035,7 +2046,7 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
     {
       bfd_vma addr;
       asymbol *nextsym;
-      unsigned long nextstop_offset;
+      bfd_vma nextstop_offset;
       bfd_boolean insns;
 
       addr = section->vma + addr_offset;
@@ -2330,7 +2341,7 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
 	      section->num_relocs = reloc_count;
 	    }
 	}
-    }	
+    }
 
   return 1;
 }
@@ -2794,9 +2805,9 @@ dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED)
 {
   bfd_byte *data = 0;
   bfd_size_type datasize;
-  bfd_size_type addr_offset;
-  bfd_size_type start_offset;
-  bfd_size_type stop_offset;
+  bfd_vma addr_offset;
+  bfd_vma start_offset;
+  bfd_vma stop_offset;
   unsigned int opb = bfd_octets_per_byte (abfd);
   /* Bytes per line.  */
   const int onaline = 16;
@@ -3451,7 +3462,7 @@ display_any_bfd (bfd *file, int level)
     {
       bfd *arfile = NULL;
       bfd *last_arfile = NULL;
-      
+
       if (level == 0)
         printf (_("In archive %s:\n"), bfd_get_filename (file));
       else if (level > 100)
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 511dce3..2243489 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+2015-06-22  Nick Clifton  <nickc@redhat.com>
+
+	* 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.
+
 2015-06-19  Peter Bergner  <bergner@vnet.ibm.com>
 
 	* gas/ppc/power8.d: Fixup rfebb test results.
diff --git a/gas/testsuite/gas/arm/backslash-at.d b/gas/testsuite/gas/arm/backslash-at.d
index 3397573..49e815a 100644
--- a/gas/testsuite/gas/arm/backslash-at.d
+++ b/gas/testsuite/gas/arm/backslash-at.d
@@ -5,13 +5,13 @@
 
 Disassembly of section .text:
 0+000 <.*>.*(615c|5c61).*
-0+002 <foo> e3a00000 	mov	r0, #0
-0+006 <foo\+0x4> e3a00000 	mov	r0, #0
-0+00a <foo\+0x8> e3a00000 	mov	r0, #0
-0+00e <foo\+0xc> e3a00001 	mov	r0, #1
-0+012 <foo\+0x10> e3a00001 	mov	r0, #1
-0+016 <foo\+0x14> e3a00001 	mov	r0, #1
-0+01a <foo\+0x18> e3a00002 	mov	r0, #2
-0+01e <foo\+0x1c> e3a00002 	mov	r0, #2
-0+022 <foo\+0x20> e3a00002 	mov	r0, #2
+0+004 <foo> e3a00000 	mov	r0, #0
+0+008 <foo\+0x4> e3a00000 	mov	r0, #0
+0+00c <foo\+0x8> e3a00000 	mov	r0, #0
+0+010 <foo\+0xc> e3a00001 	mov	r0, #1
+0+014 <foo\+0x10> e3a00001 	mov	r0, #1
+0+018 <foo\+0x14> e3a00001 	mov	r0, #1
+0+01c <foo\+0x18> e3a00002 	mov	r0, #2
+0+020 <foo\+0x1c> e3a00002 	mov	r0, #2
+0+024 <foo\+0x20> e3a00002 	mov	r0, #2
 #...
diff --git a/gas/testsuite/gas/arm/backslash-at.s b/gas/testsuite/gas/arm/backslash-at.s
index 4975aea..1357354 100644
--- a/gas/testsuite/gas/arm/backslash-at.s
+++ b/gas/testsuite/gas/arm/backslash-at.s
@@ -6,9 +6,10 @@
 	mov	r0, #\@ @comment
 .endm
 
-.byte	'\\
-.byte	'\a
-
+	.byte	'\\
+	.byte	'\a
+	.byte 	0
+	.byte	0
 foo:
 	bar
 	bar
diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval-intel.d b/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval-intel.d
index cd503eb..cefd9fd 100644
--- a/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval-intel.d
+++ b/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval-intel.d
@@ -12,26 +12,26 @@ Disassembly of section .text:
 
 0+1 <aad0>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d5                	or     dl,ch
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+3 <aad1>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 d4                	add    dl,ah
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+5 <aam0>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d4                	or     dl,ah
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+7 <aam1>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 3f                	add    bh,BYTE PTR \[rdi\]
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+9 <aas>:
 [ 	]*[a-f0-9]+:	3f                   	\(bad\)  
 
 0+a <bound>:
-[ 	]*[a-f0-9]+:	62                   	\(bad\)  
-[ 	]*[a-f0-9]+:	10 27                	adc    BYTE PTR \[rdi\],ah
+[ 	]*[a-f0-9]+:	62                   	.byte 0x62
+[ 	]*[a-f0-9]+:	10                   	.byte 0x10
 
 0+c <daa>:
 [ 	]*[a-f0-9]+:	27                   	\(bad\)  
diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval.d b/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval.d
index 35f8137..21ac5de 100644
--- a/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval.d
+++ b/gas/testsuite/gas/i386/ilp32/x86-64-opcode-inval.d
@@ -12,26 +12,26 @@ Disassembly of section .text:
 
 0+1 <aad0>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d5                	or     %ch,%dl
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+3 <aad1>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 d4                	add    %ah,%dl
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+5 <aam0>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d4                	or     %ah,%dl
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+7 <aam1>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 3f                	add    \(%rdi\),%bh
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+9 <aas>:
 [ 	]*[a-f0-9]+:	3f                   	\(bad\)  
 
 0+a <bound>:
-[ 	]*[a-f0-9]+:	62                   	\(bad\)  
-[ 	]*[a-f0-9]+:	10 27                	adc    %ah,\(%rdi\)
+[ 	]*[a-f0-9]+:	62                   	.byte 0x62
+[ 	]*[a-f0-9]+:	10                   	.byte 0x10
 
 0+c <daa>:
 [ 	]*[a-f0-9]+:	27                   	\(bad\)  
diff --git a/gas/testsuite/gas/i386/x86-64-opcode-inval-intel.d b/gas/testsuite/gas/i386/x86-64-opcode-inval-intel.d
index 7cf0c27..df7c8bd 100644
--- a/gas/testsuite/gas/i386/x86-64-opcode-inval-intel.d
+++ b/gas/testsuite/gas/i386/x86-64-opcode-inval-intel.d
@@ -12,26 +12,26 @@ Disassembly of section .text:
 
 0+1 <aad0>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d5                	or     dl,ch
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+3 <aad1>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 d4                	add    dl,ah
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+5 <aam0>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d4                	or     dl,ah
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+7 <aam1>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 3f                	add    bh,BYTE PTR \[rdi\]
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+9 <aas>:
 [ 	]*[a-f0-9]+:	3f                   	\(bad\)  
 
 0+a <bound>:
-[ 	]*[a-f0-9]+:	62                   	\(bad\)  
-[ 	]*[a-f0-9]+:	10 27                	adc    BYTE PTR \[rdi\],ah
+[ 	]*[a-f0-9]+:	62                   	.byte 0x62
+[ 	]*[a-f0-9]+:	10                   	.byte 0x10
 
 0+c <daa>:
 [ 	]*[a-f0-9]+:	27                   	\(bad\)  
diff --git a/gas/testsuite/gas/i386/x86-64-opcode-inval.d b/gas/testsuite/gas/i386/x86-64-opcode-inval.d
index ccb19ac..d0d08cb 100644
--- a/gas/testsuite/gas/i386/x86-64-opcode-inval.d
+++ b/gas/testsuite/gas/i386/x86-64-opcode-inval.d
@@ -11,26 +11,26 @@ Disassembly of section .text:
 
 0+1 <aad0>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d5                	or     %ch,%dl
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+3 <aad1>:
 [ 	]*[a-f0-9]+:	d5                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 d4                	add    %ah,%dl
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+5 <aam0>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	0a d4                	or     %ah,%dl
+[ 	]*[a-f0-9]+:	0a                   	.byte 0xa
 
 0+7 <aam1>:
 [ 	]*[a-f0-9]+:	d4                   	\(bad\)  
-[ 	]*[a-f0-9]+:	02 3f                	add    \(%rdi\),%bh
+[ 	]*[a-f0-9]+:	02                   	.byte 0x2
 
 0+9 <aas>:
 [ 	]*[a-f0-9]+:	3f                   	\(bad\)  
 
 0+a <bound>:
-[ 	]*[a-f0-9]+:	62                   	\(bad\)  
-[ 	]*[a-f0-9]+:	10 27                	adc    %ah,\(%rdi\)
+[ 	]*[a-f0-9]+:	62                   	.byte 0x62
+[ 	]*[a-f0-9]+:	10                   	.byte 0x10
 
 0+c <daa>:
 [ 	]*[a-f0-9]+:	27                   	\(bad\)  
diff --git a/include/ChangeLog b/include/ChangeLog
index 9f8e212..c924c56 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2015-06-22  Nick Clifton  <nickc@redhat.com>
+
+	* dis-asm.h (struct disassemble_info): Add stop_vma field.
+
 2015-05-28  Catherine Moore  <clm@codesourcery.com>
 
 	include/
diff --git a/include/dis-asm.h b/include/dis-asm.h
index ad060ee..ebc2604 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -212,6 +212,14 @@ typedef struct disassemble_info
   /* Command line options specific to the target disassembler.  */
   char * disassembler_options;
 
+  /* If non-zero then try not disassemble beyond this address, even if
+     there are values left in the buffer.  This address is the address
+     of the nearest symbol forwards from the start of the disassembly,
+     and it is assumed that it lies on the boundary between instructions.
+     If an instruction spans this address then this is an error in the
+     file being disassembled.  */
+  bfd_vma stop_vma;
+
 } disassemble_info;
 
 
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index f764473..0697cbe 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,17 @@
+2015-06-22  Nick Clifton  <nickc@redhat.com>
+
+	* 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.
+
 2015-06-19  Peter Bergner  <bergner@vnet.ibm.com>
 
         * ppc-dis.h (skip_optional_operands): Use ppc_optional_operand_value.
diff --git a/opcodes/bfin-dis.c b/opcodes/bfin-dis.c
index cf66b79..bf2052e 100644
--- a/opcodes/bfin-dis.c
+++ b/opcodes/bfin-dis.c
@@ -4664,7 +4664,7 @@ _print_insn_bfin (bfd_vma pc, disassemble_info *outf)
     return -1;
   priv->iw0 = iw0;
 
-  if ((iw0 & 0xc000) == 0xc000)
+  if (((iw0 & 0xc000) == 0xc000) && ((iw0 & 0xff00) != 0xf800))
     {
       /* 32-bit insn.  */
       if (ifetch (pc + 2, outf, &iw1))
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);
diff --git a/opcodes/mcore-dis.c b/opcodes/mcore-dis.c
index dc62099..536f79b 100644
--- a/opcodes/mcore-dis.c
+++ b/opcodes/mcore-dis.c
@@ -88,9 +88,8 @@ static const char *crname[] = {
 static const unsigned isiz[] = { 2, 0, 1, 0 };
 
 int
-print_insn_mcore (memaddr, info)
-     bfd_vma memaddr;
-     struct disassemble_info *info;
+print_insn_mcore (bfd_vma memaddr,
+		  struct disassemble_info *info)
 {
   unsigned char ibytes[4];
   fprintf_ftype print_func = info->fprintf_func;
@@ -233,6 +232,9 @@ print_insn_mcore (memaddr, info)
 
 	    val = (memaddr + 2 + ((inst & 0xFF) << 2)) & 0xFFFFFFFC;
 
+	    /* We are not reading an instruction, so allow
+	       reads to extend beyond the next symbol.  */
+	    info->stop_vma = 0;
 	    status = info->read_memory_func (val, ibytes, 4, info);
 	    if (status != 0)
 	      {
@@ -263,6 +265,9 @@ print_insn_mcore (memaddr, info)
 
 	    val = (memaddr + 2 + ((inst & 0xFF) << 2)) & 0xFFFFFFFC;
 
+	    /* We are not reading an instruction, so allow
+	       reads to extend beyond the next symbol.  */
+	    info->stop_vma = 0;
 	    status = info->read_memory_func (val, ibytes, 4, info);
 	    if (status != 0)
 	      {
diff --git a/opcodes/sh-dis.c b/opcodes/sh-dis.c
index 74de9f6..a3f645d 100644
--- a/opcodes/sh-dis.c
+++ b/opcodes/sh-dis.c
@@ -905,6 +905,8 @@ print_insn_sh (bfd_vma memaddr, struct disassemble_info *info)
 	    size = 2;
 	  else
 	    size = 4;
+	  /* Not reading an instruction - disable stop_vma.  */
+	  info->stop_vma = 0;
 	  status = info->read_memory_func (disp_pc_addr, bytes, size, info);
 	  if (status == 0)
 	    {
diff --git a/opcodes/tic6x-dis.c b/opcodes/tic6x-dis.c
index e027340..498ffe0 100644
--- a/opcodes/tic6x-dis.c
+++ b/opcodes/tic6x-dis.c
@@ -249,6 +249,9 @@ print_insn_tic6x (bfd_vma addr, struct disassemble_info *info)
 
   fp_offset = addr & 0x1f;
   fp_addr = addr - fp_offset;
+  /* Read in a block of instructions.  Since there might be a
+     symbol in the middle of this block, disable stop_vma.  */
+  info->stop_vma = 0;
   status = info->read_memory_func (fp_addr, fp, 32, info);
   if (status)
     {
diff --git a/opcodes/vax-dis.c b/opcodes/vax-dis.c
index a7a1ccb..da4ba7c 100644
--- a/opcodes/vax-dis.c
+++ b/opcodes/vax-dis.c
@@ -402,7 +402,8 @@ print_insn_vax (bfd_vma memaddr, disassemble_info *info)
   argp = NULL;
   /* Check if the info buffer has more than one byte left since
      the last opcode might be a single byte with no argument data.  */
-  if (info->buffer_length - (memaddr - info->buffer_vma) > 1)
+  if (info->buffer_length - (memaddr - info->buffer_vma) > 1
+      && (info->stop_vma == 0 || memaddr < (info->stop_vma - 1)))
     {
       FETCH_DATA (info, buffer + 2);
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]