* amd64obsd-tdep.c (amd64obsd_sigtramp_p): Detect new signal
trampoline to be introduced in OpenBSD 5.0.
This commit is contained in:
parent
3e290cb1d1
commit
0dcddd8422
|
@ -1,3 +1,8 @@
|
||||||
|
2011-12-17 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
|
* amd64obsd-tdep.c (amd64obsd_sigtramp_p): Detect new signal
|
||||||
|
trampoline to be introduced in OpenBSD 5.0.
|
||||||
|
|
||||||
2011-12-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2011-12-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
Fix build regression from the PR threads/10729 fix.
|
Fix build regression from the PR threads/10729 fix.
|
||||||
|
|
|
@ -88,12 +88,18 @@ amd64obsd_sigtramp_p (struct frame_info *this_frame)
|
||||||
{
|
{
|
||||||
CORE_ADDR pc = get_frame_pc (this_frame);
|
CORE_ADDR pc = get_frame_pc (this_frame);
|
||||||
CORE_ADDR start_pc = (pc & ~(amd64obsd_page_size - 1));
|
CORE_ADDR start_pc = (pc & ~(amd64obsd_page_size - 1));
|
||||||
const gdb_byte sigreturn[] =
|
const gdb_byte osigreturn[] =
|
||||||
{
|
{
|
||||||
0x48, 0xc7, 0xc0,
|
0x48, 0xc7, 0xc0,
|
||||||
0x67, 0x00, 0x00, 0x00, /* movq $SYS_sigreturn, %rax */
|
0x67, 0x00, 0x00, 0x00, /* movq $SYS_sigreturn, %rax */
|
||||||
0xcd, 0x80 /* int $0x80 */
|
0xcd, 0x80 /* int $0x80 */
|
||||||
};
|
};
|
||||||
|
const gdb_byte sigreturn[] =
|
||||||
|
{
|
||||||
|
0x48, 0xc7, 0xc0,
|
||||||
|
0x67, 0x00, 0x00, 0x00, /* movq $SYS_sigreturn, %rax */
|
||||||
|
0x0f, 0x05 /* syscall */
|
||||||
|
};
|
||||||
size_t buflen = (sizeof sigreturn) + 1;
|
size_t buflen = (sizeof sigreturn) + 1;
|
||||||
gdb_byte *buf;
|
gdb_byte *buf;
|
||||||
char *name;
|
char *name;
|
||||||
|
@ -116,9 +122,12 @@ amd64obsd_sigtramp_p (struct frame_info *this_frame)
|
||||||
|
|
||||||
/* Check for sigreturn(2). Depending on how the assembler encoded
|
/* Check for sigreturn(2). Depending on how the assembler encoded
|
||||||
the `movq %rsp, %rdi' instruction, the code starts at offset 6 or
|
the `movq %rsp, %rdi' instruction, the code starts at offset 6 or
|
||||||
7. */
|
7. OpenBSD 5.0 and later use the `syscall' instruction. Older
|
||||||
|
versions use `int $0x80'. Check for both. */
|
||||||
if (memcmp (buf, sigreturn, sizeof sigreturn)
|
if (memcmp (buf, sigreturn, sizeof sigreturn)
|
||||||
&& memcpy (buf + 1, sigreturn, sizeof sigreturn))
|
&& memcmp (buf + 1, sigreturn, sizeof sigreturn)
|
||||||
|
&& memcmp (buf, osigreturn, sizeof osigreturn)
|
||||||
|
&& memcmp (buf + 1, osigreturn, sizeof osigreturn))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue