[gdb/tdep] Simplify ARM_LINUX_JB_PC_EABI

In commit 1a7d840a21 ("[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: 1a7d840a21 ("[gdb/tdep] Fix ARM_LINUX_JB_PC_EABI")

[1] https://sourceware.org/pipermail/gdb-patches/2024-June/209779.html
This commit is contained in:
Tom de Vries 2024-06-19 09:52:01 +02:00
parent 9c39329d1c
commit be23e44263
2 changed files with 13 additions and 21 deletions

View file

@ -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

View file

@ -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