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: Tom Tromey <tom@tromey.com>,
	 "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [PATCH v2 0/9] Add new command to print the shadow stack backtrace
Date: Wed, 20 May 2026 23:23:44 -0300	[thread overview]
Message-ID: <874ik11owf.fsf@linaro.org> (raw)
In-Reply-To: <SN7PR11MB763810682445985224C69D63F9032@SN7PR11MB7638.namprd11.prod.outlook.com> (Christina Schimpe's message of "Mon, 18 May 2026 08:39:34 +0000")

Hello Christina,

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

> Hi Tom and Thiago, 
>
> First, thanks a lot for your review efforts on this series so far!

Thanks for moving this forward!

> As indicated in the cover letter of v2, I would like to post v3, including the -past-main option.

Great!

> Enabling this made me realize that I need some refactoring of the commits:
> - "gdb: Add command option 'bt -shadow' to print the shadow stack backtrace."
> - "gdb: Provide gdbarch hook to distinguish shadow stack backtrace elements."
>
> I have mixed feelings about this. On the one hand, the patches have already been very well
> reviewed (thanks again!) and the refactoring means that new review effort is required. But
> on the other hand, I think these changes improve the series overall. Below, I briefly describe
> the main changes to those commits. If this approach makes sense to you, I will post v3
> shortly after.

I think it makes sense to do the refactoring. Changing approaches as the
patch series evolve is part of the process.

> To avoid increasing your review effort, I also considered adding these changes as new
> patches on top. However, it is probably cleaner to merge them into the existing commits.
> Another option is that I post the V3 including fixups on top (and merge in a v4) to make
> the review easier for you. Or, we could also consider merging the series (once fully approved)
> without -past-main and I could submit a follow-up series for that feature. If you have any
> preference, I'm happy about your feedback.

Thank you for your concern in this regard. Of course I can't speak for
Tom but IMHO you can merge the changes into the existing commits.

I use git range-diff between versions to see what changed within each
patch, which provides similar output to the fixups approach.

> My main changes to enable -past-main are:

The changes below look good to me.

> 1) A new commit (required before "gdb: Add command option 'bt -shadow' to print the shadow stack backtrace."): 
>
>     gdb: Add get_main_func_start_pc to refactor frame.c:inside_main_func.
>
>     Refactor frame.c:inside_main_func to use the new function
>     get_main_func_start_pc, which will be used in a following commit.
>
> 2) Refactoring of "gdb: Add command option 'bt -shadow' to print the shadow stack backtrace." :
>
>     To enable the -past-main option in the shadow stack backtrace the function
>     get_main_func_start_pc (gdbarch* gdbarch, const language lang) is called by a
>     new function shadow_stack_frame_info::inside_main_func.  This probably requires
>     a frame specific gdbarch and language in the struct shadow_stack_frame_info.
>     I am not sure the gdbarch or language ever changes for IA, but it might be a good
>     idea to add it to be safe.

I agree that it's a good idea to add them.

