Go to file
Andrew Burgess 1527fe5f58 gdb: fix disassembler regressions for 32-bit arm
After this commit:

  commit 76b43c9b5c
  Date:   Tue Oct 5 15:10:12 2021 +0100

      gdb: improve error reporting from the disassembler

We started seeing FAILs in the gdb.base/all-architectures*.exp tests,
when running on a 32-bit ARM target, though I suspect running on any
target that compiles such that bfd_vma is 32-bits would also trigger
the failures.

The problem is that the test is expected GDB's disassembler to print
an error like this:

  Cannot access memory at address 0x0

However, after the above commit we see an error like:

  unknown disassembler error (error = -1)

The reason for this is this code in opcodes/i386-dis.c (in the
print_insn function):

  if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
    {
      (*info->fprintf_func) (info->stream,
                             _("64-bit address is disabled"));
      return -1;
    }

This code effectively disallows us from ever disassembling 64-bit x86
code if we compiled GDB with a 32-bit bfd_vma.  Notice we return
-1 (indicating a failure to disassemble), but never call the
memory_error_func callback.

Prior to the above commit GDB, when it received the -1 return value
would assume that a memory error had occurred and just print whatever
value happened to be in the memory error address variable, the default
value of 0 just happened to be fine because the test had asked GDB to
do this 'disassemble 0x0,+4'.

If we instead change the test to do 'disassemble 0x100,+4' then GDB
would (previously) have still reported:

  Cannot access memory at address 0x0

which makes far less sense.

In this commit I propose to fix this issue by changing the test to
accept either the "Cannot access memory ..." string, or the newer
"unknown disassembler error ..." string.  With this change done the
test now passes.

However, there is one weakness with this strategy; if GDB broke such
that we _always_ reported "unknown disassembler error ..." we would
never notice.  This clearly would be bad.  To avoid this issue I have
adjusted the all-architectures*.exp tests so that, when we disassemble
for the default architecture (the one selected by "auto") we _only_
expect to get the "Cannot access memory ..." error string.

[ Note: In an ideal world we should be able to disassemble any
  architecture at all times.  There's no reason why the 64-bit x86
  disassembler requires a 64-bit bfd_vma, other than the code happens
  to be written that way.  We could rewrite the disassemble to not
  have this requirement, but, I don't plan to do that any time soon. ]

Further, I have changed the all-architectures*.exp test so that we now
disassemble at address 0x100, this should avoid us being able to pass
by printing a default address of 0x0.  I did originally change the
address we disassembled at to 0x4, however, some architectures,
e.g. ia64, have a default instruction alignment that is greater than
4, so would still round down to 0x0.  I could have just picked 0x8 as
an address, but I figured that 0x100 was likely to satisfy most
architectures alignment requirements.
2021-11-30 12:20:09 +00:00
bfd bfd: enable silent build rules 2021-11-29 20:26:26 -05:00
binutils binutils: merge doc subdir up a level 2021-11-29 20:26:26 -05:00
config Deprecate a.out support for NetBSD targets. 2021-08-11 13:17:54 +01:00
contrib
cpu Re: opcodes: constify & local meps macros 2021-07-05 21:40:49 +09:30
elfcpp arm: add armv9-a architecture to -march 2021-11-01 10:51:03 +00:00
etc etc: switch to automake 2021-09-09 23:30:12 -04:00
gas RISC-V: The vtype immediate with more than the defined 8 bits are preserved. 2021-11-30 19:03:48 +08:00
gdb gdb: fix disassembler regressions for 32-bit arm 2021-11-30 12:20:09 +00:00
gdbserver gdb: pass more const target_waitstatus by reference 2021-11-22 13:57:54 -05:00
gdbsupport gdb: introduce target_waitkind_str, use it in target_waitstatus::to_string 2021-11-22 13:57:49 -05:00
gnulib gnulib: import various network functions 2021-09-08 17:48:09 -04:00
gold Update bug reporting address 2021-11-23 15:39:26 +10:30
gprof gprof: enable silent build rules 2021-11-29 20:28:29 -05:00
include RISC-V: The vtype immediate with more than the defined 8 bits are preserved. 2021-11-30 19:03:48 +08:00
intl Regenerate a couple of files 2021-11-15 12:20:12 +10:30
ld ld: enable silent build rules 2021-11-29 20:28:29 -05:00
libbacktrace sync libbacktrace from gcc 2021-11-14 18:07:50 +10:30
libctf libctf: enable silent build rules 2021-11-29 20:28:29 -05:00
libdecnumber
libiberty Deprecate a.out support for NetBSD targets. 2021-08-11 13:17:54 +01:00
opcodes RISC-V: The vtype immediate with more than the defined 8 bits are preserved. 2021-11-30 19:03:48 +08:00
readline Update config.sub and config.guess for MIPS R3 and R5 ISA support 2021-05-24 18:11:49 +02:00
sim sim: testsuite: drop most specific istarget checks 2021-11-28 21:55:16 -05:00
texinfo
zlib zlib: enable silent build rules 2021-11-29 20:28:29 -05:00
.cvsignore
.gitattributes
.gitignore
ar-lib
ChangeLog Document "memory-tag-violations". 2021-10-29 13:31:37 +03:00
compile
config-ml.in
config.guess Update config.sub and config.guess for MIPS R3 and R5 ISA support 2021-05-24 18:11:49 +02:00
config.rpath
config.sub Update config.sub and config.guess for MIPS R3 and R5 ISA support 2021-05-24 18:11:49 +02:00
configure top-level configure: setup target_configdirs based on repository 2021-09-28 12:21:21 +01:00
configure.ac top-level configure: setup target_configdirs based on repository 2021-09-28 12:21:21 +01:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4 libtool.m4: fix nm BSD flag detection 2021-09-27 20:31:23 +01:00
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS MAINTAINERS: Update path to readline config.{sub,guess} files 2021-05-24 18:11:49 +02:00
Makefile.def Import Makefile.def from gcc 2021-11-12 19:02:12 +10:30
Makefile.in Sync Makefile.tpl with GCC 2021-11-13 09:04:03 -08:00
Makefile.tpl Sync Makefile.tpl with GCC 2021-11-13 09:04:03 -08:00
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
README-maintainer-mode
setup.com
src-release.sh src-release.sh: add libbacktrace to GDB_SUPPORT_DIRS 2021-09-28 12:21:21 +01:00
symlink-tree
test-driver
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.