static void amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset); tdep->sizeof_gregset = 27 * 8; amd64_init_abi (info, gdbarch); tdep->sigtramp_p = amd64_linux_sigtramp_p; tdep->sigcontext_addr = amd64_linux_sigcontext_addr; tdep->sc_reg_offset = amd64_linux_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset); /* GNU/Linux uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); /* Add the %orig_rax register used for syscall restarting. */ set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc); set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS); set_gdbarch_register_name (gdbarch, amd64_linux_register_name); set_gdbarch_register_type (gdbarch, amd64_linux_register_type); set_gdbarch_register_reggroup_p (gdbarch, amd64_linux_register_reggroup_p); /* Enable TLS support. */ set_gdbarch_fetch_tls_load_module_address (gdbarch, svr4_fetch_objfile_link_map); }
static void amd64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); amd64_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; set_gdbarch_regset_from_core_section (gdbarch, amd64obsd_regset_from_core_section); 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 uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); }
static void amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { amd64_init_abi (info, gdbarch); dicos_init_abi (gdbarch); }
static void amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset_reg_offset = amd64_sol2_gregset_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64_sol2_gregset_reg_offset); tdep->sizeof_gregset = 28 * 8; amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); tdep->sigtramp_p = amd64_sol2_sigtramp_p; tdep->sigcontext_addr = amd64_sol2_mcontext_addr; tdep->sc_reg_offset = tdep->gregset_reg_offset; tdep->sc_num_regs = tdep->gregset_num_regs; /* Solaris uses SVR4-style shared libraries. */ set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); /* How to print LWP PTIDs from core files. */ set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); }
static void amd64dfly_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* DragonFly is BSD-based. */ i386bsd_init_abi (info, gdbarch); tdep->gregset_reg_offset = amd64dfly_r_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64dfly_r_reg_offset); tdep->sizeof_gregset = 25 * 8; amd64_init_abi (info, gdbarch); tdep->sigtramp_start = amd64dfly_sigtramp_start_addr; tdep->sigtramp_end = amd64dfly_sigtramp_end_addr; tdep->sigcontext_addr = amd64dfly_sigcontext_addr; tdep->sc_reg_offset = amd64dfly_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (amd64dfly_sc_reg_offset); /* DragonFly provides a user-level threads implementation. */ bsd_uthread_set_supply_uthread (gdbarch, amd64dfly_supply_uthread); bsd_uthread_set_collect_uthread (gdbarch, amd64dfly_collect_uthread); /* DragonFly uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); }
static void amd64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* Initialize general-purpose register set details first. */ tdep->gregset_reg_offset = amd64nbsd_r_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset); tdep->sizeof_gregset = 26 * 8; amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); tdep->jb_pc_offset = 7 * 8; /* NetBSD has its own convention for signal trampolines. */ tdep->sigtramp_p = amd64nbsd_sigtramp_p; tdep->sigcontext_addr = amd64nbsd_mcontext_addr; tdep->sc_reg_offset = amd64nbsd_r_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset); /* NetBSD uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); }
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 amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); dicos_init_abi (gdbarch); }
static void amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); amd64_init_abi (info, gdbarch); dicos_init_abi (gdbarch); }
static void amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); amd64_init_abi (info, gdbarch); dicos_init_abi (gdbarch); set_gdbarch_push_dummy_code (gdbarch, amd64_dicos_push_dummy_code); }
static void amd64fbsd_kernel_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch) { amd64_init_abi(info, gdbarch); frame_unwind_prepend_unwinder(gdbarch, &amd64fbsd_trapframe_unwind); set_solib_ops(gdbarch, &kld_so_ops); fbsd_vmcore_set_supply_pcb(gdbarch, amd64fbsd_supply_pcb); fbsd_vmcore_set_cpu_pcb_addr(gdbarch, kgdb_trgt_stop_pcb); }
static void amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset_reg_offset = amd64_sol2_gregset_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64_sol2_gregset_reg_offset); tdep->sizeof_gregset = 28 * 8; amd64_init_abi (info, gdbarch); tdep->sigtramp_p = amd64_sol2_sigtramp_p; tdep->sigcontext_addr = amd64_sol2_mcontext_addr; tdep->sc_reg_offset = tdep->gregset_reg_offset; tdep->sc_num_regs = tdep->gregset_num_regs; /* Solaris uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); }
static void x86_darwin_init_abi_64 (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); amd64_init_abi (info, gdbarch); tdep->struct_return = reg_struct_return; dwarf2_frame_set_signal_frame_p (gdbarch, darwin_dwarf_signal_frame_p); tdep->sigtramp_p = i386_sigtramp_p; tdep->sigcontext_addr = amd64_darwin_sigcontext_addr; tdep->sc_reg_offset = amd64_darwin_thread_state_reg_offset; tdep->sc_num_regs = amd64_darwin_thread_state_num_regs; tdep->jb_pc_offset = 148; set_solib_ops (gdbarch, &darwin_so_ops); }
static void amd64dfly_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); i386bsd_init_abi (info, gdbarch); tdep->gregset_reg_offset = amd64dfly_r_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64dfly_r_reg_offset); tdep->sizeof_gregset = 25 * 8; amd64_init_abi (info, gdbarch); tdep->sigtramp_start = amd64dfly_sigtramp_start_addr; tdep->sigtramp_end = amd64dfly_sigtramp_end_addr; tdep->sigcontext_addr = amd64dfly_sigcontext_addr; tdep->sc_reg_offset = amd64dfly_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (amd64dfly_sc_reg_offset); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); }
static void amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* The dwarf2 unwinder (appended very early by i386_gdbarch_init) is preferred over the SEH one. The reasons are: - binaries without SEH but with dwarf2 debug info are correcly handled (although they aren't ABI compliant, gcc before 4.7 didn't emit SEH info). - dwarf3 DW_OP_call_frame_cfa is correctly handled (it can only be handled if the dwarf2 unwinder is used). The call to amd64_init_abi appends default unwinders, that aren't compatible with the SEH one. */ frame_unwind_append_unwinder (gdbarch, &amd64_windows_frame_unwind); amd64_init_abi (info, gdbarch); windows_init_abi (info, gdbarch); /* On Windows, "long"s are only 32bit. */ set_gdbarch_long_bit (gdbarch, 32); /* Function calls. */ set_gdbarch_push_dummy_call (gdbarch, amd64_windows_push_dummy_call); set_gdbarch_return_value (gdbarch, amd64_windows_return_value); set_gdbarch_skip_main_prologue (gdbarch, amd64_skip_main_prologue); set_gdbarch_skip_trampoline_code (gdbarch, amd64_windows_skip_trampoline_code); set_gdbarch_skip_prologue (gdbarch, amd64_windows_skip_prologue); set_gdbarch_auto_wide_charset (gdbarch, amd64_windows_auto_wide_charset); }
void amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* Obviously FreeBSD is BSD-based. */ i386bsd_init_abi (info, gdbarch); tdep->gregset_reg_offset = amd64fbsd_r_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64fbsd_r_reg_offset); tdep->sizeof_gregset = 22 * 8; amd64_init_abi (info, gdbarch); tdep->sigtramp_start = amd64fbsd_sigtramp_start_addr; tdep->sigtramp_end = amd64fbsd_sigtramp_end_addr; tdep->sigcontext_addr = amd64fbsd_sigcontext_addr; tdep->sc_reg_offset = amd64fbsd_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (amd64fbsd_sc_reg_offset); /* FreeBSD uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); }
static void amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset); tdep->sizeof_gregset = 27 * 8; amd64_init_abi (info, gdbarch); tdep->sigtramp_p = amd64_linux_sigtramp_p; tdep->sigcontext_addr = amd64_linux_sigcontext_addr; tdep->sc_reg_offset = amd64_linux_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset); /* GNU/Linux uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); /* Enable TLS support. */ set_gdbarch_fetch_tls_load_module_address (gdbarch, svr4_fetch_objfile_link_map); }