From: Mark Kettenis Date: Sat, 29 May 2004 15:09:18 +0000 (+0000) Subject: * amd64obsd-tdep.c (amd64obsd_sigtramp_p): Adjust for new X-Git-Tag: csl-arm-2004-q3~1356 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4cd28409c59439cd62643969269796adf87290d8;p=external%2Fbinutils.git * amd64obsd-tdep.c (amd64obsd_sigtramp_p): Adjust for new assembler in OpenBSD 3.5-current. (amd64obsd_sigcontext_addr): Likewise. --- diff --git a/gdb/amd64obsd-tdep.c b/gdb/amd64obsd-tdep.c index c1574cd..0c742a2 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);