From 4cd28409c59439cd62643969269796adf87290d8 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sat, 29 May 2004 15:09:18 +0000 Subject: [PATCH] * amd64obsd-tdep.c (amd64obsd_sigtramp_p): Adjust for new assembler in OpenBSD 3.5-current. (amd64obsd_sigcontext_addr): Likewise. --- gdb/amd64obsd-tdep.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gdb/amd64obsd-tdep.c b/gdb/amd64obsd-tdep.c index c1574cd9f4a..0c742a26ecc 100644 --- a/gdb/amd64obsd-tdep.c +++ b/gdb/amd64obsd-tdep.c @@ -104,12 +104,15 @@ amd64obsd_sigtramp_p (struct frame_info *next_frame) return 0; /* If we can't read the instructions at START_PC, return zero. */ - buf = alloca (sizeof sigreturn); - if (target_read_memory (start_pc + 7, buf, sizeof sigreturn)) + buf = alloca ((sizeof sigreturn) + 1); + if (target_read_memory (start_pc + 6, buf, (sizeof sigreturn) + 1)) return 0; - /* Check for sigreturn(2). */ - if (memcmp (buf, sigreturn, sizeof sigreturn)) + /* Check for sigreturn(2). Depending on how the assembler encoded + the `movq %rsp, %rdi' instruction, the code starts at offset 6 or + 7. */ + if (memcmp (buf, sigreturn, sizeof sigreturn) + && memcpy (buf + 1, sigreturn, sizeof sigreturn)) return 0; return 1; @@ -136,7 +139,7 @@ amd64obsd_sigcontext_addr (struct frame_info *next_frame) (see /usr/src/sys/arch/amd64/amd64/locore.S). The `pushq' instruction clobbers %rsp, but its value is saved in `%rdi'. */ - if (offset > 6) + if (offset > 5) return frame_unwind_register_unsigned (next_frame, AMD64_RDI_REGNUM); else return frame_unwind_register_unsigned (next_frame, AMD64_RSP_REGNUM); -- 2.30.2