22#include "elf/common.h"
26#include <sys/procfs.h>
38#include "gdbsupport/x86-xstate.h"
73 parent_pid = parent->
ptid.pid ();
76 *child_state = *parent_state;
97#define AMD64_LINUX_USER64_CS 0x33
102#define AMD64_LINUX_X32_DS 0x2b
115 static uint64_t xcr0;
116 uint64_t xcr0_features_bits;
127 cs =
ptrace (PTRACE_PEEKUSER, tid,
128 offsetof (
struct user_regs_struct, cs), 0);
132 is_64bit = cs == AMD64_LINUX_USER64_CS;
136 ds =
ptrace (PTRACE_PEEKUSER, tid,
137 offsetof (
struct user_regs_struct, ds), 0);
141 is_x32 = ds == AMD64_LINUX_X32_DS;
143 if (
sizeof (
void *) == 4 && is_64bit && !is_x32)
144 error (_(
"Can't debug 64-bit process with 32-bit GDB"));
146#elif HAVE_PTRACE_GETFPXREGS
149 elf_fpxregset_t fpxregs;
151 if (
ptrace (PTRACE_GETFPXREGS, tid, 0, (
int) &fpxregs) < 0)
162 uint64_t xstateregs[(X86_XSTATE_SSE_SIZE /
sizeof (uint64_t))];
165 iov.iov_base = xstateregs;
166 iov.iov_len =
sizeof (xstateregs);
170 (
unsigned int) NT_X86_XSTATE, &iov) < 0)
178 /
sizeof (uint64_t))];
187 xcr0_features_bits = xcr0 & X86_XSTATE_ALL_MASK;
189 xcr0_features_bits = 0;
208 gdb_assert_not_reached (
"failed to return tdesc");
216 const struct btrace_config *
conf)
219 ptid_t ptid = tp->
ptid;
224 catch (
const gdb_exception_error &exception)
226 error (_(
"Could not enable branch tracing for %s: %s"),
240 if (errcode != BTRACE_ERR_NONE)
241 error (_(
"Could not disable branch tracing."));
256 enum btrace_read_type
type)
263const struct btrace_config *
295 unsigned int desc[4];
299 gdb_assert (
sizeof (
int) == 4);
301#ifndef PTRACE_GET_THREAD_AREA
302#define PTRACE_GET_THREAD_AREA 25
308 *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 btrace_config conf
struct arch_lwp_info * arch_private
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)
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)
void perror_with_name(const char *string)
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)