ARMv8 64bits相对于之前的 32bits 有较大变动,所有中断及异常的处理总入口都在entry.S 源文件中。
1.1. 异常介绍(中断即称为 异步异常)
分为同步和异步 两种类型异常,中断划入异步异常类型:
Synchronous(同步异常) | |
异常类型 | 描述 |
Undefined Instruction | 未定义指令异常 |
Illegal Execution State | 非常执行状态异常 |
System Call | 系统调用指令异常(SVC/HVC/SMC) |
Misaligned PC/SP | PC/SP未对齐异常 |
Instruction Abort | 指令终止异常 |
Data Abort | 数据终止异常 |
Debug exception | 软件断点指令/断点/观察点/向量捕获/软件单步 等Debug异常 |
Asynchronous(异步异常) | |
类型 | 描述 |
SError or vSError | 系统错误类型,包括外部数据终止 |
IRQ or vIRQ | 外部中断 or 虚拟外部中断 |
FIQ or vFIQ | 快速中断 or 虚拟快速中断 |
1.2. 异常处理逻辑
跳转到哪个EL使用哪个向量偏移地址又路由关系决定。路由关系看的比较晕,需要对体系架构有一定了解,
异常进入满足以下条件 | 向量地址偏移表 | |||
Synchronous (同步异常) | IRQ || vIRQ | FIQ || vFIQ | SError || vSError | |
SP => SP_EL0 && 从Current EL来 | 0x000 | 0x080 | 0x100 | 0x180 |
SP => SP_ELx && 从Current EL来 | 0x200 | 0x280 | 0x300 | 0x380 |
64bit => 64bit && 从Low level EL来 | 0x400 | 0x480 | 0x500 | 0x580 |
32bit => 64bit && 从Low level EL来 | 0x600 | 0x680 | 0x700 | 0x780 |
• SP=> SP_EL0,表示使用SP_EL0堆栈指针,由PSTATE.SP== 0决定,PSTATE.SP == 1 则SP_ELx;
• 32bit=> 64bit 是指发生异常时PE从AArch32切换到AArch64的情况;
exception level迁移情况 | Synchronous exception的offset值 | IRQ和vIRQ exception的offset值 | FIQ和vFIQ exception的offset值 | SError和vSError exception的offset值 |
同级exception level迁移,使用SP_EL0。例如EL1迁移到EL1 | 0x000 | 0x080 | 0x100 | 0x180 |
同级exception level迁移,使用SP_ELx。例如EL1迁移到EL1 | 0x200 | 0x280 | 0x300 | 0x380 |
ELx迁移到ELy,其中y>x并且ELx处于AArch64状态 | 0x400 | 0x480 | 0x500 | 0x580 |
ELx迁移到ELy,其中y>x并且ELx处于AArch32状态 | 0x600 | 0x680 | 0x700 | 0x780 |
1.3. 代码实现,参考entry.S
带invalid后缀的向量都是linux做未做进一步处理的向量,默认都会进入bad_mode()流程,说明这类异常Linux内核无法处理,只能上报给用户进程(用户态,sigkill或sigbus信号)或die(内核态)。
el0_sync:在用户态发生同步异常处理
el0_irq:在用户态发生irq中断处理
el1_sync:在内核态发生同步异常处理
el1_irq:在内核态发生irq中断处理
对于异步异常sError,当前都是不会进一步做处理,直接进入inalid处理逻辑。
1.4. 参考资料
ARMv8架构与指令集.学习笔记:http://blog.csdn.net/forever_2015/article/details/50285865第5章 异常模型
ARMv8 Linux内核异常处理过程分析:http://blog.csdn.net/qianlong4526888/article/details/11347659
Arm64中的异常处理:http://blog.csdn.net/omnispace/article/details/51038805
ARM64的启动过程之(六):异常向量表的设定http://blog.csdn.net/zdy0_2004/article/details/50018877