summaryrefslogtreecommitdiff
path: root/gdb/sparcnbsd-tdep.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2004-02-07 20:45:40 +0000
committerMark Kettenis <kettenis@gnu.org>2004-02-07 20:45:40 +0000
commitf3cedfac50c224b5759fdd12e192b8f106d5d2f9 (patch)
tree2a18f4e2848e4ee6dfe57fe4ef1a46964d441634 /gdb/sparcnbsd-tdep.c
parent0e43345a4534f03fc817e12aa2afe32440229e54 (diff)
downloadgdb-f3cedfac50c224b5759fdd12e192b8f106d5d2f9.tar.gz
* sparc-tdep.h (sparc_fetch_wcookie): New prototype.
* sparcnbsd-tdep.c (sparc32nbsd_sigcontext_saved_regs): Handle StackGhost.
Diffstat (limited to 'gdb/sparcnbsd-tdep.c')
-rw-r--r--gdb/sparcnbsd-tdep.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gdb/sparcnbsd-tdep.c b/gdb/sparcnbsd-tdep.c
index 7a23ff3134c..b1be7eb5b12 100644
--- a/gdb/sparcnbsd-tdep.c
+++ b/gdb/sparcnbsd-tdep.c
@@ -141,6 +141,20 @@ sparc32nbsd_sigcontext_saved_regs (struct frame_info *next_frame)
regnum <= SPARC_I7_REGNUM; regnum++, addr += 4)
saved_regs[regnum].addr = addr;
+ /* Handle StackGhost. */
+ {
+ ULONGEST wcookie = sparc_fetch_wcookie ();
+
+ if (wcookie != 0)
+ {
+ ULONGEST i7;
+
+ addr = saved_regs[SPARC_I7_REGNUM].addr;
+ i7 = get_frame_memory_unsigned (next_frame, addr, 4);
+ trad_frame_set_value (saved_regs, SPARC_I7_REGNUM, i7 ^ wcookie);
+ }
+ }
+
/* The floating-point registers are only saved if the EF bit in %prs
has been set. */