ARMv8 AArch64异常处理机制概览

news2024/9/20 20:46:44

1 处理机制概述

相对于ARMv7中的异常向量表(Exception Vector Table),ARMv8异常处理机制更为复杂,涉及处理器的异常等级(Exception Levels, ELn)、运行状态(Execution States)和安全模式(Secure Mode)。

这种特性意味着我们在描述异常时需要说明异常是在什么异常等级下发生的,返回时处理器的异常等级、运行状态和安全模式发生了什么变化,比如“在当前异常等级下发生Sync异常,异常等级从EL2切换到EL1,使处理器的运行状态从AArch64转到AArch32”。

ARMv8共有4个异常等级ELn(n=0,1,2,3),EL3最高,EL2最低。复位处理(Reset Handler)和异常向量表分开,支持为每个异常等级提供独立的异常向量表和栈指针寄存器(Stack Pointer,SP)。异常等级只能在复位、异常发生和退出时变更,且进入异常不能降低异常等级、退出异常不能提升异常等级。


2 异常向量表

ARMv8的异常向量表也有固定的区域划分,不过更大——单张异常向量表起始地址0x800字节对齐,内部每段0x80字节对齐,如图2-1。
在这里插入图片描述图2-1 ARMv8异常向量表的结构

上图只是一个异常等级的异常向量表,一般来说需要为EL3、EL2和EL1各提供一张异常向量表。不同异常等级ELn的异常向量表起始地址可以通过寄存器VBAR_ELn(n=1,2,3)设置。

向量表可分为两部分,偏移地址0x000-0x400的用于相应当前异常等级的异常,偏移地址0x400-0x780的向量用于接收低一等级的异常。比如EL2的异常向量表,这部分就用于处理EL1的异常。

ARMv8提供了4个堆栈指针寄存器,不同异常等级ELn(n=1,2,3)可通过寄存器SPSel选择SP_ELn或者EL0作为堆栈指针,这将决定在当前异常等级下发生异常时PC跳转的位置。比如当前异常等级(假设为EL2)下发生IRQ中断,如果当前选择的堆栈指针为SP0,PC就会跳转到异常向量表的0x080偏移位置,如果当前选择的堆栈为SP_EL2,PC就会跳转到异常向量表的偏移地址0x280处。

值得一提的是,堆栈指针寄存器的使用和ARMv7没啥差别。向SPSel值选择了当前异常等级的堆栈指针后,SP寄存器和选定的SP_ELn会产生关联,二者的值会保持一致。同步机制还没有在手册里看到,暂且可以认为SP是引用了SP_ELn的值。

此外,习惯上用后缀t表示当前异常等级选择的堆栈是SP_EL0,比如SP_EL1t,用后缀h表示选择的是ELn,比如SP_EL1h。


3 异常处理

处于AArch64运行状态的ARMv8处理器根据异常的类型、发生异常的异常等级、当前使用的堆栈指针(SP in use)、寄存器组的状态(state of the register file)。

3.1 Taken 和 Return
Taken关乎异常的处理,Return关乎异常的返回。
Taken指的是处理器对异常的响应(Responds),即因异常做出动作。Taken from描述异常的来源,指处理器在Taken发生前一刻的状态。Taken to则描述异常的去向,指的是处理器在Taken发生后一刻的状态。
在异常处理的语境下,Return指的是,额,使用异常返回指令(Exception return instruction)触发的动作?Return form描述异常从何退出,指的是Return前处理器的状态。Return to描述异常退出结果,指的是Return后处理器的状态。

3.2 异常处理入口
产生异常的指令有HVC/SMC/SVC。
如果异常taken to一个使用AArch64运行状态的异常等级ELn,那么处理器在将PC跳转到异常向量表的对应位置前,将执行以下动作:
 将Taken from的PSTATE保存到SPSR_ELn寄存器
 将优先返回地址(preferred exception return address)保存到ELR_ELn寄存器
 配置Taken to的PSTATE寄存器
 如果是Synchronous或者SError异常,异常综合信息写入ESR_ELn寄存器
 跳转到异常向量表对应位置
上述Taken to的PSTATE配置遵循以下规则:
 PSTATE.EL 设置为ELn。
 PSTATE.{D, A, I, F, SP, TCO} 设置为 1
 PSTATE.SSBS 设置为 SCTLR_ELn.DSSBS 的值
 PSTATE.{IL, nRw, UAO} 设置为 0
 PSTATE.BTYPE 设置为 0b00
 PSTATE.SS 根据v8手册Chapter D2 AArch64 Self-hosted Debug中的规则设置
 对于以下任何一种情况,PSTATE.PAN 设置为 1:
—— 目标异常级别为 EL1并且SCTLR_EL1为 0
—— Taken from EL0,Taken to AArch64状态且打开安全模式的EL2,HCR_EL2.{TGE, E2H}是{1, 1},并且SCTLR_EL2.SPAN是0.
 PSTATE.ALLINT 设置为SCTLR_ELx.SPINTMASK的值取反

