3.ARMv8 中断及异常处理(包括系统调用,系统调用即同步异常)
来源:互联网 发布:windows 8.1系统镜像 编辑:程序博客网 时间:2024/05/17 04:59
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
- 3.ARMv8 中断及异常处理(包括系统调用,系统调用即同步异常)
- 【中断异常】系统调用
- 中断、异常、系统调用
- 中断,异常,系统调用
- MIPS中断/异常处理机制/系统调用
- 中断、异常和系统调用
- 中断、异常和系统调用
- 中断、异常和系统调用
- 操作系统 中断异常系统调用
- 中断、异常与系统调用
- OS-中断,异常和系统调用
- 进程切换&&中断&&异常&系统调用execve()函数
- xv6源码分析(五):异常、中断、系统调用机制
- Android笔记五.Intent异常处理及常用系统调用
- MIPS中的异常处理和系统调用
- java应用中,调用第三方api如何处理异常(系统异常、操作异常等等)
- linux内核中断、异常、系统调用的分析以及实践
- linux内核中断、异常、系统调用的分析以及实践
- effective C++ 条款十三解读
- 清华梦的粉碎—写给清华大学的退学申请 /王垠
- 洛谷 1387最大正方形
- Codeforces
- UVA 10791 最小公倍数的最小和
- 3.ARMv8 中断及异常处理(包括系统调用,系统调用即同步异常)
- Binder线程池
- 3.Spark-RDD原理
- zzuli 2179: 紧急营救
- 《leetcode》single-number-ii
- 逆序对
- 原码、反码、补码以及补码是怎么来的
- 最大的最大公约数
- SQL学习记录