环境:
Kernel Version:Linux-5.10
ARCH:ARM64
一:概述
在上一节《Linux Kernel:thread_info与task_struct》末尾我们分析出指向task_struct是sp_el0堆栈指针。本章将围sp以及与它密切关联的系统调用进行分析。
二:SP指针
ARMv8堆栈指针SP对应的物理寄存器有如下四个(某一时刻只能对应下面其中一个):
- SP_EL0(用户空间)
- SP_EL1(内核空间)
- SP_EL2(虚拟化)
- SP_EL3(secure层)
所以当程序运行在EL0时使用的是SP_EL0;其他Exception level下,可以使用SP_EL0或者当前Exception level所对应的SP_ELn寄存器;具体使用SP_EL0还是SP_EL1是由PSTATE.SP决定,对应的寄存器是Spsel。若Spsel