[PATCH v6 2/3] aarch64: clear ZA state of SME before clone and clone3 syscalls

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Wed Oct 8 13:09:24 GMT 2025



On 08/10/25 08:32, Yury Khrustalev wrote:
> On Wed, Oct 08, 2025 at 08:25:01AM -0300, Adhemerval Zanella Netto wrote:
>>
>> ...
>>>>> I think there is no need to constrait the temporary to x13, we can let
>>>>> compiler pick it instead:
>>>>>
>>>>> #define CALL_LIBC_ARM_ZA_DISABLE()                              \
>>>>> ({                                                              \
>>>>>   unsigned long int __tmp;                                      \
>>>>>   asm volatile (                                                \
>>>>>   "     mov             %0, x30\n"                              \
>>>>>   "     .cfi_register   x30, %0\n"                              \
>>>>>   "     bl              __libc_arm_za_disable\n"                \
>>>>>   "     mov             x30, %0\n"                              \
>>>>>   "     .cfi_register   %0, x30\n"                              \
>>>>>   : "=r" (__tmp)                                                \
>>>>>   :                                                             \
>>>>>   : "x14", "x15", "x16", "x17", "x18", "memory" );              \
>>>>> })
>>>>
>>>> Compiler might not know the calling convention of__libc_arm_za_disable().
>>>> It's a private Glibc function and a compiler might treat it as such
>>>> applying common rules. I think it's safer to force use of x13 that we
>>>> know will stay unchanged.
>>>
>>> But x13 is temporary register to save the stack pointer, afaiu there is no
>>> need to be x13 in C code.
>>
>> I mean, the inline asm already define the clobbered registers so compiler
>> should pick one that is no suppose to pick.
> 
> I agree that it would probably be OK but I also feel like we don't gain
> much by allowing a compiler to pick a register. On the other hand, using
> a specific register makes it consistent with other usages of this
> function and guarantees it will always work. I don't have strong opinion
> on this though.

It should not matter performance-wise, clone syscall itself is usually a
costly one.  It is just is usually a good practice to avoid adding unnecessary
constrains for inline asm. 



More information about the Libc-alpha mailing list