ARMv8 AArch64 SVC保存寄存器

ARMv8 AArch64 SVC保存寄存器,arm,Arm,假设我有一个简单的aarch64函数,它通过SVC进行系统调用,看起来像这样(iOS目标): 问题:由于该函数仅修改调用方保存的x16,因此除了帧指针和链接寄存器之外,是否还需要保存/恢复任何其他寄存器?换句话说,可以假设SVC处理程序遵守ABI过程调用约定吗 谢谢我想我找到了问题的答案: 在第14-15页,它讨论了当用户模式转换为更高模式时arm 64位的功能。 简单地说,内核会自动将GPRs保存到内核堆栈中,但不会像用户代码那样显式地保存 make_syscall: stp fp,

假设我有一个简单的aarch64函数,它通过SVC进行系统调用,看起来像这样(iOS目标):

问题:由于该函数仅修改调用方保存的x16,因此除了帧指针和链接寄存器之外,是否还需要保存/恢复任何其他寄存器?换句话说,可以假设SVC处理程序遵守ABI过程调用约定吗


谢谢

我想我找到了问题的答案: 在第14-15页,它讨论了当用户模式转换为更高模式时arm 64位的功能。 简单地说,内核会自动将GPRs保存到内核堆栈中,但不会像用户代码那样显式地保存

make_syscall:
    stp fp, lr, [sp, #-16]!
    add fp, sp, #0             
    mov x16, SYSCALL_NUM       
    svc #128                   
    ldp fp, lr, [sp], #16      
    ret