匯編宏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是匯編宏的參數引用。