Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
To: "Schimpe, Christina" <christina.schimpe@intel.com>
Cc: Eli Zaretskii <eliz@gnu.org>,
	 "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [PATCH 6/9] gdb: Implement 'bt shadow' to print the shadow stack backtrace.
Date: Fri, 31 Oct 2025 01:39:50 -0300	[thread overview]
Message-ID: <87pla3r8fd.fsf@linaro.org> (raw)
In-Reply-To: <SN7PR11MB763892F5C2683BC5026EFC6CF9EAA@SN7PR11MB7638.namprd11.prod.outlook.com> (Christina Schimpe's message of "Mon, 13 Oct 2025 07:19:04 +0000")

"Schimpe, Christina" <christina.schimpe@intel.com> writes:

>> -----Original Message-----
>> From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
>> Sent: Monday, October 13, 2025 3:17 AM
>> To: Schimpe, Christina <christina.schimpe@intel.com>
>> Cc: Eli Zaretskii <eliz@gnu.org>; gdb-patches@sourceware.org
>> Subject: Re: [PATCH 6/9] gdb: Implement 'bt shadow' to print the shadow
>> stack backtrace.
>> 
>> Hello,
>> 
>> "Schimpe, Christina" <christina.schimpe@intel.com> writes:
>> 
>> >> -----Original Message-----
>> >> From: Eli Zaretskii <eliz@gnu.org>
>> >> Sent: Tuesday, September 23, 2025 1:47 PM
>> >> To: Schimpe, Christina <christina.schimpe@intel.com>
>> >> Cc: gdb-patches@sourceware.org
>> >> Subject: Re: [PATCH 6/9] gdb: Implement 'bt shadow' to print the
>> >> shadow stack backtrace.
>> >>
>> >> > From: Christina Schimpe <christina.schimpe@intel.com>
>> >> > Date: Tue, 23 Sep 2025 11:18:39 +0000
>> >> >
>> >> > Add a subcommand 'bt shadow' for the ordinary backtrace command
>> >> > which prints the shadow stack backtrace.
>> >> > Similar to the ordinary backtrace command 'bt shadow' can be
>> >> > configured using COUNT and the command line option -frame-info.
>> >> > However, we always print the address and the command is not
>> >> > affected by the setting "print address" as well as the setting
>> >> > "print frame-info
>> >> location-and-address".
>> >> > Also we do not print the frame arguments.
>> >> >
>> >> > Usage: backtrace|bt shadow [OPTION]... [COUNT | -COUNT]
>> >> >
>> >> > Help output:
>> >> > ~~
>> >> > (gdb) help bt shadow
>> >> > Print backtrace of all shadow stack frames, or innermost COUNT frames.
>> >> > Usage: backtrace shadow [OPTION]... [COUNT | -COUNT]
>> >>
>> >> We have just got rid of qualifier arguments like "full"
>> >> and "hide".  Instead of introducing qualifier arguments anew, why not
>> >> go the way of thread-related commands and add a new command
>> "shadow",
>> >> so the user could say "shadow backtrace" and maybe in the future also
>> >> other sub- commands?
>> >
>> > This has been discussed in a thread years ago:
>> > https://sourceware.org/pipermail/gdb/2023-December/051024.html
>> > The direction was to make it part of the ordinary bt command.

I think Eli has a good point here, about "bt shadow" going in the
opposite direction of the tendency in the backtrace command of moving
away from subcommands. From its help entry:

(gdb) help backtrace
        ⋮
For backward compatibility, the following qualifiers are supported:

   full       - same as -full option.
   no-filters - same as -no-filters option.
   hide       - same as -hide.

One way to address that is what Eli suggested, but another is to go with
a "-shadow" option.

>> > Currently, we don't plan any further commands for the shadow stack.
>> > But maybe for ARM's Guarded Control Stack any further options are
>> planned?
>> > I added Thiago in cc here. Maybe he has some more input.
>> 
>> Yes, I plan to add two commands for AArch64 Guarded Control Stack, as
>> mentioned in that thread:
>> 
>> https://inbox.sourceware.org/gdb/87h6kbfazh.fsf@linaro.org/
>> 
>> In that email, I suggested putting them under "info shadow-stack", but later
>> the people in the thread considered that just adding a top-level "shadow-
>> stack" command would be better.
>> 
>> I do think that "backtrace -shadow" is a good option, so IMO we could have
>> both it and the "shadow-stack" umbrella command. It could even have
>> "shadow-stack backtrace" as an alias to "backtrace -shadow" to improve
>> discoverability.
>
> I have nothing against that I think, are there similar commands in GDB that have such an alias feature?

There are some tui subcommands that have toplevel aliases, such as
"refresh" → "tui refresh", and "winheight" → "tui winheight".

>> You mentioned that x86 doesn't need the "enabled" and "locked" commands
>> because for that architecture the user can look in /proc/$PID/status, but with
>> those commands I also plan to allow the user to change the enabled and
>> locked GCS features. Wouldn't that be useful for x86?
>
> For x86 the user can configure the shadow stack enabled and locked state via arch_prctls:
> https://docs.kernel.org/next/x86/shstk.html
>
> Is that possible for GCS, too?
> I am not sure if we can easily change it using GDB. We currently only read/write the
> shadow stack pointer via ptrace.
>
> But it is possible to see those states by running "info proc status" in gdb:
> [...]
> x86_Thread_features:	shstk 
> x86_Thread_features_locked:	shstk wrss
>
> So I'd say we don't really need it, but it might be useful to improve discoverability, too.

I did a quick experiment making an inferior function call to
prctl (75, 0) from GDB but that didn't disable GCS in the inferior. I'll
try again tomorrow.

But even if it worked, IMO it's a cumbersome way of getting/setting this information.
Also, AArch64 doesn't have this information in "info proc status".

-- 
Thiago

  reply	other threads:[~2025-10-31  4:40 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-23 11:18 [PATCH 0/9] Add new command " 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 [this message]
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
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=87pla3r8fd.fsf@linaro.org \
    --to=thiago.bauermann@linaro.org \
    --cc=christina.schimpe@intel.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.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