Linux ARM64调用约定:被调用方需要保存哪些寄存器?



是否有一个寄存器列表,在aarch64 Linux/BSD上,如果被调用者要使用它们,则被调用者绝对必须保存/恢复它们?ABI文档在这一点上似乎很混乱。或者至少,它没有其他isa的ABI文档那么清楚。

我要求一个特定的64位寄存器列表,如果被调用者要修改它们,则需要由被调用者保存

这不是ISA规范的一部分,因为它与ISA无关。操作系统供应商可以自由地实现他们想要的任何ABI。

Linux遵循AAPCS64 ABI,它要求:

子程序调用必须保留寄存器r19-r29和SP的内容。r19-r29中存储的每个值的所有64位必须保留,即使使用ILP32数据模型[…]。

对于SIMD/浮点:

寄存器v8-v15必须被调用者在调用子程序时保留;[…]。此外,只需要保留v8-v15中存储的每个值的底部64位;保存较大的值是调用方的责任。

最新更新