diff options
author | John Baldwin <jhb@FreeBSD.org> | 2023-08-28 14:18:19 -0700 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2023-08-28 14:18:19 -0700 |
commit | 22ca5c10279903a221ba4580afef71af0c639704 (patch) | |
tree | 1005c17ca099d32b57aa3c844d80041d9bec5e1e /gdb/i386-fbsd-tdep.h | |
parent | 2e639674c56a35a14ebb33bcfcd9ff614a516735 (diff) | |
download | fsf-binutils-gdb-22ca5c10279903a221ba4580afef71af0c639704.zip fsf-binutils-gdb-22ca5c10279903a221ba4580afef71af0c639704.tar.gz fsf-binutils-gdb-22ca5c10279903a221ba4580afef71af0c639704.tar.bz2 |
gdb: Update x86 FreeBSD architectures to support XSAVE layouts.
Refactor i386fbsd_core_read_xcr0 to fetch and return a corresponding
x86_xsave_layout as well as xcr0 using the size of an existing
NT_X86_XSTATE core dump to determine the offsets via
i387_guess_xsave_layout. Use this to add an implementation of
gdbarch_core_xfer_x86_xsave_layout.
Use tdep->xsave_layout.sizeof_xsave as the size of the XSTATE register
set and only fetch/store the register set if this size is non-zero.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdb/i386-fbsd-tdep.h')
-rw-r--r-- | gdb/i386-fbsd-tdep.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gdb/i386-fbsd-tdep.h b/gdb/i386-fbsd-tdep.h index cb991af..c49cb1e 100644 --- a/gdb/i386-fbsd-tdep.h +++ b/gdb/i386-fbsd-tdep.h @@ -20,10 +20,20 @@ #ifndef I386_FBSD_TDEP_H #define I386_FBSD_TDEP_H +#include "gdbsupport/x86-xstate.h" #include "regset.h" -/* Get XSAVE extended state xcr0 from core dump. */ -extern uint64_t i386fbsd_core_read_xcr0 (bfd *abfd); +/* Read the XSAVE extended state xcr0 value from the ABFD core file. + If it appears to be valid, return it and fill LAYOUT with values + inferred from that value. + + Otherwise, return 0 to indicate no state was found and leave LAYOUT + untouched. */ +uint64_t i386_fbsd_core_read_xsave_info (bfd *abfd, x86_xsave_layout &layout); + +/* Implement the core_read_x86_xsave_layout gdbarch method. */ +bool i386_fbsd_core_read_x86_xsave_layout (struct gdbarch *gdbarch, + x86_xsave_layout &layout); /* The format of the XSAVE extended area is determined by hardware. Cores store the XSAVE extended area in a NT_X86_XSTATE note that |