]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
gdb, gdbserver: Use xstate_bv for target description creation on x86.
authorChristina Schimpe <christina.schimpe@intel.com>
Tue, 3 Dec 2024 16:32:10 +0000 (08:32 -0800)
committerChristina Schimpe <christina.schimpe@intel.com>
Fri, 29 Aug 2025 17:02:09 +0000 (17:02 +0000)
commit6ef3896cfe781078bf5b576c0e5a264874f2381c
treec1628aaf038ae45f3a652633eabaa0f065590483
parent92cc4fb2265c217bb136e1ac47e3ba24b5e71d35
gdb, gdbserver: Use xstate_bv for target description creation on x86.

The XSAVE function set is organized in state components, which are a set of
registers or parts of registers.  So-called XSAVE-supported features are
organized using state-component bitmaps, each bit corresponding to a
single state component.

The Intel Software Developer's Manual uses the term xstate_bv for a
state-component bitmap, which is defined as XCR0 | IA32_XSS.  The control
register XCR0 only contains a state-component bitmap that specifies user state
components, while IA32_XSS contains a state-component bitmap that specifies
supervisor state components.

Until now, XCR0 is used as input for target description creation in GDB.
However, a following patch will add userspace support for the CET shadow
stack feature by Intel.  The CET state is configured in IA32_XSS and consists
of 2 state components:
- State component 11 used for the 2 MSRs controlling user-mode
  functionality for CET (CET_U state)
- State component 12 used for the 3 MSRs containing shadow-stack pointers
  for privilege levels 0-2 (CET_S state).

Reading the CET shadow stack pointer register on linux requires a separate
ptrace call using NT_X86_SHSTK.  To pass the CET shadow stack enablement
state we would like to pass the xstate_bv value instead of xcr0 for target
description creation.  To prepare for that, we rename the xcr0 mask
values for target description creation to xstate_bv.  However, this
patch doesn't add any functional changes in GDB.

Future states specified in IA32_XSS such as CET will create a combined
xstate_bv_mask including xcr0 register value and its corresponding bit in
the state component bitmap.  This combined mask will then be used to create
the target descriptions.

Reviewed-By: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Approved-By: Luis Machado <luis.machado@arm.com>
22 files changed:
gdb/amd64-tdep.c
gdb/amd64-tdep.h
gdb/arch/amd64-linux-tdesc.c
gdb/arch/amd64-linux-tdesc.h
gdb/arch/amd64.c
gdb/arch/amd64.h
gdb/arch/i386-linux-tdesc.c
gdb/arch/i386-linux-tdesc.h
gdb/arch/i386.c
gdb/arch/i386.h
gdb/arch/x86-linux-tdesc-features.c
gdb/arch/x86-linux-tdesc-features.h
gdb/i386-tdep.c
gdb/i386-tdep.h
gdb/nat/x86-linux-tdesc.c
gdb/nat/x86-linux-tdesc.h
gdb/x86-linux-nat.c
gdbserver/i387-fp.cc
gdbserver/linux-amd64-ipa.cc
gdbserver/linux-i386-ipa.cc
gdbserver/linux-x86-low.cc
gdbsupport/x86-xstate.h