>     So, due to that we need some refactoring of the shadow
>     stack backtrace implementation:
>     a. The frame specific arch is extracted based on the symtab_and_line (SAL)
>        object.  To avoid that we extract the SAL and gdbarch multiple times for
>        the same frame we store it in the shadow stack frame.
>     b. The gdbarch hook get_shadow_stack_size is obsolete since the function
>        get_trailing_outermost_shadow_stack_frame_info now unwinds each frame.  This
>        helps to configure the previous frame attributes in case the gdbarch or SAL
>        information cannot be extracted for special shadow stack elements.  We don't need
>        the COUNT parameter anymore in the function update_shadow_stack_pointer, too.
>        Now, this is also inline with the function trailing_outermost_frame which is used
>        for the normal backtrace.
>     c. Introduce function get_shadow_stack_frame_info to share some more logic:
>     ~~~
>     /* If possible, get shadow stack frame info for the shadow stack pointer
>        SSP and its current frame LEVEL.  Pass a fallback gdbarch FALLBACK_ARCH
>        which can be used as fallback in case the gdbarch cannot be extracted
>        from the SAL.  Usually this is the gdbarch of the previous frame.  */
>
>     static std::optional<shadow_stack_frame_info>
>     get_shadow_stack_frame_info
>       (gdbarch *fallback_arch, const CORE_ADDR ssp, ULONGEST level)
>     ~~~
>
> 3) Refactoring of "gdb: Provide gdbarch hook to distinguish shadow stack backtrace elements.
>
>     a. Like normal frames used in the ordinary backtrace command, introduce an enum
>        ssp_frame_type (normal_frame, non_return_frame) which classifies each frame and is
>        an attribute of the shadow stack frame info.  Calling of inside_main_func () to check
>        if we should stop unwinding is only done for normal frames.  For the currently known
>        cases of non-return-address shadow stack elements, the value is not a PC of the program
>        and the past-main check is not applicable.
>        More frame types will be added in the following patches to enable sigtramp and inferior
>        call frames.
>     b. The gdbarch hook is_no_return_shadow_stack_address now returns the complete shadow stack
>        frame (classified as non_return_frame) in case the element on the shadow stack is not a return
>        address (instead of the optional return address description string used before). The target can
>        then assign the correct gdbarch and an optional SAL object. Due to that hook is no longer called 
>        when printing the frame, but already when constructing it in get_shadow_stack_frame_info and
>        we don't pass the shadow stack frame as argument anymore, but the shadow stack pointer, its
>        value and level.
>
>        The new interface looks as follows:
>     ~~~
>     Method(
>         comment="""
>     There can be elements on the shadow stack which are not return addresses.
>     This happens for example on x86 with CET in case of signals.
>     If an architecture implements the command options 'backtrace -shadow' and

s/options/option/

>     the shadow stack can contain elements which are not return addresses, this
>     function has to be provided.
>     Return a shadow stack frame info with frame type
>     ssp_frame_type::non_return_frame, if the shadow stack pointer SSP belongs
>     to a valid shadow stack frame while the element on the shadow stack
>     VALUE does not refer to a return address.  In that case, also the frame's
>     attribute non_return_description must be set to a string which is displayed
>     instead of the element on the shadow stack in the shadow stack backtrace.
>     Otherwise, return an empty optional.
>     """,
>         type="std::optional<shadow_stack_frame_info>",
>         name="is_no_return_shadow_stack_address",
>         params=[
>           ("const CORE_ADDR", "ssp"),
>           ("const CORE_ADDR", "value"),
>           ("const unsigned long", "level")
>         ],
>         predicate=True,
>     )
>     ~~~
>     c. The shadow stack frame contains a new string attribute "non_return_description"
>         which is printed instead of the element on the shadow stack in case the frame is
>         classified as non-return address frame.  It is empty in case the frame is not a
>        " ssp_frame_type::non_return_frame" frame.  We could also use an optional here,
>        I am not sure what is preferred.

I'm not sure either, but I have a slight preference for an optional.

