GDB调试时cpsr寄存器显示的[ EL=0 ]及SS标识是什么含义
GDB中AArch64架构CPSR寄存器输出字段解析
你本地GDB打印的CPSR寄存器内容为:
cpsr 0x80200000 [ EL=0 SS N ]
各字段含义如下:
EL=0:对应ARMv8及之后架构的异常级别(Exception Level)字段,存储在CPSR的M[3:2]位段,代表CPU当前运行的特权级,特权级随EL数值升高而递增:- EL0:最低特权级,即普通用户态,用户态应用程序运行在该级别,无法直接访问硬件、系统控制寄存器等敏感资源
- EL1:内核态特权级,操作系统内核运行在该级别
- EL2:虚拟化监控层特权级,Hypervisor运行在该级别
- EL3:安全监控层特权级,负责安全世界与非安全世界的切换
当前显示EL=0,说明CPU此刻正运行在用户态。
N:通用条件标志位中的负标志(Negative),对应CPSR第31位。当最近一次会修改标志位的运算结果为负值时,该位会被置1。当前输出中N位被置位,说明上一次影响标志位的运算结果最高位为1。SS:软件单步(Software Step)标志位,对应CPSR第21位。该位属于ARM调试架构定义的控制位,不属于基础算术运算标志位,因此不会出现在通用指令集的标志位说明文档中。当SS位被置1时,CPU每执行完一条指令就会触发调试异常,GDB的指令级单步功能(如stepi命令)就是通过配置该位实现的。当前SS位置1,说明当前正处于单步调试状态。
你看到的CPSR值0x80200000和解析结果完全匹配:0x80000000对应第31位N位,0x00200000对应第21位SS位,低段位M字段值为0对应EL0运行级别。
内容的提问来源于stack exchange,提问作者Muhammad Ikhwan Perwira
相关产品推荐
相关产品推荐

