diff options
Diffstat (limited to 'gdb/amd64-linux-nat.c')
-rw-r--r-- | gdb/amd64-linux-nat.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c index dbb9b32..4b23fd9 100644 --- a/gdb/amd64-linux-nat.c +++ b/gdb/amd64-linux-nat.c @@ -32,6 +32,7 @@ #include "amd64-tdep.h" #include "amd64-linux-tdep.h" #include "i386-linux-tdep.h" +#include "x86-tdep.h" #include "gdbsupport/x86-xstate.h" #include "x86-linux-nat.h" @@ -86,6 +87,8 @@ static int amd64_linux_gregset32_reg_offset[] = -1, -1, -1, -1, -1, -1, -1, -1, /* k0 ... k7 (AVX512) */ -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm7 (AVX512) */ -1, /* PKEYS register PKRU */ + -1, /* SSP register. */ + -1, -1, /* fs/gs base registers. */ ORIG_RAX * 8 /* "orig_eax" */ }; @@ -237,6 +240,14 @@ amd64_linux_nat_target::fetch_registers (struct regcache *regcache, int regnum) if (have_ptrace_getregset == TRIBOOL_TRUE) { + if ((regnum == -1 && tdep->ssp_regnum != -1) + || (regnum != -1 && regnum == tdep->ssp_regnum)) + { + x86_linux_fetch_ssp (regcache, tid); + if (regnum != -1) + return; + } + /* Pre-4.14 kernels have a bug (fixed by commit 0852b374173b "x86/fpu: Add FPU state copying quirk to handle XRSTOR failure on Intel Skylake CPUs") that sometimes causes the mxcsr location in @@ -302,6 +313,14 @@ amd64_linux_nat_target::store_registers (struct regcache *regcache, int regnum) if (have_ptrace_getregset == TRIBOOL_TRUE) { gdb::byte_vector xstateregs (tdep->xsave_layout.sizeof_xsave); + if ((regnum == -1 && tdep->ssp_regnum != -1) + || (regnum != -1 && regnum == tdep->ssp_regnum)) + { + x86_linux_store_ssp (regcache, tid); + if (regnum != -1) + return; + } + struct iovec iov; iov.iov_base = xstateregs.data (); |