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.
This commit is contained in:
Jon Turney 2020-06-30 16:37:20 +01:00
parent 7d155da3d9
commit aff9d38745
No known key found for this signature in database
GPG key ID: C7C86F0370285C81
2 changed files with 75 additions and 0 deletions

View file

@ -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);
}