0x67, 0x00, 0x00, 0x00, /* movl $SYS_sigreturn, %eax */
0xcd, 0x80 /* int $0x80 */
};
+ size_t buflen = sizeof sigreturn;
char *name, *buf;
/* If the function has a valid symbol name, it isn't a
if (find_pc_section (pc) != NULL)
return 0;
+ /* Allocate buffer. */
+ buf = alloca (buflen);
+
/* If we can't read the instructions at START_PC, return zero. */
- buf = alloca (sizeof sigreturn);
- if (target_read_memory (start_pc + 0x14, buf, sizeof sigreturn))
+ if (!safe_frame_unwind_memory (next_frame, start_pc + 0x0a, buf, buflen))
return 0;
/* Check for sigreturn(2). */
- if (memcmp (buf, sigreturn, sizeof sigreturn) == 0)
+ if (memcmp (buf, sigreturn, buflen) == 0)
+ return 1;
+
+ /* If we can't read the instructions at START_PC, return zero. */
+ if (!safe_frame_unwind_memory (next_frame, start_pc + 0x14, buf, buflen))
+ return 0;
+
+ /* Check for sigreturn(2) (again). */
+ if (memcmp (buf, sigreturn, buflen) == 0)
return 1;
return 0;
struct regcache *regcache, int regnum,
const void *regs, size_t len)
{
- const struct gdbarch_tdep *tdep = regset->descr;
+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch);
gdb_assert (len >= tdep->sizeof_gregset + I387_SIZEOF_FSAVE);
&& sect_size >= tdep->sizeof_gregset + I387_SIZEOF_FSAVE)
{
if (tdep->gregset == NULL)
- {
- tdep->gregset = XMALLOC (struct regset);
- tdep->gregset->descr = tdep;
- tdep->gregset->supply_regset = i386obsd_aout_supply_regset;
- }
+ tdep->gregset =
+ regset_alloc (gdbarch, i386obsd_aout_supply_regset, NULL);
return tdep->gregset;
}
i386_elf_init_abi (info, gdbarch);
/* OpenBSD ELF uses SVR4-style shared libraries. */
- set_gdbarch_in_solib_call_trampoline
- (gdbarch, generic_in_solib_call_trampoline);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
}