]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
gdb/arm: Remove tpidruro register from non-FreeBSD target descriptions
authorThiago Jung Bauermann <thiago.bauermann@linaro.org>
Mon, 26 Feb 2024 22:11:45 +0000 (19:11 -0300)
committerThiago Jung Bauermann <thiago.bauermann@linaro.org>
Thu, 29 Feb 2024 15:27:27 +0000 (12:27 -0300)
commitbbb12eb9c84aa2b32480b7c022c494c2469ef717
treebadfe1f699a84a833ed202a2800dbeeb3ecd4870
parent801977ce47911ecb88b7b2ffc502aafe807535b5
gdb/arm: Remove tpidruro register from non-FreeBSD target descriptions

Commit 92d48a1e4eac ("Add an arm-tls feature which includes the tpidruro
register from CP15.") introduced the org.gnu.gdb.arm.tls feature, which
adds the tpidruro register, and unconditionally enabled it in
aarch32_create_target_description.

In Linux, the tpidruro register isn't available via ptrace in the 32-bit
kernel but it is available for an aarch32 program running under an arm64
kernel via the ptrace compat interface.  This isn't currently implemented
however, which causes GDB on arm-linux with 64-bit kernel to list the
register but show it as unavailable, as reported by Tom de Vries:

  $ gdb -q -batch a.out -ex start -ex 'p $tpidruro'
  Temporary breakpoint 1 at 0x512

  Temporary breakpoint 1, 0xaaaaa512 in main ()
  $1 = <unavailable>

Simon Marchi then clarified:

> The only time we should be seeing some "unavailable" registers or memory
> is in the context of tracepoints, for things that are not collected.
> Seeing an unavailable register here is a sign that something is not
> right.

Therefore, disable the TLS feature in aarch32 target descriptions for Linux
and NetBSD targets (the latter also doesn't seem to support accessing
tpidruro either, based on a quick look at arm-netbsd-nat.c).

This patch fixes the following tests:

Running gdb.base/inline-frame-cycle-unwind.exp ...
FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 3: backtrace when the unwind is broken at frame 3
FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 5: backtrace when the unwind is broken at frame 5
FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 1: backtrace when the unwind is broken at frame 1

Tested with Ubuntu 22.04.3 on armv8l-linux-gnueabihf in native,
native-gdbserver and native-extended-gdbserver targets with no regressions.

PR tdep/31418
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31418

Approved-By: John Baldwin <jhb@FreeBSD.org>
gdb/aarch32-tdep.c
gdb/aarch32-tdep.h
gdb/aarch64-linux-nat.c
gdb/arch/aarch32.c
gdb/arch/aarch32.h
gdb/arm-fbsd-tdep.c
gdb/arm-linux-nat.c
gdb/arm-linux-tdep.c
gdb/arm-netbsd-nat.c
gdbserver/linux-aarch32-tdesc.cc