\()" 符号连接 和引用宏参数
汇编宏kernel_ventry
该汇编宏主要是用于异常响应向量表中,每个向量的宽度为0x80字节,即0x20条指令(每条指令4字节);而且每个向量入口点地址必须按照0x80对齐,即地址低7位为零。由于0x20条指令不可能完成异常处理过程,因此在这0x20条指令之内一定要跳转到到其他函数执行。
一般情况下,kernel_ventry的实现如下:
.macro kernel_ventry, el, label, regsize = 64 .align = 7 // 地址对齐要求 sub sp, sp, #S_FRAME_SIZE //堆栈指针处理 b el\()\el\()_\label //跳转 .endm
系统调用是从“kernel_ventry 0, sync”进入,即el=0,label=sync。因此最终跳转进入el0_sync汇编
其中" \()"是汇编符号连接,\el和\label是汇编宏的参数引用。