From: "Maciej W. Rozycki" <macro@imgtec.com>
To: <binutils@sourceware.org>, <gdb-patches@sourceware.org>
Cc: Alan Modra <amodra@gmail.com>, Yao Qi <qiyaoltc@gmail.com>
Subject: [PATCH] GDB/opcodes: Remove arch/mach/endian disassembler assertions
Date: Tue, 01 Aug 2017 16:39:00 -0000 [thread overview]
Message-ID: <alpine.DEB.2.00.1708010044560.29991@tp.orcam.me.uk> (raw)
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.
---
Hi,
Regression-tested with GDB using the `mips-linux-gnu' target, o32 ABI,
bringing the number of failures down by ~300. Also no regressions between
plain commit 6394c606997f^ and commit 6394c606997f with this patch applied
(as long as the mem-break fix, posted separately, has been also applied).
OK to apply.
Maciej
---
gdb/arch-utils.c | 7 -------
opcodes/disassemble.c | 13 +------------
2 files changed, 1 insertion(+), 19 deletions(-)
gdb-opcode-disassemble-assert.diff
Index: binutils/gdb/arch-utils.c
===================================================================
--- binutils.orig/gdb/arch-utils.c 2017-07-31 16:21:27.410997829 +0100
+++ binutils/gdb/arch-utils.c 2017-07-31 16:22:15.571550657 +0100
@@ -971,13 +971,6 @@ default_print_insn (bfd_vma memaddr, dis
{
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);
Index: binutils/opcodes/disassemble.c
===================================================================
--- binutils.orig/opcodes/disassemble.c 2017-07-31 11:12:12.000000000 +0100
+++ binutils/opcodes/disassemble.c 2017-07-31 16:23:47.294937646 +0100
@@ -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
next reply other threads:[~2017-08-01 16:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-01 16:39 Maciej W. Rozycki [this message]
2017-08-03 11:04 ` Yao Qi
2017-08-03 11:36 ` Maciej W. Rozycki
2017-08-03 12:25 ` Maciej W. Rozycki
2017-08-04 10:49 ` Yao Qi
2017-08-07 13:24 ` Alan Modra
2017-08-07 14:56 ` Maciej W. Rozycki
2017-08-07 15:05 ` H.J. Lu
2017-08-07 15:15 ` Maciej W. Rozycki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.00.1708010044560.29991@tp.orcam.me.uk \
--to=macro@imgtec.com \
--cc=amodra@gmail.com \
--cc=binutils@sourceware.org \
--cc=gdb-patches@sourceware.org \
--cc=qiyaoltc@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox