/* Target-dependent code for OpenBSD/amd64.
- Copyright (C) 2003-2020 Free Software Foundation, Inc.
+ Copyright (C) 2003-2022 Free Software Foundation, Inc.
This file is part of GDB.
/* If we can't read the instructions at START_PC, return zero. */
buf = (gdb_byte *) alloca ((sizeof sigreturn) + 1);
- if (!safe_frame_unwind_memory (this_frame, start_pc + 6, buf, buflen))
+ if (!safe_frame_unwind_memory (this_frame, start_pc + 6, {buf, buflen}))
return 0;
/* Check for sigreturn(2). Depending on how the assembler encoded
/* The %rsp register points at `struct sigcontext' upon entry of a
signal trampoline. The relevant part of the trampoline is
- call *%rax
- movq %rsp, %rdi
- pushq %rdi
- movq $SYS_sigreturn,%rax
- int $0x80
+ call *%rax
+ movq %rsp, %rdi
+ pushq %rdi
+ movq $SYS_sigreturn,%rax
+ int $0x80
(see /usr/src/sys/arch/amd64/amd64/locore.S). The `pushq'
instruction clobbers %rsp, but its value is saved in `%rdi'. */
sp = read_memory_unsigned_integer (sp_addr, 8, byte_order);
/* Adjust the stack pointer such that it looks as if we just
- returned from _thread_machdep_switch. */
+ returned from _thread_machdep_switch. */
offset = amd64obsd_uthread_reg_offset[AMD64_RIP_REGNUM] + 8;
store_unsigned_integer (buf, 8, byte_order, sp + offset);
regcache->raw_supply (AMD64_RSP_REGNUM, buf);
&& (regnum == -1 || regnum == i))
{
/* Fetch stack pointer from thread structure (if we didn't
- do so already). */
+ do so already). */
if (sp == 0)
sp = read_memory_unsigned_integer (sp_addr, 8, byte_order);
int offset;
/* Calculate the stack pointer (frame pointer) that will be
- stored into the thread structure. */
+ stored into the thread structure. */
offset = amd64obsd_uthread_reg_offset[AMD64_RIP_REGNUM] + 8;
regcache->raw_collect (AMD64_RSP_REGNUM, buf);
sp = extract_unsigned_integer (buf, 8, byte_order) - offset;
write_memory_unsigned_integer (sp_addr, 8, byte_order, sp);
/* The stack pointer was (potentially) modified. Make sure we
- build a proper stack frame. */
+ build a proper stack frame. */
regnum = -1;
}
&& (regnum == -1 || regnum == i))
{
/* Fetch stack pointer from thread structure (if we didn't
- calculate it already). */
+ calculate it already). */
if (sp == 0)
sp = read_memory_unsigned_integer (sp_addr, 8, byte_order);
|| (startswith (name, "Xintr"))));
}
-static const struct frame_unwind amd64obsd_trapframe_unwind = {
+static const struct frame_unwind amd64obsd_trapframe_unwind =
+{
/* FIXME: kettenis/20051219: This really is more like an interrupt
frame, but SIGTRAMP_FRAME would print <signal handler called>,
which really is not what we want here. */
+ "amd64 openbsd trap",
NORMAL_FRAME,
default_frame_unwind_stop_reason,
amd64obsd_trapframe_this_id,
static void
amd64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
- struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
amd64_init_abi (info, gdbarch,
amd64_target_description (X86_XSTATE_SSE_MASK, true));