3.3 退出异常
退出异常的指令有ERET/ERETAA/ERETAB,异常等级EL0不支持异常退出指令。退出时切换到的目标异常等级可通过当前异常等级ELn的SPSR_ELn设置。
在这里插入图片描述
图3-3-1 通过SPSR_ELn选择Target EL

下面是从EL3切换到EL1的例程

.global _el3_to_el1
.type _el3_to_el1, "function"
_el3_to_el1:
	// Initialize the SCTLR_EL1 register before entering EL1
	MSR SCTLR_EL1, XZR
	// Determine the EL1 Execution state
	MRS X0, SCR_EL3
	ORR X0, X0, #(1<<10) // RW, EL2 Execution state is AArch64
	// Determine the EL1 Security Mode
	AND X0, X0, #0xFFFFFFFFFFFFFFFE // NS, EL1 is Secure world
	MSR SCR_EL3, x0
	MOV X0, #0b00101
	MSR SPSR_EL3, X0 // M[4:0]=01001 EL1h, must match SCR_EL3.RW
	// Determine EL2 entry.
	ADR X0, el2_entry
	MSR ELR_EL3, X0
	ERET

3.4 异常等级切换
ARMv8有EL3、EL2、EL1、EL0共四个异常等级,用户可通过产生或退出异常切换异常等级。切换异常等级需注意配置目标异常等级的栈指针寄存器、运行状态和安全模式。

EL0,EL1有安全模式和非安全模式的区别。 EL2是虚拟机管理级别并且只有非安全模式。 EL3是最高优先级并且只存在安全模式。
此外,EL3直接切换到EL1只能选择安全模式,因此EL3切换到EL1只有两个路径,一种是EL3(S)->EL2(NS)->EL1(S),另一种是EL3(S)->EL1(S)。


4 相关的指令和寄存器

4.1 ERET
4.2 SCR_EL3
4.3 SPSR_ELn.DAIF
4.4 ELR_ELn
4.5 SCTLR_EL2
4.6 HCR_EL2
4.7 ELR


5 架构相关的补充信息

要想真正理解ARMv8的异常处理机制,就需要理解ARMv8架构的特性,概要地说,至少需要通过阅读指令集手册理解以下几个概念。

5.1 运行状态
5.2 安全模式
5.3 Warm Reset

6 参考

  1. Application Note Bare-metal Boot Code for ARMv8-A Processors Version 1.0 Non-Confidential Arm® Architecture Reference Manual for A-profile architecture
  2. Arm® Architecture Reference Manual for A-profile architecture

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/182715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汉字乱码状态下的编码转换将导致的问题

实验工具notepad编辑器实验过程步骤1&#xff1a;打开notepad&#xff0c;新建一个文本文件&#xff0c;在其中输入一段汉字文本&#xff0c;查看当前编码格式&#xff0c;如下&#xff1a;分析&#xff1a;由上图可见&#xff0c;从右下角可知当前文件是以UTF-8解码显示的&…

微信小程序——页面事件,.启用下拉刷新监听页面的下拉刷新事件,上拉触底事件,停止下拉刷新的效果

一.页面事件1.什么是下拉刷新下拉刷新是移动端的专有名词&#xff0c;指的是通过手指在屏幕上的下拉滑动操作&#xff0c;从而重新加载页面数据的行为。2.启用下拉刷新启用下拉刷新有两种方式&#xff1a;a.全局开启下拉刷新在 app.json 的window 节点中&#xff0c;将 enableP…

python 蓝桥杯 矩阵拼接

问题描述已知 3 个矩形的大小依次是 a_{1} \times b_{1}, a_{2} \times b_{2}a1b1,a2b2 和 a_{3} \times b_{3}a3b3 。用这 3 个矩形能拼 出的所有多边形中, 边数最少可以是多少?例如用 3 \times 232 的矩形&#xff08;用 A 表示)、 4 \times 141 的矩形 (用 BB 表示) 和 2 \…

法律常识(一)婚姻法全文

目录 参考 第一章 总 则 第二章 结 婚 第三章 家庭关系 第四章 离 婚 第五章 救助措施与法律责任 第六章 附 则 参考 中华人民共和国婚姻法http://www.gqb.gov.cn/node2/node3/node5/node9/node101/userobject7ai1290.html 《图解中华人民共和国婚姻法》 &#xff…

[架构之路-92]:《软件架构设计:程序员向架构师转型必备》-2-解析软件架构的概念

前言&#xff1a;什么是软件架构&#xff1f;不同的人&#xff0c;有不同的答案。因为架构无处不再&#xff0c;架构又有不同层面。很多人都给架构定义&#xff0c;不同的人&#xff0c;对架构有不同的理解&#xff0c;很难统一。本文是按照作者个人的理解&#xff0c;来展现一…

React是不是MVVM架构吗?

首先说结论&#xff1a;不是 一、MVVM Model-View-ViewModel&#xff1a;一句话概括MVVM&#xff0c;操作数据&#xff0c;就是操作视图&#xff0c;就是操作DOM。开发者只需要完成包含申明绑定的视图模板&#xff0c;编写ViewModel中业务数据变更逻辑&#xff0c;View层则完…

