Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH v4 00/13] Add new command to print the shadow stack backtrace
@ 2026-07-08 14:36 Christina Schimpe
  2026-07-08 14:36 ` [PATCH v4 01/13] gdb: Generalize handling of the shadow stack pointer Christina Schimpe
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Christina Schimpe @ 2026-07-08 14:36 UTC (permalink / raw)
  To: gdb-patches; +Cc: tom, thiago.bauermann

Hi all,

this is my v4 of the series
"Add new command to print the shadow stack backtrace".

***Diff of v4 to v3***:

- Minor fixup for ARM compilation
- The commit
  "gdb: Provide gdbarch hook to distinguish shadow stack backtrace elements."
  was accidentially merged into the previous one
  ("gdb: Add command option 'bt -shadow' to print the shadow stack backtrace.").
  Isolate it again.

Other than that, I am keeping the full cover letter summarizing the
changes for v3 (diff of v3 to v2). It has not been reviewed yet, since I posted
it just a couple days ago.

***Diff of v3 to v2***:

It now includes:
- the implementation of the -past-main command line option
- support for inferior calls
(printing of <function called from gdb> instead of the shadow stack element)
- full support for signals
(printing of <signal handler called> instead of the shadow stack element)

Due to this some larger refactoring was required; I summarized it here:
https://sourceware.org/pipermail/gdb-patches/2026-May/227481.html

The refactoring mostly affected the following commits:
"gdb: Provide gdbarch hook to distinguish shadow stack backtrace elements."
"gdb: Add command option 'bt -shadow' to print the shadow stack backtrace."
"gdb: Implement the hook 'is_no_return_shadow_stack_address' for amd64 linux."
I did not add any Reviewed-By or Approved-By tags for the 3 commits, since
they changed significantly.

Furthermore, I addressed (hopefully all) the comments of Tom, Thiago and Eli: 
- Remove annotations
- Some better code reuse (especially for the mi patch)
- A new patch "aarch64: Implement gdbarch function top_addr_empty_shadow_stack."
  This also allows to remove some target dependent GCS code in aarch64-*.c
- Various smaller issues and nits
- Fixes for check-gdbarch.py

And finally some smaller issues I noted myself (mostly for patch #1
"gdb: Generalize handling of the shadow stack pointer."):
- Remove unused gdbarch parameter in some of the introduced hooks
- Changes in gdb/aarch64-tdep.c when calling shadow_stack_push, since
some code for getting the shadow stack pointer and checking the enablement
state was duplicated. 

Opens:
1) Thiago suggested changing the frame numbering so that it always starts
at #1, since for the shadow stack we don't have frame #0 printed by the
normal backtrace.
2) Or, consider printing frame #0 similarly to what the normal backtrace does
3) Consider printing frame arguments (but I believe, if possible, this should
better be added in a follow-up series)
4) Show the selected frame, for details see here:
https://sourceware.org/pipermail/gdb-patches/2026-June/227720.html

This is an example for the output of 'bt -shadow' on amd64 linux:
~~~
(gdb) bt -shadow
#0  0x000055555555514a in call1 at amd64-shadow-stack.c:27
#1  0x000055555555515f in main at amd64-shadow-stack.c:38
~~~

Note that the normal backtrace includes one additional frame, since
the shadow stack backtrace relies on return addresses of the shadow
stack only.  But except the missing frame arguments and frame #0 of
the normal backtrace, the backtrace is the same.
~~~
(gdb) bt
#0  call2 () at amd64-shadow-stack.c:21
#1  0x000055555555514a in call1 () at amd64-shadow-stack.c:27
#2  0x000055555555515f in main () at amd64-shadow-stack.c:38
~~~

I am happy about your feedback!

Christina

v3: https://sourceware.org/pipermail/gdb-patches/2026-July/228440.html
v2: https://sourceware.org/pipermail/gdb-patches/2026-January/224388.html
v1: https://sourceware.org/pipermail/gdb-patches/2025-September/221141.html

Christina Schimpe (13):
  gdb: Generalize handling of the shadow stack pointer.
  aarch64: Implement gdbarch function top_addr_empty_shadow_stack.
  gdb: Add get_main_func_start_pc to refactor frame.c:inside_main_func.
  gdb: Refactor 'stack.c:print_frame'.
  gdb: Introduce 'stack.c:print_pc' function without frame argument.
  gdb: Refactor 'find_symbol_funname' and 'info_frame_command_core' in
    stack.c.
  gdb: Refactor 'stack.c:print_frame_info'.
  gdb: Add command option 'bt -shadow' to print the shadow stack
    backtrace.
  gdb: Provide gdbarch hook to distinguish shadow stack backtrace
    elements.
  gdb: Implement the hook 'is_no_return_shadow_stack_address' for amd64
    linux.
  gdb: Enable inferior calls in the shadow stack backtrace.
  gdb: Enable signal trampolines in the shadow stack backtrace.
  gdb, mi: Add -shadow-stack-list-frames command

 gdb/Makefile.in                               |   2 +
 gdb/NEWS                                      |  11 +
 gdb/aarch64-linux-tdep.c                      |  51 +-
 gdb/aarch64-tdep.c                            |  66 +-
 gdb/amd64-linux-tdep.c                        | 211 ++---
 gdb/amd64-tdep.c                              |  22 +
 gdb/doc/gdb.texinfo                           |  95 +++
 gdb/frame.c                                   |  37 +-
 gdb/frame.h                                   |   6 +
 gdb/gdbarch-gen.c                             | 190 ++++-
 gdb/gdbarch-gen.h                             |  95 ++-
 gdb/gdbarch.h                                 |   1 +
 gdb/gdbarch_components.py                     | 124 ++-
 gdb/infcall.c                                 |   4 +-
 gdb/linux-tdep.c                              |   9 +-
 gdb/mi/mi-cmd-stack.c                         | 100 +++
 gdb/mi/mi-cmds.c                              |   2 +
 gdb/mi/mi-cmds.h                              |   1 +
 gdb/shadow-stack.c                            | 769 ++++++++++++++++++
 gdb/shadow-stack.h                            | 182 +++++
 gdb/stack.c                                   | 319 +++++---
 gdb/stack.h                                   |  43 +
 .../amd64-shadow-stack-backtrace-signal.exp   |  49 ++
 .../gdb.arch/amd64-shadow-stack-cmds.exp      |  71 ++
 .../gdb.arch/amd64-shadow-stack-signal.c      |  31 +
 gdb/testsuite/gdb.base/options.exp            |   2 +-
 .../gdb.mi/mi-shadow-stack-signal.exp         |  69 ++
 gdb/testsuite/gdb.mi/mi-shadow-stack.exp      |  93 +++
 28 files changed, 2247 insertions(+), 408 deletions(-)
 create mode 100644 gdb/shadow-stack.c
 create mode 100644 gdb/shadow-stack.h
 create mode 100644 gdb/testsuite/gdb.arch/amd64-shadow-stack-backtrace-signal.exp
 create mode 100644 gdb/testsuite/gdb.arch/amd64-shadow-stack-signal.c
 create mode 100644 gdb/testsuite/gdb.mi/mi-shadow-stack-signal.exp
 create mode 100644 gdb/testsuite/gdb.mi/mi-shadow-stack.exp

-- 
2.34.1

Intel Deutschland GmbH

Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany
Tel: +49 89 991 430, www.intel.de
Managing Directors: Harry Demas, Jeffrey Schneiderman, Yin Chong Sorrell
Chairperson of the Supervisory Board: Nicole Lau
Registered Seat: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2026-07-08 14:40 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-08 14:36 [PATCH v4 00/13] Add new command to print the shadow stack backtrace Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 01/13] gdb: Generalize handling of the shadow stack pointer Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 02/13] aarch64: Implement gdbarch function top_addr_empty_shadow_stack Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 03/13] gdb: Add get_main_func_start_pc to refactor frame.c:inside_main_func Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 04/13] gdb: Refactor 'stack.c:print_frame' Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 05/13] gdb: Introduce 'stack.c:print_pc' function without frame argument Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 06/13] gdb: Refactor 'find_symbol_funname' and 'info_frame_command_core' in stack.c Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 07/13] gdb: Refactor 'stack.c:print_frame_info' Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 08/13] gdb: Add command option 'bt -shadow' to print the shadow stack backtrace Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 09/13] gdb: Provide gdbarch hook to distinguish shadow stack backtrace elements Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 10/13] gdb: Implement the hook 'is_no_return_shadow_stack_address' for amd64 linux Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 11/13] gdb: Enable inferior calls in the shadow stack backtrace Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 12/13] gdb: Enable signal trampolines " Christina Schimpe
2026-07-08 14:36 ` [PATCH v4 13/13] gdb, mi: Add -shadow-stack-list-frames command Christina Schimpe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox