22#include "elf/common.h"
26#include <sys/procfs.h>
38#include "gdbsupport/x86-xstate.h"
74 parent_pid = parent->
ptid.pid ();
77 *child_state = *parent_state;
98#define AMD64_LINUX_USER64_CS 0x33
103#define AMD64_LINUX_X32_DS 0x2b
116 static uint64_t xcr0;
117 uint64_t xcr0_features_bits;
131 cs =
ptrace (PTRACE_PEEKUSER, tid,
132 offsetof (
struct user_regs_struct, cs), 0);
134 perror_with_name (_(
"Couldn't get CS register"));
136 is_64bit = cs == AMD64_LINUX_USER64_CS;
140 ds =
ptrace (PTRACE_PEEKUSER, tid,
141 offsetof (
struct user_regs_struct, ds), 0);
143 perror_with_name (_(
"Couldn't get DS register"));
145 is_x32 = ds == AMD64_LINUX_X32_DS;
147 if (
sizeof (
void *) == 4 && is_64bit && !is_x32)
148 error (_(
"Can't debug 64-bit process with 32-bit GDB"));
150#elif HAVE_PTRACE_GETFPXREGS
153 elf_fpxregset_t fpxregs;
155 if (
ptrace (PTRACE_GETFPXREGS, tid, 0, (
int) &fpxregs) < 0)
166 uint64_t xstateregs[(X86_XSTATE_SSE_SIZE /
sizeof (uint64_t))];
169 iov.iov_base = xstateregs;
170 iov.iov_len =
sizeof (xstateregs);
174 (
unsigned int) NT_X86_XSTATE, &iov) < 0)
182 /
sizeof (uint64_t))];
193 xcr0_features_bits = xcr0 & X86_XSTATE_ALL_MASK;
195 xcr0_features_bits = 0;
214 gdb_assert_not_reached (
"failed to return tdesc");
220struct btrace_target_info *
222 const struct btrace_config *conf)
224 struct btrace_target_info *tinfo =
nullptr;
225 ptid_t ptid = tp->
ptid;
230 catch (
const gdb_exception_error &exception)
232 error (_(
"Could not enable branch tracing for %s: %s"),
246 if (errcode != BTRACE_ERR_NONE)
247 error (_(
"Could not disable branch tracing."));
261 struct btrace_target_info *btinfo,
262 enum btrace_read_type
type)
269const struct btrace_config *
301 unsigned int desc[4];
305 gdb_assert (
sizeof (
int) == 4);
307#ifndef PTRACE_GET_THREAD_AREA
308#define PTRACE_GET_THREAD_AREA 25
314 *base_addr = desc[1];
const target_desc * amd64_linux_read_description(uint64_t xcr0_features_bit, bool is_x32)
void post_startup_inferior(ptid_t) override
#define ptrace(request, pid, addr, data)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int int rusage_t pid_t pid
int have_ptrace_getfpxregs
const struct target_desc * i386_linux_read_description(uint64_t xcr0)
#define I386_LINUX_XSAVE_XCR0_OFFSET
enum btrace_error linux_read_btrace(struct btrace_data *btrace, struct btrace_target_info *tinfo, enum btrace_read_type type)
const struct btrace_config * linux_btrace_conf(const struct btrace_target_info *tinfo)
struct btrace_target_info * linux_enable_btrace(ptid_t ptid, const struct btrace_config *conf)
enum btrace_error linux_disable_btrace(struct btrace_target_info *tinfo)
enum tribool have_ptrace_getregset
struct arch_lwp_info * arch_private
target_ops * beneath() const
virtual const struct target_desc * read_description() TARGET_DEFAULT_RETURN(NULL)
void(* set_addr)(int, CORE_ADDR)
unsigned long(* get_control)(void)
unsigned long(* get_status)(void)
void(* set_control)(unsigned long)
CORE_ADDR(* get_addr)(int)
x86_xsave_layout m_xsave_layout
const struct target_desc * read_description() override
void teardown_btrace(struct btrace_target_info *tinfo) override
void low_new_fork(struct lwp_info *parent, pid_t child_pid) override
struct btrace_target_info * enable_btrace(thread_info *tp, const struct btrace_config *conf) override
const struct btrace_config * btrace_conf(const struct btrace_target_info *) override
enum btrace_error read_btrace(struct btrace_data *data, struct btrace_target_info *btinfo, enum btrace_read_type type) override
virtual ~x86_linux_nat_target() override=0
void disable_btrace(struct btrace_target_info *tinfo) override
void post_startup_inferior(ptid_t) override
std::string target_pid_to_str(ptid_t ptid)
struct x86_debug_reg_state * x86_debug_reg_state(pid_t pid)
struct x86_dr_low_type x86_dr_low
unsigned long x86_linux_dr_get_status(void)
unsigned long x86_linux_dr_get_control(void)
void x86_linux_dr_set_addr(int regnum, CORE_ADDR addr)
CORE_ADDR x86_linux_dr_get_addr(int regnum)
void x86_linux_dr_set_control(unsigned long control)
#define PTRACE_GET_THREAD_AREA
void _initialize_x86_linux_nat()
ps_err_e x86_linux_get_thread_area(pid_t pid, void *addr, unsigned int *base_addr)
void x86_cleanup_dregs(void)
void x86_set_debug_register_length(int len)
x86_xsave_layout x86_fetch_xsave_layout(uint64_t xcr0, int len)