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

问题描述 投票:0回答:1

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

我要求提供需要由被调用者保存的特定 64 位寄存器列表(如果它们将由被调用者修改)。

linux arm64 calling-convention abi
1个回答
3
投票
Linux 遵循

AAPCS64 ABI,其中规定:

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

对于 SIMD/浮点:

寄存器 v8-v15 必须由跨子例程调用的被调用者保存; [...]。另外,仅需要保留v8-v15中存储的每个值的底部64位;调用者有责任保留更大的值。

© www.soinside.com 2019 - 2024. All rights reserved.