From: "Schimpe, Christina" <christina.schimpe@intel.com>
To: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Cc: "'gdb-patches@sourceware.org'" <gdb-patches@sourceware.org>
Subject: RE: [PATCH 0/9] Add new command to print the shadow stack backtrace
Date: Tue, 30 Dec 2025 10:16:54 +0000 [thread overview]
Message-ID: <SN7PR11MB7638164AB063160448A87027F9BCA@SN7PR11MB7638.namprd11.prod.outlook.com> (raw)
In-Reply-To: <87ikfvyk1e.fsf@linaro.org>
Hi Thiago,
apologies for the delayed feedback. Please find my comments below.
> -----Original Message-----
> From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
> Sent: Freitag, 31. Oktober 2025 01:47
> To: Schimpe, Christina <christina.schimpe@intel.com>
> Cc: 'gdb-patches@sourceware.org' <gdb-patches@sourceware.org>
> Subject: Re: [PATCH 0/9] Add new command to print the shadow stack
> backtrace
>
> Hello Christina,
>
> "Schimpe, Christina" <christina.schimpe@intel.com> writes:
>
> >> -----Original Message-----
> >> From: Schimpe, Christina
> >> Sent: Monday, October 13, 2025 8:35 AM
> >> To: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
> >> Cc: gdb-patches@sourceware.org
> >> Subject: RE: [PATCH 0/9] Add new command to print the shadow stack
> >> backtrace
> >>
> >> > -----Original Message-----
> >> > From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
> >> > Sent: Monday, October 13, 2025 3:19 AM
> >> > To: Schimpe, Christina <christina.schimpe@intel.com>
> >> > Cc: gdb-patches@sourceware.org
> >> > Subject: Re: [PATCH 0/9] Add new command to print the shadow stack
> >> > backtrace
> >> >
> >> > Thiago Jung Bauermann <thiago.bauermann@linaro.org> writes:
> >> >
> >> > > I tested your patches and there's a bug unfortunately:
> ⋮
> >> > The problem turned out to be simple. I just had to set the regnum
> >> > for the GCSPR in the gdbarch:
> >> >
> >> > diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index
> >> > 95af82c26327..9e866fc319d4 100644
> >> > --- a/gdb/aarch64-tdep.c
> >> > +++ b/gdb/aarch64-tdep.c
> >> > @@ -4780,6 +4780,10 @@ aarch64_gdbarch_init (struct gdbarch_info
> >> info,
> >> > struct gdbarch_list *arches)
> >> > /* Register a hook for converting a memory tag to a string. */
> >> > set_gdbarch_memtag_to_string (gdbarch,
> >> > aarch64_memtag_to_string);
> >> >
> >> > + if (tdep->has_gcs ())
> >> > + /* AArch64's shadow stack pointer is the GCSPR. */
> >> > + set_gdbarch_ssp_regnum (gdbarch, tdep->gcs_reg_base);
> >> > +
> >> > /* ABI */
> >> > set_gdbarch_short_bit (gdbarch, 16);
> >> > set_gdbarch_int_bit (gdbarch, 32);
> >>
> >> Ah, I forgot about that. Cool that it works now. 😊
> >
> > I thought about this again. In addition to setting the regnum for the
> > shadow stack pointer, I would have expected that you also have to
> > implement the gdbarch hook top_addr_empty_shadow_stack to make GCS
> > work for shadow stack pointer unwinding and the shadow stack backtrace, or
> am I missing something?
>
> Ah, I have a comment about this on my review of patch 1 that is sitting in my
> drafts folder. I was waiting to send them all together, but it's been taking me
> longer than I expected. I will just send what I have so far.
>
> But essentially, if there's no gdbarch_top_addr_empty_shadow_stack hook this
> patch series changes the check of whether ssp is empty from a <= comparison
> with the end of the range to a < comparison. Because of this,
> AArch64 doesn't need to implement the hook to make the existing aarch64-
> gcs*.exp tests work. It still needs it to make the "bt shadow"
> command work though.
I'll comment in the corresponding patch. Thanks a lot for catching that!
As you already commented, the hook is required for amd64.
> > Both, the aarch64 implememtation for top_addr_empty_shadow_stack and
> > ssp regnum configuration, should then be part the first patch "Generalize
> handling ...".
> > Does that make sense to you?
>
> Yes, patch 1 should include the changes needed to make the existing aarch64-
> gcs*.exp tests passing. As of v1, that's just the ssp regnum configuration.
> Depending on what you decide to do for v2, that could include the
> top_addr_empty_shadow_stack hook as well.
>
> > Also I should probably add proper error messages when the
> > configuration of ssp_regnum is missing,
>
> Is that possible? How would GDB distinguish between missing ssp regnum
> configuration versus the target not supporting shadow stacks?
I would add it to the error message that already exists for the absence of the hook
gdbarch_address_in_shadow_stack_memory_range:
--- a/gdb/shadow-stack.c
+++ b/gdb/shadow-stack.c
@@ -537,7 +537,8 @@ backtrace_shadow_command (const shadow_stack_print_options &print_options,
error (_("No shadow stack."));
gdbarch *gdbarch = get_current_arch ();
- if (!gdbarch_address_in_shadow_stack_memory_range_p (gdbarch))
+ if (!gdbarch_address_in_shadow_stack_memory_range_p (gdbarch)
+ || gdbarch_ssp_regnum (gdbarch) == -1)
error (_("Printing of the shadow stack backtrace is not supported for"
" the current target."))
So the error message could mean both, either missing ssp regnum or the target
not supporting shadow stack. Later in that function we check if the shadow stack
is enabled for the current target.
Does that sound ok?
> > and improve the documentation for required gdbarch hooks to properly
> > implement "bt shadow" in gdbarch_components.py.
>
> --
> Thiago
Christina
Intel Deutschland GmbH
Registered Address: Dornacher Straße 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 München HRB 186928
next prev parent reply other threads:[~2025-12-30 10:17 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-23 11:18 Christina Schimpe
2025-09-23 11:18 ` [PATCH 1/9] gdb: Generalize handling of the shadow stack pointer Christina Schimpe
2025-10-31 1:31 ` Thiago Jung Bauermann
2025-11-17 11:18 ` Schimpe, Christina
2025-11-26 4:19 ` Thiago Jung Bauermann
2025-12-30 10:39 ` Schimpe, Christina
2025-09-23 11:18 ` [PATCH 2/9] gdb: Refactor 'stack.c:print_frame' Christina Schimpe
2025-10-03 20:05 ` Tom Tromey
2025-09-23 11:18 ` [PATCH 3/9] gdb: Introduce 'stack.c:print_pc' function without frame argument Christina Schimpe
2025-10-03 19:56 ` Tom Tromey
2025-09-23 11:18 ` [PATCH 4/9] gdb: Refactor 'find_symbol_funname' and 'info_frame_command_core' in stack.c Christina Schimpe
2025-10-03 19:55 ` Tom Tromey
2025-09-23 11:18 ` [PATCH 5/9] gdb: Refactor 'stack.c:print_frame_info' Christina Schimpe
2025-10-03 20:03 ` Tom Tromey
2025-09-23 11:18 ` [PATCH 6/9] gdb: Implement 'bt shadow' to print the shadow stack backtrace Christina Schimpe
2025-09-23 11:47 ` Eli Zaretskii
2025-09-25 11:06 ` Schimpe, Christina
2025-09-25 13:19 ` Eli Zaretskii
2025-09-25 14:58 ` Simon Marchi
2025-09-26 7:45 ` Schimpe, Christina
2025-10-29 15:05 ` Schimpe, Christina
2025-10-29 15:28 ` Guinevere Larsen
2025-11-03 19:47 ` Schimpe, Christina
2025-11-04 11:53 ` Guinevere Larsen
2025-11-05 16:33 ` Schimpe, Christina
2025-10-13 1:17 ` Thiago Jung Bauermann
2025-10-13 7:19 ` Schimpe, Christina
2025-10-31 4:39 ` Thiago Jung Bauermann
2025-11-06 14:23 ` Schimpe, Christina
2025-10-03 20:15 ` Tom Tromey
2025-10-12 19:45 ` Schimpe, Christina
2026-02-19 17:24 ` Tom Tromey
2026-03-02 12:24 ` Schimpe, Christina
2025-10-31 4:02 ` Thiago Jung Bauermann
2025-11-17 20:14 ` Schimpe, Christina
2025-11-26 4:07 ` Thiago Jung Bauermann
2025-11-26 16:29 ` Thiago Jung Bauermann
2026-01-22 17:04 ` Schimpe, Christina
2026-03-06 2:35 ` Thiago Jung Bauermann
2026-01-15 14:05 ` Schimpe, Christina
2025-09-23 11:18 ` [PATCH 7/9] gdb: Provide gdbarch hook to distinguish shadow stack backtrace elements Christina Schimpe
2025-09-23 11:49 ` Eli Zaretskii
2025-09-25 11:10 ` Schimpe, Christina
2025-11-02 21:20 ` Thiago Jung Bauermann
2025-11-12 17:28 ` Schimpe, Christina
2025-11-16 18:39 ` Thiago Jung Bauermann
2025-11-17 11:51 ` Schimpe, Christina
2025-09-23 11:18 ` [PATCH 8/9] gdb: Implement the hook 'is_no_return_shadow_stack_address' for amd64 linux Christina Schimpe
2025-11-26 4:22 ` Thiago Jung Bauermann
2025-09-23 11:18 ` [PATCH 9/9] gdb, mi: Add -shadow-stack-list-frames command Christina Schimpe
2025-09-23 11:53 ` Eli Zaretskii
2025-09-25 11:32 ` Schimpe, Christina
2025-10-03 20:17 ` Tom Tromey
2025-10-12 19:54 ` Schimpe, Christina
2025-10-13 0:06 ` Thiago Jung Bauermann
2025-11-26 4:26 ` Thiago Jung Bauermann
2026-01-22 17:01 ` Schimpe, Christina
2026-03-06 2:44 ` Thiago Jung Bauermann
2025-09-25 11:46 ` [PATCH 0/9] Add new command to print the shadow stack backtrace Schimpe, Christina
2025-10-08 1:46 ` Thiago Jung Bauermann
2025-10-13 1:18 ` Thiago Jung Bauermann
2025-10-13 6:34 ` Schimpe, Christina
2025-10-29 14:52 ` Schimpe, Christina
2025-10-31 0:47 ` Thiago Jung Bauermann
2025-12-30 10:16 ` Schimpe, Christina [this message]
2026-03-06 2:30 ` Thiago Jung Bauermann
2026-03-12 9:53 ` Schimpe, Christina
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=SN7PR11MB7638164AB063160448A87027F9BCA@SN7PR11MB7638.namprd11.prod.outlook.com \
--to=christina.schimpe@intel.com \
--cc=gdb-patches@sourceware.org \
--cc=thiago.bauermann@linaro.org \
/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