ARMv8 AArch64 SVC保存寄存器

时间:2014-11-07 00:28:41

标签: arm

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

我想我找到了问题的答案: https://events.linuxfoundation.org/images/stories/pdf/lcna_co2012_marinas.pdf 在第14-15页,它讨论了当用户模式转换到更高模式时arm 64bit的作用。 简单地说,内核会自动将GPR保存到内核堆栈中,但不会像用户代码那样明确地保存在内核堆栈中。