Re: [PATCH] GDB: aarch64: Fix inferior function call if GCS is present but disabled
Luis <[email protected]>
| Newsgroups | gmane.comp.gdb.patches |
|---|---|
| Message-ID | <[email protected]> |
Hi Thiago. Thanks for the patch.
On 08/07/2026 07:03, Thiago Jung Bauermann wrote:
> On AArch64, even if the Guarded Control Stack feature is present on the
> system the inferior may not have enabled it.
>
> There's a bug in GDB's GCS support in that if the system supports GCS,
> GDB will always push a GCS entry when doing an inferior function call
> even if the inferior doesn't have it enabled. This causes inferior
> function calls to fail. E.g.:
>
> (gdb) p foo ()
> Can't write to Guarded Control Stack.
>
> The error message is because the GCSPR doesn't point to a valid memory
> address.
>
> Fix by checking whether GCS is enabled in the inferior before trying to
> push a GCS entry.
>
> Regression tested on an aarch64-linux-gnu QEMU VM with GCS present.
> ---
>
> GCS support first appeared in GDB 17, so if this patch is approved for
> trunk is it ok to also commit it to the branch?
Sounds good to me.
>
> gdb/aarch64-tdep.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
> index 886e7ce1e7b6..b4437dcccc8a 100644
> --- a/gdb/aarch64-tdep.c
> +++ b/gdb/aarch64-tdep.c
> @@ -1934,7 +1934,11 @@ static void
> aarch64_shadow_stack_push (gdbarch *gdbarch, CORE_ADDR new_addr,
> regcache *regcache)
> {
> - aarch64_push_gcs_entry (regcache, new_addr);
> + bool gcs_is_enabled;
> +
> + gdbarch_get_shadow_stack_pointer (gdbarch, regcache, gcs_is_enabled);
> + if (gcs_is_enabled)
> + aarch64_push_gcs_entry (regcache, new_addr);
> }
>
> /* Implement the "push_dummy_call" gdbarch method. */
LGTM, with Baris' suggestion.
Approved-By: Luis Machado <[email protected]>