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] GDB/opcodes: Remove arch/mach/endian disassembler assertions


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

commit e347efc38b8b1eb6561248875c4bb2f9b074894b
Author: Maciej W. Rozycki <macro@imgtec.com>
Date:   Mon Aug 7 15:53:54 2017 +0100

    GDB/opcodes: Remove arch/mach/endian disassembler assertions
    
    Fix `set architecture' and `set endian' command disassembly regressions
    from commit 39503f82427e ("Delegate opcodes to select disassembler in
    GDB"), and commit 003ca0fd2286 ("Refactor disassembler selection"), as
    well as a MIPS compressed ISA disassembly target regression from commit
    6394c606997f ("Don't use print_insn_XXX in GDB"), which caused assertion
    failures to trigger.
    
    For example with the `mips-linux-gnu' target we get:
    
    $ cat main.c
    int
    main (void)
    {
      return 0;
    }
    $ gcc -mips32r2 -O2 main.c -o main
    $ gcc -mips16 -mips32r2 -O2 main.c -o main16
    $ gdb
    GNU gdb (GDB) 8.0.50.20170731-git
    [...]
    (gdb) file main
    Reading symbols from main...done.
    (gdb) show architecture
    The target architecture is set automatically (currently mips:isa32r2)
    (gdb) show endian
    The target endianness is set automatically (currently big endian)
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400500 <+0>:	jr	ra
       0x00400504 <+4>:	move	v0,zero
    End of assembler dump.
    (gdb) set architecture mips:isa64r2
    The target architecture is assumed to be mips:isa64r2
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400500 <+0>:
    .../gdb/arch-utils.c:979: internal-error: int default_print_insn(bfd_vma, disassemble_info*): Assertion `info->mach == bfd_get_mach (exec_bfd)' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n) n
    [...]
    Command aborted.
    (gdb) set architecture auto
    The target architecture is set automatically (currently mips:isa32r2)
    (gdb) set endian little
    The target is assumed to be little endian
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400500 <+0>:
    .../gdb/arch-utils.c:978: internal-error: int default_print_insn(bfd_vma, disassemble_info*): Assertion `info->endian == (bfd_big_endian (exec_bfd) ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE)' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n) n
    [...]
    Command aborted.
    (gdb) set endian auto
    The target endianness is set automatically (currently big endian)
    (gdb) set architecture i386
    The target architecture is assumed to be i386
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400500 <+0>:
    .../gdb/arch-utils.c:976: internal-error: int default_print_insn(bfd_vma, disassemble_info*): Assertion `info->arch == bfd_get_arch (exec_bfd)' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n) n
    [...]
    Command aborted.
    (gdb) set architecture auto
    The target architecture is set automatically (currently mips:isa32r2)
    (gdb) file main16
    Load new symbol table from "main16"? (y or n) y
    Reading symbols from main16...done.
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400501 <+0>:
    .../gdb/arch-utils.c:979: internal-error: int default_print_insn(bfd_vma, disassemble_info*): Assertion `info->mach == bfd_get_mach (exec_bfd)' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n) n
    Command aborted.
    (gdb)
    
    Remove the assertions then, restoring previous semantics:
    
    (gdb) file main
    Reading symbols from main...done.
    (gdb) set architecture mips:isa64r2
    The target architecture is assumed to be mips:isa64r2
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400500 <+0>:	jr	ra
       0x00400504 <+4>:	move	v0,zero
    End of assembler dump.
    (gdb) set endian little
    The target is assumed to be little endian
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400500 <+0>:	j	0x3800c
       0x00400504 <+4>:	addiu	s0,t0,0
    End of assembler dump.
    (gdb) set architecture i386
    The target architecture is assumed to be i386
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400500 <+0>:	add    %eax,%esp
       0x00400502 <+2>:	add    %cl,(%eax)
       0x00400504 <+4>:	add    %al,(%eax)
       0x00400506 <+6>:	adc    %ah,0x0
    End of assembler dump.
    (gdb) set architecture auto
    The target architecture is set automatically (currently mips:isa32r2)
    (gdb) set endian auto
    The target endianness is set automatically (currently big endian)
    (gdb) file main16
    Load new symbol table from "main16"? (y or n) y
    Reading symbols from main16...done.
    (gdb) disassemble main
    Dump of assembler code for function main:
       0x00400501 <+0>:	jr	ra
       0x00400503 <+2>:	li	v0,0
    End of assembler dump.
    (gdb)
    
    	gdb/
    	* arch-utils.c (default_print_insn): Remove arch/mach/endian
    	assertions.
    
    	opcodes/
    	* disassemble.c (disassembler): Remove arch/mach/endian
    	assertions.

Diff:
---
 gdb/ChangeLog         |  5 +++++
 gdb/arch-utils.c      |  7 -------
 opcodes/ChangeLog     |  5 +++++
 opcodes/disassemble.c | 13 +------------
 4 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 818f438..d550938 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
 2017-08-07  Maciej W. Rozycki  <macro@imgtec.com>
 
+	* arch-utils.c (default_print_insn): Remove arch/mach/endian
+	assertions.
+
+2017-08-07  Maciej W. Rozycki  <macro@imgtec.com>
+
 	* gdbarch.sh (gdbarch_info): Replace the `tdep_info' member with
 	a union of `tdep_info', `tdesc_data' and `id'.
 	* aarch64-tdep.c (aarch64_gdbarch_init): Use `info.tdesc_data'
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 0402eba..4e0fdf4 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -971,13 +971,6 @@ default_print_insn (bfd_vma memaddr, disassemble_info *info)
 {
   disassembler_ftype disassemble_fn;
 
-  if (exec_bfd != NULL)
-    {
-      gdb_assert (info->arch == bfd_get_arch (exec_bfd));
-      gdb_assert (info->endian == (bfd_big_endian (exec_bfd)
-				   ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE));
-      gdb_assert (info->mach == bfd_get_mach (exec_bfd));
-    }
   disassemble_fn = disassembler (info->arch, info->endian == BFD_ENDIAN_BIG,
 				 info->mach, exec_bfd);
 
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 59ff038..61572dd 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-07  Maciej W. Rozycki  <macro@imgtec.com>
+
+	* disassemble.c (disassembler): Remove arch/mach/endian
+	assertions.
+
 2017-07-25  Nick Clifton  <nickc@redhat.com>
 
 	PR 21739
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index cd134e8..0058354 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -111,21 +111,10 @@
 
 disassembler_ftype
 disassembler (enum bfd_architecture a, bfd_boolean big, unsigned long mach,
-	      bfd *abfd)
+	      bfd *abfd ATTRIBUTE_UNUSED)
 {
   disassembler_ftype disassemble;
 
-  if (abfd != NULL)
-    {
-      /* Do some asserts that the first three parameters should equal
-	 to what we can get from ABFD.  On the other hand, these
-	 asserts help removing some compiler errors on unused
-	 parameter.  */
-      assert (a == bfd_get_arch (abfd));
-      assert (big == bfd_big_endian (abfd));
-      assert (mach == bfd_get_mach (abfd));
-    }
-
   switch (a)
     {
       /* If you add a case to this table, also add it to the


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