aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-06-19 09:52:01 +0200
committerTom de Vries <tdevries@suse.de>2024-06-19 09:52:01 +0200
commitbe23e44263d7ee05a7044fe8371c2f921d91262d (patch)
tree41bbe9a4779c6b2b344a931a6b794cab0dbb84de
parent9c39329d1c5af43fa20edc7abde465ab4c127262 (diff)
downloadfsf-binutils-gdb-be23e44263d7ee05a7044fe8371c2f921d91262d.zip
fsf-binutils-gdb-be23e44263d7ee05a7044fe8371c2f921d91262d.tar.gz
fsf-binutils-gdb-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/NEWS5
-rw-r--r--gdb/arm-linux-tdep.c29
2 files changed, 13 insertions, 21 deletions
diff --git a/gdb/NEWS b/gdb/NEWS
index bb7c4a6..47677cb 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -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