> This is now the class for a shadow stack frame:
>
> /* Information of a shadow stack frame belonging to a shadow stack element
>    at shadow stack pointer SSP.  */
>
> class shadow_stack_frame_info
> {

Looks good to me.

-- 
Thiago
(he/him)

      reply	other threads:[~2026-05-21  2:24 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-23  8:05 Christina Schimpe
2026-01-23  8:05 ` [PATCH v2 1/9] gdb: Generalize handling of the shadow stack pointer Christina Schimpe
2026-02-19 17:55   ` Tom Tromey
2026-02-27 18:09     ` Schimpe, Christina
2026-02-27 18:26       ` Tom Tromey
2026-03-02 11:53         ` Schimpe, Christina
2026-04-09  9:49           ` Schimpe, Christina
2026-04-14 17:34             ` Tom Tromey
2026-04-15  7:35               ` Schimpe, Christina
2026-04-15 15:54                 ` Tom Tromey
2026-02-27 22:54       ` Thiago Jung Bauermann
2026-03-06  3:15   ` Thiago Jung Bauermann
2026-03-06  3:57     ` Thiago Jung Bauermann
2026-04-09 11:57       ` Schimpe, Christina
2026-04-10  5:03         ` Thiago Jung Bauermann
2026-04-10  7:53           ` Schimpe, Christina
2026-04-09 12:06   ` Schimpe, Christina
2026-04-10  5:05     ` Thiago Jung Bauermann
2026-01-23  8:05 ` [PATCH v2 2/9] gdb: Refactor 'stack.c:print_frame' Christina Schimpe
2026-01-23  8:05 ` [PATCH v2 3/9] gdb: Introduce 'stack.c:print_pc' function without frame argument Christina Schimpe
2026-01-23  8:05 ` [PATCH v2 4/9] gdb: Refactor 'find_symbol_funname' and 'info_frame_command_core' in stack.c Christina Schimpe
2026-02-19 17:32   ` Tom Tromey
2026-04-09 12:40     ` Schimpe, Christina
2026-01-23  8:05 ` [PATCH v2 5/9] gdb: Refactor 'stack.c:print_frame_info' Christina Schimpe
2026-01-23  8:05 ` [PATCH v2 6/9] gdb: Add command option 'bt -shadow' to print the shadow stack backtrace Christina Schimpe
2026-01-23  8:52   ` Eli Zaretskii
2026-02-13 16:42     ` Schimpe, Christina
2026-04-14  8:43       ` Schimpe, Christina
2026-04-14 11:53         ` Eli Zaretskii
2026-04-14 13:28           ` Schimpe, Christina
2026-04-14 14:12             ` Eli Zaretskii
2026-04-14 15:05               ` Schimpe, Christina
2026-02-19 18:19   ` Tom Tromey
2026-04-09 16:48     ` Schimpe, Christina
2026-03-06  4:31   ` Thiago Jung Bauermann
2026-03-06  9:39     ` Schimpe, Christina
2026-04-09 15:12     ` Schimpe, Christina
2026-04-10  6:21       ` Thiago Jung Bauermann
2026-04-10 12:12         ` Schimpe, Christina
2026-05-12  3:32   ` Thiago Jung Bauermann
2026-05-18 10:06     ` Schimpe, Christina
2026-01-23  8:05 ` [PATCH v2 7/9] gdb: Provide gdbarch hook to distinguish shadow stack backtrace elements Christina Schimpe
2026-01-23  8:47   ` Eli Zaretskii
2026-02-19 17:41   ` Tom Tromey
2026-05-12  3:49   ` Thiago Jung Bauermann
2026-05-18 10:11     ` Schimpe, Christina
2026-01-23  8:05 ` [PATCH v2 8/9] gdb: Implement the hook 'is_no_return_shadow_stack_address' for amd64 linux Christina Schimpe
2026-02-19 17:43   ` Tom Tromey
2026-05-12  3:58   ` Thiago Jung Bauermann
2026-05-18 10:13     ` Schimpe, Christina
2026-01-23  8:05 ` [PATCH v2 9/9] gdb, mi: Add -shadow-stack-list-frames command Christina Schimpe
2026-01-23  8:46   ` Eli Zaretskii
2026-02-13 19:17     ` Schimpe, Christina
2026-02-19 18:26   ` Tom Tromey
2026-04-22 19:25     ` Schimpe, Christina
2026-03-02 12:39 ` [PATCH v2 0/9] Add new command to print the shadow stack backtrace Schimpe, Christina
2026-05-07  4:14 ` Thiago Jung Bauermann
2026-05-07  5:09   ` Thiago Jung Bauermann
2026-05-18 10:08     ` Schimpe, Christina
2026-05-18 10:10   ` Schimpe, Christina
2026-05-21  2:57     ` Thiago Jung Bauermann
2026-05-18  8:39 ` Schimpe, Christina
2026-05-21  2:23   ` Thiago Jung Bauermann [this message]

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=874ik11owf.fsf@linaro.org \
    --to=thiago.bauermann@linaro.org \
    --cc=christina.schimpe@intel.com \
    --cc=gdb-patches@sourceware.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