24 #include "elf/common.h"
26 #include <sys/ptrace.h>
27 #include <asm/prctl.h>
61 -1, -1, -1, -1, -1, -1, -1, -1,
62 -1, -1, -1, -1, -1, -1, -1, -1,
63 -1, -1, -1, -1, -1, -1, -1, -1, -1,
64 -1, -1, -1, -1, -1, -1, -1, -1,
67 -1, -1, -1, -1, -1, -1, -1, -1,
68 -1, -1, -1, -1, -1, -1, -1, -1,
91 elf_gregset_t *gregsetp,
int regnum)
113 elf_fpregset_t *fpregsetp,
int regnum)
151 elf_fpregset_t fpregs;
158 iov.iov_base = xstateregs;
159 iov.iov_len =
sizeof (xstateregs);
161 (
unsigned int) NT_X86_XSTATE, (
long) &iov) < 0)
210 elf_fpregset_t fpregs;
217 iov.iov_base = xstateregs;
218 iov.iov_len =
sizeof (xstateregs);
220 (
unsigned int) NT_X86_XSTATE, (
long) &iov) < 0)
226 (
unsigned int) NT_X86_XSTATE, (
long) &iov) < 0)
248 lwpid_t lwpid,
int idx,
void **base)
252 unsigned int base_addr;
261 (*base) = (
void *) (
long) base_addr;
269 #ifndef PTRACE_ARCH_PRCTL
270 #define PTRACE_ARCH_PRCTL 30
279 #ifdef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
286 fs =
ptrace (PTRACE_PEEKUSER, lwpid,
287 offsetof (
struct user_regs_struct, fs_base), 0);
299 #ifdef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE
303 gs =
ptrace (PTRACE_PEEKUSER, lwpid,
304 offsetof (
struct user_regs_struct, gs_base), 0);
475 #define cpt_si_pid _sifields._kill._pid
476 #define cpt_si_uid _sifields._kill._uid
477 #define cpt_si_timerid _sifields._timer._tid
478 #define cpt_si_overrun _sifields._timer._overrun
479 #define cpt_si_status _sifields._sigchld._status
480 #define cpt_si_utime _sifields._sigchld._utime
481 #define cpt_si_stime _sifields._sigchld._stime
482 #define cpt_si_ptr _sifields._rt._sigval.sival_ptr
483 #define cpt_si_addr _sifields._sigfault._addr
484 #define cpt_si_band _sifields._sigpoll._band
485 #define cpt_si_fd _sifields._sigpoll._fd
490 #define si_timerid si_timer1
493 #define si_overrun si_timer2
499 memset (to, 0,
sizeof (*to));
507 to->cpt_si_timerid = from->si_timerid;
508 to->cpt_si_overrun = from->si_overrun;
509 to->cpt_si_ptr = (intptr_t) from->si_ptr;
511 else if (to->
si_code == SI_USER)
513 to->cpt_si_pid = from->si_pid;
514 to->cpt_si_uid = from->si_uid;
518 to->cpt_si_pid = from->si_pid;
519 to->cpt_si_uid = from->si_uid;
520 to->cpt_si_ptr = (intptr_t) from->si_ptr;
527 to->cpt_si_pid = from->si_pid;
528 to->cpt_si_uid = from->si_uid;
529 to->cpt_si_status = from->si_status;
530 to->cpt_si_utime = from->si_utime;
531 to->cpt_si_stime = from->si_stime;
537 to->cpt_si_addr = (intptr_t) from->si_addr;
540 to->cpt_si_band = from->si_band;
541 to->cpt_si_fd = from->si_fd;
544 to->cpt_si_pid = from->si_pid;
545 to->cpt_si_uid = from->si_uid;
546 to->cpt_si_ptr = (intptr_t) from->si_ptr;
555 memset (to, 0,
sizeof (*to));
561 if (to->si_code == SI_TIMER)
563 to->si_timerid = from->cpt_si_timerid;
564 to->si_overrun = from->cpt_si_overrun;
565 to->si_ptr = (
void *) (intptr_t) from->cpt_si_ptr;
567 else if (to->si_code == SI_USER)
569 to->si_pid = from->cpt_si_pid;
570 to->si_uid = from->cpt_si_uid;
574 to->si_pid = from->cpt_si_pid;
575 to->si_uid = from->cpt_si_uid;
576 to->si_ptr = (
void *) (intptr_t) from->cpt_si_ptr;
580 switch (to->si_signo)
583 to->si_pid = from->cpt_si_pid;
584 to->si_uid = from->cpt_si_uid;
585 to->si_status = from->cpt_si_status;
586 to->si_utime = from->cpt_si_utime;
587 to->si_stime = from->cpt_si_stime;
593 to->si_addr = (
void *) (intptr_t) from->cpt_si_addr;
596 to->si_band = from->cpt_si_band;
597 to->si_fd = from->cpt_si_fd;
600 to->si_pid = from->cpt_si_pid;
601 to->si_uid = from->cpt_si_uid;
602 to->si_ptr = (
void* ) (intptr_t) from->cpt_si_ptr;
612 memset (to, 0,
sizeof (*to));
620 to->cpt_si_timerid = from->si_timerid;
621 to->cpt_si_overrun = from->si_overrun;
622 to->cpt_si_ptr = (intptr_t) from->si_ptr;
624 else if (to->
si_code == SI_USER)
626 to->cpt_si_pid = from->si_pid;
627 to->cpt_si_uid = from->si_uid;
631 to->cpt_si_pid = from->si_pid;
632 to->cpt_si_uid = from->si_uid;
633 to->cpt_si_ptr = (intptr_t) from->si_ptr;
640 to->cpt_si_pid = from->si_pid;
641 to->cpt_si_uid = from->si_uid;
642 to->cpt_si_status = from->si_status;
643 memcpy (&to->cpt_si_utime, &from->si_utime,
644 sizeof (to->cpt_si_utime));
645 memcpy (&to->cpt_si_stime, &from->si_stime,
646 sizeof (to->cpt_si_stime));
652 to->cpt_si_addr = (intptr_t) from->si_addr;
655 to->cpt_si_band = from->si_band;
656 to->cpt_si_fd = from->si_fd;
659 to->cpt_si_pid = from->si_pid;
660 to->cpt_si_uid = from->si_uid;
661 to->cpt_si_ptr = (intptr_t) from->si_ptr;
671 memset (to, 0,
sizeof (*to));
677 if (to->si_code == SI_TIMER)
679 to->si_timerid = from->cpt_si_timerid;
680 to->si_overrun = from->cpt_si_overrun;
681 to->si_ptr = (
void *) (intptr_t) from->cpt_si_ptr;
683 else if (to->si_code == SI_USER)
685 to->si_pid = from->cpt_si_pid;
686 to->si_uid = from->cpt_si_uid;
690 to->si_pid = from->cpt_si_pid;
691 to->si_uid = from->cpt_si_uid;
692 to->si_ptr = (
void *) (intptr_t) from->cpt_si_ptr;
696 switch (to->si_signo)
699 to->si_pid = from->cpt_si_pid;
700 to->si_uid = from->cpt_si_uid;
701 to->si_status = from->cpt_si_status;
702 memcpy (&to->si_utime, &from->cpt_si_utime,
703 sizeof (to->si_utime));
704 memcpy (&to->si_stime, &from->cpt_si_stime,
705 sizeof (to->si_stime));
711 to->si_addr = (
void *) (intptr_t) from->cpt_si_addr;
714 to->si_band = from->cpt_si_band;
715 to->si_fd = from->cpt_si_fd;
718 to->si_pid = from->cpt_si_pid;
719 to->si_uid = from->cpt_si_uid;
720 to->si_ptr = (
void* ) (intptr_t) from->cpt_si_ptr;
struct gdbarch * target_gdbarch(void)
int _pad[((128/sizeof(int))-3)]
struct frame_info * get_current_frame(void)
#define I386_LINUX_NUM_REGS
struct compat_siginfo::@4::@8 _sigchld
union compat_sigval compat_sigval_t
struct compat_siginfo compat_siginfo_t
struct gdbarch * get_regcache_arch(const struct regcache *regcache)
void amd64_collect_native_gregset(const struct regcache *regcache, void *gregs, int regnum)
static void siginfo_from_compat_x32_siginfo(siginfo_t *to, compat_x32_siginfo_t *from)
void supply_fpregset(struct regcache *regcache, const elf_fpregset_t *fpregsetp)
struct compat_siginfo::@4::@9 _sigfault
int amd64_native_gregset32_num_regs
struct compat_siginfo::@4::@6 _timer
struct target_ops * x86_linux_create_target(void)
ps_err_e x86_linux_get_thread_area(pid_t pid, void *addr, unsigned int *base_addr)
union compat_x32_siginfo::@11 _sifields
void linux_nat_set_siginfo_fixup(struct target_ops *t, int(*siginfo_fixup)(siginfo_t *, gdb_byte *, int))
static int amd64_linux_siginfo_fixup(siginfo_t *native, gdb_byte *inf, int direction)
struct compat_x32_siginfo compat_x32_siginfo_t
int amd64_native_gregset64_num_regs
static void siginfo_from_compat_siginfo(siginfo_t *to, compat_siginfo_t *from)
struct compat_siginfo::@4::@10 _sigpoll
void amd64_collect_fxsave(const struct regcache *regcache, int regnum, void *fxsave)
void amd64_supply_native_gregset(struct regcache *regcache, const void *gregs, int regnum)
struct compat_x32_siginfo::@11::@16 _sigfault
int * amd64_native_gregset32_reg_offset
struct compat_x32_clock compat_x32_clock_t
enum tribool have_ptrace_getregset
void amd64_supply_fxsave(struct regcache *regcache, int regnum, const void *fxsave)
static void amd64_linux_store_inferior_registers(struct target_ops *ops, struct regcache *regcache, int regnum)
struct compat_siginfo::@4::@5 _kill
int * amd64_native_gregset64_reg_offset
static void compat_siginfo_from_siginfo(compat_siginfo_t *to, siginfo_t *from)
static void amd64_linux_fetch_inferior_registers(struct target_ops *ops, struct regcache *regcache, int regnum)
void amd64_supply_xsave(struct regcache *regcache, int regnum, const void *xsave)
void fill_gregset(const struct regcache *regcache, elf_gregset_t *gregsetp, int regnum)
void _initialize_amd64_linux_nat(void)
void x86_linux_add_target(struct target_ops *t)
int amd64_linux_gregset_reg_offset[]
int gdbarch_addr_bit(struct gdbarch *gdbarch)
compat_x32_clock_t _stime
struct compat_x32_siginfo::@11::@12 _kill
void fill_fpregset(const struct regcache *regcache, elf_fpregset_t *fpregsetp, int regnum)
compat_x32_clock_t _utime
#define X86_XSTATE_MAX_SIZE
struct compat_siginfo::@4::@7 _rt
int ptid_get_pid(ptid_t ptid)
struct compat_x32_siginfo::@11::@17 _sigpoll
const char const char int
void(* to_fetch_registers)(struct target_ops *, struct regcache *, int) TARGET_DEFAULT_IGNORE()
ps_err_e ps_get_thread_area(const struct ps_prochandle *ph, lwpid_t lwpid, int idx, void **base)
void void void void void void void void void perror_with_name(const char *string) ATTRIBUTE_NORETURN
#define PTRACE_ARCH_PRCTL
unsigned int compat_uptr_t
struct compat_x32_siginfo::@11::@14 _rt
#define AMD64_LINUX_NUM_REGS
int amd64_native_gregset_supplies_p(struct gdbarch *gdbarch, int regnum)
static int amd64_linux_gregset32_reg_offset[]
static void compat_x32_siginfo_from_siginfo(compat_x32_siginfo_t *to, siginfo_t *from)
void supply_gregset(struct regcache *regcache, const elf_gregset_t *gregsetp)
struct compat_x32_siginfo::@11::@13 _timer
union compat_siginfo::@4 _sifields
int _pad[((128/sizeof(int))-3)]
long ptid_get_lwp(ptid_t ptid)
struct compat_x32_siginfo::@11::@15 _sigchld
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
void amd64_collect_xsave(const struct regcache *regcache, int regnum, void *xsave, int gcore)
void(* to_store_registers)(struct target_ops *, struct regcache *, int) TARGET_DEFAULT_NORETURN(noprocess())
struct gdbarch * get_frame_arch(struct frame_info *this_frame)