[PATCH] aarch64: Fix _dl_tlsdesc_dynamic unwind for pac-ret (BZ 32612)

Yury Khrustalev yury.khrustalev@arm.com
Mon Mar 31 11:05:05 GMT 2025


Hi Adhemerval,

On Fri, Mar 28, 2025 at 04:05:15PM -0300, Adhemerval Zanella wrote:
> When libgcc is built with pac-ret, it requires to autenticate the
> unwinding frame based on CFI information.  The _dl_tlsdesc_dynamic
> uses a custom calling convention, where it is responsible to save
> and restore all registers it might use (even volatile).
> 
> The pac-ret support added by 1be3d6eb823d8b952fa54b7bbc90cbecb8981380
> was added only on the slow-path, but the fast path also adds DWARF
> Register Rule Instruction (cfi_adjust_cfa_offset) since it requires
> to save/restore some auxiliary register.  It seems that this is not
> fully supported neither by libgcc nor AArch64 ABI [1].
> 
> Instead, move paciasp/autiasp to function prologue/epilogue to be
> used on both fast and slow paths.
> 
> I also corrected the _dl_tlsdesc_dynamic comment description, it was
> copied from i386 implementation without any adjustment.
> 
> Checked on aarch64-linux-gnu with a toolchain built with
> --enable-standard-branch-protection on a system with pac-ret
> support.
> 
> [1]  https://github.com/ARM-software/abi-aa/blob/main/aadwarf64/aadwarf64.rst#id1


Thanks for this fix. LGTM. I tested it as well and all seems fine.

Reviewed-by: Yury Khrustalev <yury.khrustalev@arm.com>

Kind regards,
Yury



More information about the Libc-alpha mailing list