无线电爱好网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

无线电爱好网 首页 技术应用 单片机 查看内容

ARMv8 异常处理简介

2022-10-13 10:19| 发布者: 闪电| 查看: 7| 评论: 0

摘要: 内核稳定性问题复杂多样,最常见的莫过于“kernel panic”,意为“内核恐慌,不知所措”。这种情况下系统自然无法正常运转,只能自我结束生命,留下死亡信息。诸如:“Unable to handle kernel XXX at virtual addre ...


(2)堆栈指针寄存器SP


在AArch64状态下,除了通用寄存器外,还为以下每个异常级别实现了专用的堆栈指针寄存器,


堆栈指针寄存器为:


  • SP_EL0和SP_EL1。


  • 如果实现包括EL2,则为SP_EL2。


  • 如果实现包括EL3,则为SP_EL3。


堆栈指针寄存器选择:


在EL0上执行时,处理器使用EL0堆栈指针SP_EL0。在其他任何异常级别执行时,可以将处理器配置为使用SP_EL0或配置为对应该异常级别的堆栈指针SP_ELx。默认情况下,采用目标异常级别的堆栈指针SP_ELx。例如,EL1的异常选择SP_EL1,软件可以在目标异常级别执行的时候通过更新PSTATE.SP来指向SP_EL0的堆栈指针。


可以通过异常级别的堆栈指针后缀表明所选的堆栈指针:


t表明使用SP_EL0堆栈指针。


h表明使用SP_ELx堆栈指针。


t和h后缀基于线程(thread)和处理程序(handler)的首字母。



(3)保存的程序状态寄存器SPSR


保存的程序状态寄存器SPSR(Saved Program Status Registers)用于在发生异常时保存处理器状态。在AArch64状态下,每个异常级别都有一个SPSR:


  • SPSR_EL1,发生在EL1的异常。


  • 如果实现了EL2,则为SPSR_EL2,发生在EL2的异常。


  • 如果实现了EL3,则为SPSR_EL3,发生在EL3的异常。


注:EL0不能处理异常。


当处理器发生异常时,会将处理器状态从SPSTATE中的PSTATE(Process state)保存到对应异常级别的SPSR。例如,如果异常发生在EL1,则将处理器状态保存在SPSR_EL1中。


保存处理器状态意味着异常处理程序可以:


  • 从异常返回时,将处理器状态恢复到SPSR中存储的异常级别的状态。例如,异常处理程序从EL1返回时,处理器状态恢复到存储在SPSR_EL1中的状态。


  • 检查发生异常时PSTATE的值,确定引起异常指令的当前执行状态和异常级别,例如,当前执行状态是AArch64还是AArch32等。


(4)异常链接寄存器(ELR)


异常链接寄存器ELR(Exception Link Registers)包含异常返回地址。当处理器发生异常时,返回地址将保存在异常级别对应的ELR中。例如,当处理器将异常处理交给EL1处理时,会将异常返回地址保存在ELR_EL1中。在异常返回时,PC恢复到存储在ELR中的地址。例如,从EL1返回时,PC将恢复到ELR_EL1中存储的地址。

AArch64状态为每个异常级别都提供了ELR寄存器:


  • ELR_EL1,用于EL1的异常。


  • 如果实现了EL2,ELR_EL2用于EL2的异常。


  • 如果实现了EL3,ELR_EL3用于EL3的异常。


(5)ESR(Exception Syndrome Register)


异常综合表征寄存器ESR_ELn包含的异常信息用以异常处理程序确定异常原因。仅针对同步异常和SError进行更新。因为IRQ或FIQ中断处理程序从通用中断控制器(GIC)寄存器的信息获取状态。


  • ESR_ELn的BIT[31:26]指示处理程序执行对应的异常,比如:


    EC == 0b100010,PC alignment fault exception. 


    EC == 0b100101,Data Abort taken without a change in Exception level.


    EC == 0b101111,SError interrupt.


  • 位[25]表示被捕获指令的长度(0为16位指令,1为32位指令)


  • 位[24:0]构成ISS域(Instruction Specific Syndrome),根据EC域指定的不同异常类型,ISS有不用的解释。有:


    ISS encoding for an exception from an Instruction Abort


    ISS encoding for an exception from a Data Abort


    ISS encoding for an SError interrupt


    ISS encoding for an exception from a WFI or WFE instruction.

    等等。


以 Data Abort为例,ISS解读如下:




路过

雷人

握手

鲜花

鸡蛋

QQ|关于本站|小黑屋|Archiver|手机版|无线电爱好网 ( 粤ICP备15040352号 ) 无线电爱好技术交流5 无线电爱好技术交流1无线电爱好技术交流9开关电源讨论群LED照明应用、电源无线电爱好技术交流4无线电爱好技术交流8无线电爱好技术交流10无线电爱好技术交流11

粤公网安备 44030702001224号

GMT+8, 2022-10-13 10:19 , Processed in 0.140400 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

返回顶部