[PATCH v5 00/12] Add CET shadow stack support

Christina Schimpe
2025-06-28T08:31:04Z

Hi all,

this is my v5 of the series to add amd64 shadow stack support to GDB on linux.
It addresses the feedback of Luis.

v4 can be found here:
https://sourceware.org/pipermail/gdb-patches/2025-June/218744.html

Changes since v4:
- Improve some comments.
- Change the test in "gdb: amd64 linux coredump support with shadow
stack." to also test core file generated by the linux kernel. This
requires changes for the core_find procedure to save program output,
that have been implemented by Thiago already, so we include this part
of the patch in this series: "gdb, testsuite: Extend core_find procedure
to save program output.". The test is now very similar to the test
implemented for Guarded Control Stack corefiles. Thanks to Thiago for
providing the input here!

I am looking forward to your feedback!

Regards,

Christina

Christina Schimpe (12):
gdb, testsuite: Extend core_find procedure to save program output.
gdbserver: Add optional runtime register set type.
gdbserver: Add assert in x86_linux_read_description.
gdb: Sync up x86-gcc-cpuid.h with cpuid.h from gcc 14 branch.
gdb, gdbserver: Use xstate_bv for target description creation on x86.
gdb, gdbserver: Add support of Intel shadow stack pointer register.
gdb: amd64 linux coredump support with shadow stack.
gdb: Handle shadow stack pointer register unwinding for amd64 linux.
gdb, gdbarch: Enable inferior calls for shadow stack support.
gdb: Implement amd64 linux shadow stack support for inferior calls.
gdb, gdbarch: Introduce gdbarch method to get the shadow stack
pointer.
gdb: Enable displaced stepping with shadow stack on amd64 linux.

gdb/NEWS | 6 +
gdb/amd64-linux-nat.c | 17 ++
gdb/amd64-linux-tdep.c | 218 +++++++++++++++++-
gdb/amd64-tdep.c | 35 ++-
gdb/amd64-tdep.h | 9 +-
gdb/arch-utils.c | 10 +
gdb/arch-utils.h | 5 +
gdb/arch/amd64-linux-tdesc.c | 33 +--
gdb/arch/amd64-linux-tdesc.h | 7 +-
gdb/arch/amd64.c | 25 +-
gdb/arch/amd64.h | 10 +-
gdb/arch/i386-linux-tdesc.c | 29 +--
gdb/arch/i386-linux-tdesc.h | 5 +-
gdb/arch/i386.c | 19 +-
gdb/arch/i386.h | 8 +-
gdb/arch/x86-linux-tdesc-features.c | 60 ++---
gdb/arch/x86-linux-tdesc-features.h | 25 +-
gdb/doc/gdb.texinfo | 42 ++++
gdb/features/Makefile | 2 +
gdb/features/i386/32bit-ssp.c | 14 ++
gdb/features/i386/32bit-ssp.xml | 11 +
gdb/features/i386/64bit-ssp.c | 14 ++
gdb/features/i386/64bit-ssp.xml | 11 +
gdb/gdbarch-gen.c | 54 +++++
gdb/gdbarch-gen.h | 24 ++
gdb/gdbarch_components.py | 31 +++
gdb/i386-tdep.c | 51 +++-
gdb/i386-tdep.h | 11 +-
gdb/infcall.c | 14 +-
gdb/linux-tdep.c | 47 ++++
gdb/linux-tdep.h | 7 +
gdb/nat/x86-gcc-cpuid.h | 153 +++++++++---
gdb/nat/x86-linux-tdesc.c | 20 +-
gdb/nat/x86-linux-tdesc.h | 7 +-
gdb/nat/x86-linux.c | 57 +++++
gdb/nat/x86-linux.h | 4 +
.../gdb.arch/amd64-shadow-stack-cmds.exp | 141 +++++++++++
.../gdb.arch/amd64-shadow-stack-corefile.c | 42 ++++
.../gdb.arch/amd64-shadow-stack-corefile.exp | 110 +++++++++
.../gdb.arch/amd64-shadow-stack-disp-step.exp | 92 ++++++++
gdb/testsuite/gdb.arch/amd64-shadow-stack.c | 35 +++
gdb/testsuite/gdb.arch/amd64-ssp.exp | 50 ++++
.../gdb.base/inline-frame-cycle-unwind.py | 4 +
gdb/testsuite/lib/gdb.exp | 80 ++++++-
gdb/x86-linux-nat.c | 50 +++-
gdb/x86-linux-nat.h | 11 +
gdb/x86-tdep.c | 21 ++
gdb/x86-tdep.h | 9 +
gdbserver/i387-fp.cc | 40 ++--
gdbserver/linux-amd64-ipa.cc | 10 +-
gdbserver/linux-i386-ipa.cc | 6 +-
gdbserver/linux-low.cc | 50 ++--
gdbserver/linux-low.h | 7 +-
gdbserver/linux-x86-low.cc | 44 +++-
gdbsupport/x86-xstate.h | 7 +-
55 files changed, 1687 insertions(+), 217 deletions(-)
create mode 100644 gdb/features/i386/32bit-ssp.c
create mode 100644 gdb/features/i386/32bit-ssp.xml
create mode 100644 gdb/features/i386/64bit-ssp.c
create mode 100644 gdb/features/i386/64bit-ssp.xml
create mode 100644 gdb/testsuite/gdb.arch/amd64-shadow-stack-cmds.exp
create mode 100644 gdb/testsuite/gdb.arch/amd64-shadow-stack-corefile.c
create mode 100644 gdb/testsuite/gdb.arch/amd64-shadow-stack-corefile.exp
create mode 100644 gdb/testsuite/gdb.arch/amd64-shadow-stack-disp-step.exp
create mode 100644 gdb/testsuite/gdb.arch/amd64-shadow-stack.c
create mode 100644 gdb/testsuite/gdb.arch/amd64-ssp.exp

--
2.43.0