diff options
Diffstat (limited to 'gdb/sparc-tdep.c')
-rw-r--r-- | gdb/sparc-tdep.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index 1719109..bbe5665 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -141,13 +141,21 @@ sparc_fetch_instruction (CORE_ADDR pc) ULONGEST sparc_fetch_wcookie (void) { - /* FIXME: kettenis/20040131: We should fetch the cookie from the - target. For now, return zero, which is right for targets without - StackGhost. */ - return 0; -} + struct target_ops *ops = ¤t_target; + char buf[8]; + int len; + + len = target_read_partial (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8); + if (len == -1) + return 0; + + /* We should have either an 32-bit or an 64-bit cookie. */ + gdb_assert (len == 4 || len == 8); + return extract_unsigned_integer (buf, len); +} + /* Return the contents if register REGNUM as an address. */ static CORE_ADDR |