diff options
author | Tom de Vries <tdevries@suse.de> | 2024-06-19 09:52:01 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2024-06-19 09:52:01 +0200 |
commit | be23e44263d7ee05a7044fe8371c2f921d91262d (patch) | |
tree | 41bbe9a4779c6b2b344a931a6b794cab0dbb84de | |
parent | 9c39329d1c5af43fa20edc7abde465ab4c127262 (diff) | |
download | binutils-be23e44263d7ee05a7044fe8371c2f921d91262d.zip binutils-be23e44263d7ee05a7044fe8371c2f921d91262d.tar.gz binutils-be23e44263d7ee05a7044fe8371c2f921d91262d.tar.bz2 |
[gdb/tdep] Simplify ARM_LINUX_JB_PC_EABI
In commit 1a7d840a216 ("[gdb/tdep] Fix ARM_LINUX_JB_PC_EABI"), in absense of
osabi settings for newlib and uclibc for arm, I chose a best-effort approach
using ifdefs.
Post-commit review [1] pointed out that this may be causing more problems than
it's worth.
Fix this by removing the ifdefs and simply defining ARM_LINUX_JB_PC_EABI to 1.
Rebuild on x86_64-linux with --enable-targets=all.
Fixes: 1a7d840a216 ("[gdb/tdep] Fix ARM_LINUX_JB_PC_EABI")
[1] https://sourceware.org/pipermail/gdb-patches/2024-June/209779.html
-rw-r--r-- | gdb/NEWS | 5 | ||||
-rw-r--r-- | gdb/arm-linux-tdep.c | 29 |
2 files changed, 13 insertions, 21 deletions
@@ -8,6 +8,11 @@ ** The "scopes" request will now return a scope holding global variables from the stack frame's compilation unit. +* For ARM targets, the offset of the pc in the jmp_buf has been fixed to match + glibc 2.20 and later. This should only matter when not using libc probes. + This may cause breakage when using an incompatible libc, like uclibc or + newlib, or an older glibc. + *** Changes in GDB 15 * The MPX commands "show/set mpx bound" have been deprecated, as Intel diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index b0b6f36..c8a9936 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -98,29 +98,16 @@ static const gdb_byte arm_linux_thumb2_le_breakpoint[] = { 0xf0, 0xf7, 0x00, 0xa The location of saved registers in this buffer (in particular the PC to use after longjmp is called) varies depending on the ABI (in - particular the FP model) and also (possibly) the C Library. - - For glibc, eglibc, and uclibc the following holds: If the FP model is - SoftVFP or VFP (which implies EABI) then the PC is at offset 1 or 9 in the - buffer. This is also true for the SoftFPA model. However, for the FPA - model the PC is at offset 21 in the buffer. */ + particular the FP model) and also (possibly) the C Library. */ #define ARM_LINUX_JB_ELEMENT_SIZE ARM_INT_REGISTER_SIZE +/* For the FPA model the PC is at offset 21 in the buffer. */ #define ARM_LINUX_JB_PC_FPA 21 -#ifdef __UCLIBC__ -# define ARM_LINUX_JB_PC_EABI 9 -#else -# ifdef __GLIBC__ -# if __GLIBC_PREREQ(2, 20) -/* This has been 1 since glibc 2.20, see glibc commit 80a56cc3ee ("ARM: Add - SystemTap probes to longjmp and setjmp."). */ -# define ARM_LINUX_JB_PC_EABI 1 -# else -# define ARM_LINUX_JB_PC_EABI 9 -# endif -# else -# define ARM_LINUX_JB_PC_EABI 9 -# endif -#endif +/* For glibc 2.20 and later the PC is at offset 1, see glibc commit 80a56cc3ee + ("ARM: Add SystemTap probes to longjmp and setjmp."). + For newlib and uclibc, this is not correct, we need osabi settings to deal + with those, see PR31854 and PR31856. Likewise for older versions of + glibc. */ +#define ARM_LINUX_JB_PC_EABI 1 /* Dynamic Linking on ARM GNU/Linux |