From 2a451106e278d23b1ef4a208c270947b0451f7d0 Mon Sep 17 00:00:00 2001 From: Kevin Buettner Date: Wed, 6 Sep 2000 00:39:11 +0000 Subject: Add support for backtracing through signal handlers on Linux/ARM. Also, make prologue scanning code somewhat less naive about optimized code on GNU/Linux/ARM. --- gdb/config/arm/tm-linux.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'gdb/config/arm') diff --git a/gdb/config/arm/tm-linux.h b/gdb/config/arm/tm-linux.h index 9dcd666..8f18e00 100644 --- a/gdb/config/arm/tm-linux.h +++ b/gdb/config/arm/tm-linux.h @@ -135,4 +135,26 @@ extern CORE_ADDR in_svr4_dynsym_resolve_code (CORE_ADDR pc, char *name); #define IN_SOLIB_DYNSYM_RESOLVE_CODE in_svr4_dynsym_resolve_code */ #endif +/* When the ARM Linux kernel invokes a signal handler, the return + address points at a special instruction which'll trap back into + the kernel. These definitions are used to identify this bit of + code as a signal trampoline in order to support backtracing + through calls to signal handlers. */ + +int arm_linux_in_sigtramp (CORE_ADDR pc, char *name); +#define IN_SIGTRAMP(pc, name) arm_linux_in_sigtramp (pc, name) + +/* Each OS has different mechanisms for accessing the various + registers stored in the sigcontext structure. These definitions + provide a mechanism by which the generic code in arm-tdep.c can + find the addresses at which various registers are saved at in the + sigcontext structure. If SIGCONTEXT_REGISTER_ADDRESS is not + defined, arm-tdep.c will define it to be 0. (See ia64-tdep.c and + ia64-linux-tdep.c to see what a similar mechanism looks like when + multi-arched.) */ + +extern CORE_ADDR arm_linux_sigcontext_register_address (CORE_ADDR, CORE_ADDR, + int); +#define SIGCONTEXT_REGISTER_ADDRESS arm_linux_sigcontext_register_address + #endif /* TM_ARMLINUX_H */ -- cgit v1.1