Lua 协同程序(coroutine)

Lua 协同程序(coroutine) 参考文章&#xff1a; 菜鸟教程 https://zhuanlan.zhihu.com/p/480357405 https://zhuanlan.zhihu.com/p/76249973 Lua 协同程序(coroutine)与线程比较类似&#xff1a;拥有独立的堆栈&#xff0c;独立的局部变量&#xff0c;独立的指令指针&#xff0…

贪心算法(例题详细解说)

日升时奋斗&#xff0c;日落时自省 目录 1、选择排序 2、分割平衡字符串 3、买卖股票的最佳时机 II 4、跳跃游戏 5、钱币找零 6、多机调度问题 7、活动选择 8、无重复区间 贪心思想&#xff1a;顾名思义 贪 是该算法的一大特点&#xff0c;如何贪&#xff1f;&#x…

2023-01-28 clickhouse-聚合函数的源码再梳理

笔者在源码笔记1之中分析过ClickHouse的聚合函数的实现&#xff0c;但是对于各个接口函数的实际如何共同工作的源码&#xff0c;回头看并没有那么明晰&#xff0c;主要原因是没有结合Aggregator的类来一起分析聚合函数的是如果工作起来的。所以决定重新再完成一篇聚合函数的源码…

梦熊杯-十二月月赛-白银组题解-A.自由

A. Problem A.自由&#xff08;freedom.cpp&#xff09; 内存限制&#xff1a;256 MiB 时间限制&#xff1a;1000 ms 标准输入输出 题目类型&#xff1a;传统 评测方式&#xff1a;文本比较 题目描述: 「蒙德」是「自由」的国度。 巴巴托斯认为&#xff0c;如果一个数的…

ch1_2 计算机的基本组成

计算机的基本组成 1. 冯 诺依曼计算机的特点 计算机由五大部件组成指令和数据 以同等地位 存于存储器&#xff0c; 可按地址寻访。指令和数据用二进制 表示指令由操作码 和 地址码 组成&#xff1b;存储程序&#xff1b;以运算器 为中心&#xff1b; 2. 硬件框图 存储器&am…

【Java集合】HashSet源码分析

目录 一、Set简介 二、HashSet简介 2.1 简介 2.2 HashSet继承关系 三、源码分析 3.1 成员属性 3.2 构造方法 3.3 添加元素 3.3.1 add()方法 3.3.2 addAll()方法 3.4 删除元素 3.4.1 remove()方法 3.4.2 removeAll()方法 3.5 查询元素 3.5.1 contains()方法 3.5.2 containsAll方…

项目管理:如何编写高质量的Makefile?

文章目录背景熟练掌握 Makefile 语法规划 Makefile 要实现的功能设计合理的 Makefile 结构掌握 Makefile 编写技巧技巧 1&#xff1a;善用通配符和自动变量技巧 2&#xff1a;善用函数技巧 3&#xff1a;依赖需要用到的工具技巧 4&#xff1a;把常用功能放在 /Makefile 中&…

nodeJS - 切换使用淘宝镜像【临时切换、 长期切换】

一、文章引导 #mermaid-svg-zWQadgqvTsLhAes4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zWQadgqvTsLhAes4 .error-icon{fill:#552222;}#mermaid-svg-zWQadgqvTsLhAes4 .error-text{fill:#552222;stroke:#55222…

自动驾驶感知——视觉感知经典算法

文章目录1. 车道线检测技术1.1 基于规则的车道线检测技术1.1.1 流程框架1.1.2 预处理模块1.1.3 车道线识别感兴趣区域提取1.1.4 灰度图转化1.1.5 灰度图去噪1.1.6 二值化操作1.1.7 鲁棒性参数估计——RANSAC1.1.8 后处理模块1.1.9 输出1.2 车道线检测技术发展路线2. 目标检测技…

10.图和树基础

一、基本介绍 1.图 图描述的是一些个体之间的关系。这些个体之间既不是前驱后继的顺序关系&#xff0c;也不是祖先后代的层次关系&#xff0c;而是错综复杂的网状关系。我们一般用图G(V,E)G(V,E)G(V,E)来表示&#xff0c;VVV表示结点&#xff0c;EEE表示边。 根据边是否有权值…

爱快软路由安装Docker插件

在爱快云 插件应用中开启Docker插件 在爱快web端页面的[系统设置]->[磁盘管理]->[磁盘分区]设置磁盘分区&#xff0c;选择普通存储&#xff0c;挂载路径名可以随便取。 点击[高级应用]->[插件管理] 点击页面的Docker图标。 启用Docker服务 点击中间的[镜像管理]&…

n皇后问题

n皇后问题 题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行 或同一列 或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的…

基于java的大理旅游系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

professional issue复习

Legal concepts Development of UK law • The Kingdom of England was established in 927. • The Principality of Wales was established in 1216. Common law • Following 1066, a unified system of law (English common law) slowly came into existence. It was “c…