static void amd64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); amd64_init_abi (info, gdbarch); obsd_init_abi (info, gdbarch); /* Initialize general-purpose register set details. */ tdep->gregset_reg_offset = amd64obsd_r_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64obsd_r_reg_offset); tdep->sizeof_gregset = 24 * 8; tdep->jb_pc_offset = 7 * 8; tdep->sigtramp_p = amd64obsd_sigtramp_p; tdep->sigcontext_addr = amd64obsd_sigcontext_addr; tdep->sc_reg_offset = amd64obsd_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (amd64obsd_sc_reg_offset); /* OpenBSD provides a user-level threads implementation. */ bsd_uthread_set_supply_uthread (gdbarch, amd64obsd_supply_uthread); bsd_uthread_set_collect_uthread (gdbarch, amd64obsd_collect_uthread); /* OpenBSD uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); /* Unwind kernel trap frames correctly. */ frame_unwind_prepend_unwinder (gdbarch, &amd64obsd_trapframe_unwind); }
static void sparc64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset = &sparc64obsd_gregset; tdep->sizeof_gregset = 288; tdep->fpregset = &sparc64obsd_fpregset; tdep->sizeof_fpregset = 272; /* Make sure we can single-step "new" syscalls. */ tdep->step_trap = sparcnbsd_step_trap; frame_unwind_append_unwinder (gdbarch, &sparc64obsd_frame_unwind); frame_unwind_append_unwinder (gdbarch, &sparc64obsd_trapframe_unwind); sparc64_init_abi (info, gdbarch); obsd_init_abi (info, gdbarch); /* OpenBSD/sparc64 has SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); set_gdbarch_skip_solib_resolver (gdbarch, obsd_skip_solib_resolver); /* OpenBSD provides a user-level threads implementation. */ bsd_uthread_set_supply_uthread (gdbarch, sparc64obsd_supply_uthread); bsd_uthread_set_collect_uthread (gdbarch, sparc64obsd_collect_uthread); }
static void i386obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* Obviously OpenBSD is BSD-based. */ i386bsd_init_abi (info, gdbarch); obsd_init_abi (info, gdbarch); /* OpenBSD has a different `struct reg'. */ tdep->gregset_reg_offset = i386obsd_r_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (i386obsd_r_reg_offset); tdep->sizeof_gregset = 16 * 4; /* OpenBSD uses -freg-struct-return by default. */ tdep->struct_return = reg_struct_return; /* OpenBSD uses a different memory layout. */ tdep->sigtramp_start = i386obsd_sigtramp_start_addr; tdep->sigtramp_end = i386obsd_sigtramp_end_addr; tdep->sigtramp_p = i386obsd_sigtramp_p; /* OpenBSD has a `struct sigcontext' that's different from the original 4.3 BSD. */ tdep->sc_reg_offset = i386obsd_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (i386obsd_sc_reg_offset); /* OpenBSD provides a user-level threads implementation. */ bsd_uthread_set_supply_uthread (gdbarch, i386obsd_supply_uthread); bsd_uthread_set_collect_uthread (gdbarch, i386obsd_collect_uthread); /* Unwind kernel trap frames correctly. */ frame_unwind_prepend_unwinder (gdbarch, &i386obsd_trapframe_unwind); }
static void mips64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { /* OpenBSD/mips64 only supports the n64 ABI, but the braindamaged way GDB works, forces us to pretend we can handle them all. */ set_gdbarch_iterate_over_regset_sections (gdbarch, mips64obsd_iterate_over_regset_sections); tramp_frame_prepend_unwinder (gdbarch, &mips64obsd_sigframe); set_gdbarch_long_double_bit (gdbarch, 128); set_gdbarch_long_double_format (gdbarch, floatformats_mips64_quad); obsd_init_abi(info, gdbarch); /* OpenBSD/mips64 has SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); }