gdb/arm-linux-tdep.c: Handle Thumb2 signal trampolines
Recent versions of glibc have assembled the signal trampoline code as Thumb2, which causes gdb to misinterpret them and a number of testsuite tests to fail. Educate gdb about these trampolines and get the tests running again. gdb/ChangeLog: 2014-07-28 Will Newton <will.newton@linaro.org> * arm-linux-tdep.c (THUMB2_SET_R7_SIGRETURN1): New define. (THUMB2_SET_R7_SIGRETURN2): Likewise. (THUMB2_SET_R7_RT_SIGRETURN1): Likewise. (THUMB2_SET_R7_RT_SIGRETURN2): Likewise. (THUMB2_EABI_SYSCALL): Likewise. (thumb2_eabi_linux_sigreturn_tramp_frame): Create new struct tramp_frame. (thumb2_eabi_linux_rt_sigreturn_tramp_frame): Likewise. (arm_linux_init_abi): Add Thumb2 tramp frame unwinders.
This commit is contained in:
parent
fdb1adc685
commit
f347ffc90a
|
@ -1,3 +1,15 @@
|
|||
2014-07-28 Will Newton <will.newton@linaro.org>
|
||||
|
||||
* arm-linux-tdep.c (THUMB2_SET_R7_SIGRETURN1): New define.
|
||||
(THUMB2_SET_R7_SIGRETURN2): Likewise.
|
||||
(THUMB2_SET_R7_RT_SIGRETURN1): Likewise.
|
||||
(THUMB2_SET_R7_RT_SIGRETURN2): Likewise.
|
||||
(THUMB2_EABI_SYSCALL): Likewise.
|
||||
(thumb2_eabi_linux_sigreturn_tramp_frame): Create new
|
||||
struct tramp_frame.
|
||||
(thumb2_eabi_linux_rt_sigreturn_tramp_frame): Likewise.
|
||||
(arm_linux_init_abi): Add Thumb2 tramp frame unwinders.
|
||||
|
||||
2014-07-27 Doug Evans <xdje42@gmail.com>
|
||||
|
||||
* guile/scm-param.c (pascm_print_param_smob): Fix output.
|
||||
|
|
|
@ -246,6 +246,13 @@ static const gdb_byte arm_linux_thumb2_le_breakpoint[] = { 0xf0, 0xf7, 0x00, 0xa
|
|||
#define ARM_SET_R7_RT_SIGRETURN 0xe3a070ad
|
||||
#define ARM_EABI_SYSCALL 0xef000000
|
||||
|
||||
/* Equivalent patterns for Thumb2. */
|
||||
#define THUMB2_SET_R7_SIGRETURN1 0xf04f
|
||||
#define THUMB2_SET_R7_SIGRETURN2 0x0777
|
||||
#define THUMB2_SET_R7_RT_SIGRETURN1 0xf04f
|
||||
#define THUMB2_SET_R7_RT_SIGRETURN2 0x07ad
|
||||
#define THUMB2_EABI_SYSCALL 0xdf00
|
||||
|
||||
/* OABI syscall restart trampoline, used for EABI executables too
|
||||
whenever OABI support has been enabled in the kernel. */
|
||||
#define ARM_OABI_SYSCALL_RESTART_SYSCALL 0xef900000
|
||||
|
@ -444,6 +451,30 @@ static struct tramp_frame arm_eabi_linux_rt_sigreturn_tramp_frame = {
|
|||
arm_linux_rt_sigreturn_init
|
||||
};
|
||||
|
||||
static struct tramp_frame thumb2_eabi_linux_sigreturn_tramp_frame = {
|
||||
SIGTRAMP_FRAME,
|
||||
2,
|
||||
{
|
||||
{ THUMB2_SET_R7_SIGRETURN1, -1 },
|
||||
{ THUMB2_SET_R7_SIGRETURN2, -1 },
|
||||
{ THUMB2_EABI_SYSCALL, -1 },
|
||||
{ TRAMP_SENTINEL_INSN }
|
||||
},
|
||||
arm_linux_sigreturn_init
|
||||
};
|
||||
|
||||
static struct tramp_frame thumb2_eabi_linux_rt_sigreturn_tramp_frame = {
|
||||
SIGTRAMP_FRAME,
|
||||
2,
|
||||
{
|
||||
{ THUMB2_SET_R7_RT_SIGRETURN1, -1 },
|
||||
{ THUMB2_SET_R7_RT_SIGRETURN2, -1 },
|
||||
{ THUMB2_EABI_SYSCALL, -1 },
|
||||
{ TRAMP_SENTINEL_INSN }
|
||||
},
|
||||
arm_linux_rt_sigreturn_init
|
||||
};
|
||||
|
||||
static struct tramp_frame arm_linux_restart_syscall_tramp_frame = {
|
||||
NORMAL_FRAME,
|
||||
4,
|
||||
|
@ -1415,6 +1446,10 @@ arm_linux_init_abi (struct gdbarch_info info,
|
|||
&arm_eabi_linux_sigreturn_tramp_frame);
|
||||
tramp_frame_prepend_unwinder (gdbarch,
|
||||
&arm_eabi_linux_rt_sigreturn_tramp_frame);
|
||||
tramp_frame_prepend_unwinder (gdbarch,
|
||||
&thumb2_eabi_linux_sigreturn_tramp_frame);
|
||||
tramp_frame_prepend_unwinder (gdbarch,
|
||||
&thumb2_eabi_linux_rt_sigreturn_tramp_frame);
|
||||
tramp_frame_prepend_unwinder (gdbarch,
|
||||
&arm_linux_restart_syscall_tramp_frame);
|
||||
tramp_frame_prepend_unwinder (gdbarch,
|
||||
|
|
Loading…
Reference in New Issue