From 1b238ed0d27d9770bc136f81f7c1928e3d3cc248 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Wed, 4 Feb 2004 21:49:58 +0000 Subject: * target.h (target_object): Add TARGET_OBJECT_WCOOKIE. * inftarg.c: Update copyright year. (child_xfer_partial): Add support for TARGET_OBJECT_WCOOKIE. * sparc-nat.c: Include "target.h" and "gdb_assert.h". (sparc_xfer_wcookie): New function. * sparc-tdep.c (sparc_fetch_wcookie): New function. * Makefile.in (sparc-nat.o): Update dependencies. * config/sparc/nm-nbsd.h: Include "target.h". (NATIVE_XFER_WCOOKIE): New define. (sparc_xfer_wcookie): New prototype. --- gdb/sparc-nat.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'gdb/sparc-nat.c') diff --git a/gdb/sparc-nat.c b/gdb/sparc-nat.c index 3ab21f0e160..477fc975b74 100644 --- a/gdb/sparc-nat.c +++ b/gdb/sparc-nat.c @@ -22,7 +22,9 @@ #include "defs.h" #include "inferior.h" #include "regcache.h" +#include "target.h" +#include "gdb_assert.h" #include #include "gdb_string.h" #include @@ -246,8 +248,40 @@ store_inferior_registers (int regnum) return; } } + +/* Fetch StackGhost Per-Process XOR cookie. */ + +LONGEST +sparc_xfer_wcookie (struct target_ops *ops, enum target_object object, + const char *annex, void *readbuf, const void *writebuf, + ULONGEST offset, LONGEST len) +{ + unsigned long wcookie = 0; + char *buf = (char *)&wcookie; + + gdb_assert (object == TARGET_OBJECT_WCOOKIE); + gdb_assert (readbuf && writebuf == NULL); + + if (offset >= sizeof (unsigned long)) + return -1; +#ifdef PT_WCOOKIE + /* If PT_WCOOKIE is defined (by ), assume we're + running on an OpenBSD release that uses StackGhost (3.1 or + later). As of release 3.4, OpenBSD doesn't use a randomized + cookie yet. */ + wcookie = 0x3; +#endif /* PT_WCOOKIE */ + + if (len > sizeof (unsigned long) - offset) + len = sizeof (unsigned long) - offset; + + memcpy (readbuf, buf + offset, len); + return len; +} + + /* Provide a prototype to silence -Wmissing-prototypes. */ void _initialize_sparc_nat (void); -- cgit v1.2.1