aboutsummaryrefslogtreecommitdiff
path: root/gdb/amd64-windows-tdep.c
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2020-06-30 16:37:20 +0100
committerJon Turney <jon.turney@dronecode.org.uk>2020-09-18 17:12:09 +0100
commitaff9d38745f734f3c0b162f6da39b8b9b5d1f81c (patch)
treeafb27454123922cfd8fd2a1594a2f060d6476a4b /gdb/amd64-windows-tdep.c
parent7d155da3d945350fb40e12c64511e0d719df3137 (diff)
downloadgdb-aff9d38745f734f3c0b162f6da39b8b9b5d1f81c.zip
gdb-aff9d38745f734f3c0b162f6da39b8b9b5d1f81c.tar.gz
gdb-aff9d38745f734f3c0b162f6da39b8b9b5d1f81c.tar.bz2
Add amd64_windows_gregset_reg_offset
Register a gregset_reg_offset array for Cygwin x86_64 core dump parsing (this causes the generic i386_iterate_over_regset_sections() '.reg' section iterator to get installed by i386_gdbarch_init()). gdb/ChangeLog: 2020-07-01 Jon Turney <jon.turney@dronecode.org.uk> * amd64-windows-tdep.c(amd64_windows_gregset_reg_offset): Add. (amd64_windows_init_abi_common): ... and register.
Diffstat (limited to 'gdb/amd64-windows-tdep.c')
-rw-r--r--gdb/amd64-windows-tdep.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index e55d021..7bb98bd 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -42,6 +42,69 @@ static int amd64_windows_dummy_call_integer_regs[] =
AMD64_R9_REGNUM /* %r9 */
};
+/* This vector maps GDB's idea of a register's number into an offset into
+ the Windows API CONTEXT structure. */
+static int amd64_windows_gregset_reg_offset[] =
+{
+ 120, /* Rax */
+ 144, /* Rbx */
+ 128, /* Rcx */
+ 136, /* Rdx */
+ 168, /* Rsi */
+ 176, /* Rdi */
+ 160, /* Rbp */
+ 152, /* Rsp */
+ 184, /* R8 */
+ 192, /* R9 */
+ 200, /* R10 */
+ 208, /* R11 */
+ 216, /* R12 */
+ 224, /* R13 */
+ 232, /* R14 */
+ 240, /* R15 */
+ 248, /* Rip */
+ 68, /* EFlags */
+ 56, /* SegCs */
+ 66, /* SegSs */
+ 58, /* SegDs */
+ 60, /* SegEs */
+ 62, /* SegFs */
+ 64, /* SegGs */
+ 288, /* FloatSave.FloatRegisters[0] */
+ 304, /* FloatSave.FloatRegisters[1] */
+ 320, /* FloatSave.FloatRegisters[2] */
+ 336, /* FloatSave.FloatRegisters[3] */
+ 352, /* FloatSave.FloatRegisters[4] */
+ 368, /* FloatSave.FloatRegisters[5] */
+ 384, /* FloatSave.FloatRegisters[6] */
+ 400, /* FloatSave.FloatRegisters[7] */
+ 256, /* FloatSave.ControlWord */
+ 258, /* FloatSave.StatusWord */
+ 260, /* FloatSave.TagWord */
+ 268, /* FloatSave.ErrorSelector */
+ 264, /* FloatSave.ErrorOffset */
+ 276, /* FloatSave.DataSelector */
+ 272, /* FloatSave.DataOffset */
+ 268, /* FloatSave.ErrorSelector */
+ 416, /* Xmm0 */
+ 432, /* Xmm1 */
+ 448, /* Xmm2 */
+ 464, /* Xmm3 */
+ 480, /* Xmm4 */
+ 496, /* Xmm5 */
+ 512, /* Xmm6 */
+ 528, /* Xmm7 */
+ 544, /* Xmm8 */
+ 560, /* Xmm9 */
+ 576, /* Xmm10 */
+ 592, /* Xmm11 */
+ 608, /* Xmm12 */
+ 624, /* Xmm13 */
+ 640, /* Xmm14 */
+ 656, /* Xmm15 */
+ 280, /* FloatSave.MxCsr */
+};
+
#define AMD64_WINDOWS_SIZEOF_GREGSET 1232
/* Return nonzero if an argument of type TYPE should be passed
@@ -1215,6 +1278,8 @@ amd64_windows_auto_wide_charset (void)
static void
amd64_windows_init_abi_common (gdbarch_info info, struct gdbarch *gdbarch)
{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
/* The dwarf2 unwinder (appended very early by i386_gdbarch_init) is
preferred over the SEH one. The reasons are:
- binaries without SEH but with dwarf2 debug info are correctly handled
@@ -1240,6 +1305,11 @@ amd64_windows_init_abi_common (gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_skip_prologue (gdbarch, amd64_windows_skip_prologue);
+ tdep->gregset_reg_offset = amd64_windows_gregset_reg_offset;
+ tdep->gregset_num_regs = ARRAY_SIZE (amd64_windows_gregset_reg_offset);
+ tdep->sizeof_gregset = AMD64_WINDOWS_SIZEOF_GREGSET;
+ tdep->sizeof_fpregset = 0;
+
set_gdbarch_auto_wide_charset (gdbarch, amd64_windows_auto_wide_charset);
}