Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Christina Schimpe <christina.schimpe@intel.com>
To: gdb-patches@sourceware.org
Cc: tom@tromey.com, thiago.bauermann@linaro.org
Subject: [PATCH v3 00/12] Add new command to print the shadow stack backtrace
Date: Mon,  6 Jul 2026 12:31:21 +0000	[thread overview]
Message-ID: <20260706123133.1990441-1-christina.schimpe@intel.com> (raw)

Hi all,

this is my v3 for the series
"Add new command to print the shadow stack backtrace".

v2 of this series can be found here:
https://sourceware.org/pipermail/gdb-patches/2026-January/224388.html

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

Christina Schimpe (12):
  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: 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                           |  94 +++
 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, 2246 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


             reply	other threads:[~2026-07-06 12:32 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-06 12:31 Christina Schimpe [this message]
2026-07-06 12:31 ` [PATCH v3 01/12] gdb: Generalize handling of the shadow stack pointer Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 02/12] aarch64: Implement gdbarch function top_addr_empty_shadow_stack Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 03/12] gdb: Add get_main_func_start_pc to refactor frame.c:inside_main_func Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 04/12] gdb: Refactor 'stack.c:print_frame' Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 05/12] gdb: Introduce 'stack.c:print_pc' function without frame argument Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 06/12] gdb: Refactor 'find_symbol_funname' and 'info_frame_command_core' in stack.c Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 07/12] gdb: Refactor 'stack.c:print_frame_info' Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 08/12] gdb: Add command option 'bt -shadow' to print the shadow stack backtrace Christina Schimpe
2026-07-08  9:13   ` Schimpe, Christina
2026-07-06 12:31 ` [PATCH v3 09/12] gdb: Implement the hook 'is_no_return_shadow_stack_address' for amd64 linux Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 10/12] gdb: Enable inferior calls in the shadow stack backtrace Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 11/12] gdb: Enable signal trampolines " Christina Schimpe
2026-07-06 12:31 ` [PATCH v3 12/12] gdb, mi: Add -shadow-stack-list-frames command Christina Schimpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260706123133.1990441-1-christina.schimpe@intel.com \
    --to=christina.schimpe@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=thiago.bauermann@linaro.org \
    --cc=tom@tromey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox