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 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 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 const struct target_desc * amd64fbsd_read_description (struct target_ops *ops) { #ifdef PT_GETXSTATE_INFO static int xsave_probed; static uint64_t xcr0; #endif struct reg regs; int is64; if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); is64 = (regs.r_cs == GSEL (GUCODE_SEL, SEL_UPL)); #ifdef PT_GETXSTATE_INFO if (!xsave_probed) { struct ptrace_xstate_info info; if (ptrace (PT_GETXSTATE_INFO, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &info, sizeof (info)) == 0) { amd64bsd_xsave_len = info.xsave_len; xcr0 = info.xsave_mask; } xsave_probed = 1; } if (amd64bsd_xsave_len != 0) { if (is64) return amd64_target_description (xcr0); else return i386_target_description (xcr0); } #endif if (is64) return tdesc_amd64; else return tdesc_i386; }
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, amd64_target_description (X86_XSTATE_SSE_MASK, true)); 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); }