diff options
author | Mark Kettenis <kettenis@gnu.org> | 2005-08-09 19:32:59 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2005-08-09 19:32:59 +0000 |
commit | 47b4f8300a45235b718b2355b6fb4525b2bb11d1 (patch) | |
tree | 267287f0109081146f75ef1a4ca6b0190aa93ba6 | |
parent | 2f168eed4b433e38608527ec7c94c13e38acb632 (diff) | |
download | gdb-47b4f8300a45235b718b2355b6fb4525b2bb11d1.zip gdb-47b4f8300a45235b718b2355b6fb4525b2bb11d1.tar.gz gdb-47b4f8300a45235b718b2355b6fb4525b2bb11d1.tar.bz2 |
* sparc64obsd-tdep.c: Tweak comments.
(sparc64obsd_sigreturn_offset): Add offset for new OpenBSD 3.8
signal trampoline.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/sparc64obsd-tdep.c | 32 |
2 files changed, 26 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d256026..b5d805d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2005-08-09 Mark Kettenis <kettenis@gnu.org> + + * sparc64obsd-tdep.c: Tweak comments. + (sparc64obsd_sigreturn_offset): Add offset for new OpenBSD 3.8 + signal trampoline. + 2005-08-09 Andrew Cagney <cagney@gnu.org> * linux-nat.h (linux_proc_xfer_memory): Change type of "myaddr" a diff --git a/gdb/sparc64obsd-tdep.c b/gdb/sparc64obsd-tdep.c index 2d6a617..eae599c 100644 --- a/gdb/sparc64obsd-tdep.c +++ b/gdb/sparc64obsd-tdep.c @@ -68,19 +68,27 @@ sparc64obsd_supply_gregset (const struct regset *regset, /* Signal trampolines. */ -/* The OpenBSD kernel maps the signal trampoline at some random - location in user space, which means that the traditional BSD way of - detecting it won't work. - - The signal trampoline will be mapped at an address that is page - aligned. We recognize the signal trampoline by the looking for the - sigreturn system call. The offset where we can find the code that - makes this system call varies from release to release. For OpenBSD - 3.6 and later releases we can find the code at offset 0xec. For - OpenBSD 3.5 and earlier releases, we find it at offset 0xe8. */ - +/* Since OpenBSD 3.2, the sigtramp routine is mapped at a random page + in virtual memory. The randomness makes it somewhat tricky to + detect it, but fortunately we can rely on the fact that the start + of the sigtramp routine is page-aligned. We recognize the + trampoline by looking for the code that invokes the sigreturn + system call. The offset where we can find that code varies from + release to release. + + By the way, the mapping mentioned above is read-only, so you cannot + place a breakpoint in the signal trampoline. */ + +/* Default page size. */ static const int sparc64obsd_page_size = 8192; -static const int sparc64obsd_sigreturn_offset[] = { 0xec, 0xe8, -1 }; + +/* Offset for sigreturn(2). */ +static const int sparc64obsd_sigreturn_offset[] = { + 0xf0, /* OpenBSD 3.8 */ + 0xec, /* OpenBSD 3.6 */ + 0xe8, /* OpenBSD 3.2 */ + -1 +}; static int sparc64obsd_pc_in_sigtramp (CORE_ADDR pc, char *name) |