summaryrefslogtreecommitdiff
path: root/gdb/i386-nto-tdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/i386-nto-tdep.c')
-rw-r--r--gdb/i386-nto-tdep.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/gdb/i386-nto-tdep.c b/gdb/i386-nto-tdep.c
index b35dd2a13b7..381119f7033 100644
--- a/gdb/i386-nto-tdep.c
+++ b/gdb/i386-nto-tdep.c
@@ -231,14 +231,20 @@ i386nto_pc_in_sigtramp (CORE_ADDR pc, char *name)
return name && strcmp ("__signalstub", name) == 0;
}
-#define SIGCONTEXT_OFFSET 136
+#define I386_NTO_SIGCONTEXT_OFFSET 136
+
+/* Assuming NEXT_FRAME is a frame following a QNX Neutrino sigtramp
+ routine, return the address of the associated sigcontext structure. */
+
static CORE_ADDR
-i386nto_sigcontext_addr (struct frame_info *frame)
+i386nto_sigcontext_addr (struct frame_info *next_frame)
{
- if (get_next_frame (frame))
- return get_frame_base (get_next_frame (frame)) + SIGCONTEXT_OFFSET;
+ char buf[4];
+
+ frame_unwind_register (next_frame, SP_REGNUM, buf);
+ sp = extract_unsigned_integer (buf, 4);
- return read_register (SP_REGNUM) + SIGCONTEXT_OFFSET;
+ return sp + I386_NTO_SIGCONTEXT_OFFSET;
}
static void