ARMV8 datasheet学习笔记5:异常模型

1.前言

 

2.异常类型描述

见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文

 

3. 异常处理路由对比

AArch32、AArch64架构下IRQ 和Data Abort 异常处理流程图对比.

 3.1 IRQ 路由

3.1.1.   AArch32 IRQ 路由

图 AArch32 IRQ 路由

 

 

 

3.1.2.    AArch64 IRQ 路由

图 AArch64 IRQ路由

 

 

图 AArch64 IRQ向量查找

3.2.     Data Abort 路由

3.2.1.    AArch32 Data Abort 路由

 

 

 

3.2.2.    AArch64 Data Abort 路由

 

4. 源代码异常入口

4.1     C函数入口

 异常类型

AArch32 State

AArch64 State

所在文件

函数

所在文件

函数

Und

arm/kernel/traps.c

do_undefinstr

Arm64/kernel/traps.c

do_undefinstr

Data Abort

arm/mm/fault.c

do_DataAbort

arm64/mm/fault.c

do_mem_abort

IRQ

arm/kernel/irq.c

asm_do_IRQ

arm64/kernel/irq.c

handle_IRQ

FIQ

    

System Call

    

 

4.2    上报流程图

例举Data Abort 和 IRQ中断的入口流程图

  • Data Abort 上报

  

  • IRQ上报

 

4.3.    异常进入压栈准备

分析64位kernel_entry 压栈代码逻辑(代码路径:kernel/arch/arm64/kernel/entry.S)

压栈准备

说明

• sp指向 #S_LR – #S_FRAME_SIZE 位置

#S_FRAME_SIZE是pt_regs结构图的size

• 依次把x28-x29 … x0-x1 成对压入栈内

每压入一对寄存器,sp指针就移动 -16 =((64/8)*2)字节长度,栈是向地址减少方向增长的.

• 保存sp+#S_FRAME_SIZE数据到x21

add x21, sp, #SP_FRAME_SIZE

• 保存elr_el1到x22

mrs x22, elr_el1

• 保存spsr_el1到x23

mrs x23, spsr_el1

• 把lr、x21写入sp+#S_LR地址内存

保存lr和x21的数据到指定栈内存位置

• 把x22、x23写入sp+#S_PC地址内存

保存elr,spsr数据到指定栈内存位置

 

4.4.     栈布局

 

5. 参考文档

[1] DDI0487A_k_armv8_arm_iss10775.pdf

 

转载于:https://www.cnblogs.com/smartjourneys/p/6848204.html

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

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

相关文章

leetcode 三数之和 python_16.leetcode题目讲解(Python):最接近的三数之和

题目如下:题目这道题可以用排一些特殊情况,减少计算量, 参考代码如下:class Solution:def threeSumClosest(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""# 如果只…

给GridView设置行高

近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来. 遇到的问题: 1.把item中的宽和高设置match_parent,还是设置成wrap_content,当内容过多的时候,会覆盖下一行的显示的内容. 2.没有一个属…

java导出excel float_【Java】导入导出Excel表格

1、将excel导入到内存1、 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象InputStream in new FileInputStream(file);Workbook wb Workbook.getWorkbook(in);2、 获取Excel表中的工作表格Sheet3、 获取行、列sheet.getRows();sheet.getColumns();4、 读取…

C#的基础数据类型

一、概述 C# 的类型系统是统一的,因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类。C#的数据类型主要分为三类:值类型、引用类型和指针类型(如下图所示&…

mysql 占用的解决_解决 MySQL 突然占用全部内存的问题

最近更新:19th 6月, 2016前段时间落格从虚拟主机迁移到了独立的vps上,这下所有的维护内容都得我自己动手了。为了性能,另外既然能自己配环境了,自然不会用旧的配置。我用了 Ubuntu Server 16.04 PHP 7.0 Nginx MySQL 5.7 总之&…

[luoguP2957] [USACO09OCT]谷仓里的回声Barn Echoes(Hash)

传送门 团队里的hash水题&#xff0c;数据小的不用hash都能过。。 也就是前缀hash&#xff0c;后缀hash&#xff0c;再比较一下就行。 ——代码 1 #include <cstdio>2 #include <cstring>3 #define ULL unsigned long long4 5 int n, m, ans;6 char s1[81], s2[81]…

java内容寻址_java – 获取方法对象而不按名称寻址方法

有没有办法获取方法对象而不必使用方法的名称来获取它&#xff1f;例如,我有班级&#xff1a;class Car {public String drive();public String giveUp();public String fillUp();}我想创建一个Map< String,Method>方法(又名&#xff1a;(“move”,drive()),(“name”,gi…

【NOI2001】炮兵阵地

【题意】 给定一张n*m的图&#xff0c;每个位置要么是P&#xff0c;要么是H。P的位置可以放炮兵&#xff0c;H则不行。炮兵会朝四个方向&#xff0c;距离2个单位的方格进行攻击&#xff0c;求在没有炮兵互伤的情况下&#xff0c;最多能放的炮兵数量。 【题解】 这道题死坑。 一…

mysql怎么插入10w测试数据_mysql快速插入100万测试数据

向数据库添加100W条测试数据&#xff0c;直接在普通表中添加速度太慢&#xff0c;可以使用内存表添加&#xff0c;然后将内存表数据复制到普通表。创建表内存表DROP TABLE IF EXISTS test_memory;CREATE TABLE test_memory (id INT (11) NOT NULL AUTO_INCREMENT,item1 VARCHAR…

android:Android中用文件初始化sqlite数据库(zz)

很多时候在应用安装初始化时&#xff0c;需要创建本地数据库&#xff0c;同时为数据库添加数据&#xff0c;之后再从数据库中读取数据。这里有2个思路1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据…

面向对象-继承

继承&#xff1a; 概念&#xff1a; 继承父类的属性和行为&#xff0c;使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。继承是多态的前提&#xff0c;如果没有继承&#xff0c;就没有多态。 特点&#xff1a; java只能单…

如何发布Jar包到Maven中央仓库

https://www.iteblog.com/archives/1807.html转载于:https://www.cnblogs.com/longshiyVip/p/6858844.html

java previous_java – 在枚举类型上实现`next`和`previous`的最好方法是什么?

假设我有一个枚举&#xff1a;enum E {A, B, C;}如lucasmo by lucasmo所示&#xff0c;枚举值按照它们被初始化的顺序存储在静态数组中&#xff0c;您可以稍后用E.values()检索(克隆)此数组。现在假设我想实现E#getNext和E#getPrevious&#xff0c;以使所有下列表达式求值为tru…

什么是抽象类

抽象概念&#xff1a; 当我们在做子类共性功能抽取时&#xff0c;有些方法在父类中并没有具体的体现&#xff0c;这个时候就需要抽象类了&#xff01; 在Java中&#xff0c;一个没有方法体的方法应该定义为抽象方法&#xff0c;而类中如果有抽象方法&#xff0c;该类必须定义为…

java 加密 sha_Java加密 消息摘要算法SHA实现详解

SHA是消息摘要算法的一种实现方式&#xff0c;前面已经总结过MD2\4\5的实现&#xff0c;接下来就为大家总结一下SHA的实现。SHA的jdk实现&#xff1a;private static void SHA_JDK(){try {MessageDigest digest MessageDigest.getInstance("SHA");//我们可以通过SHA…

monkeyrunner脚本的录制和回放

参考&#xff1a;http://www.cnblogs.com/android-host/p/5378996.html 需要条件&#xff1a; 1.android-sdk 2.monkey_recorder.py 3.monkey_playback.py 操作步骤&#xff1a; 1)新建monkey_recorder.py文件&#xff0c;复制以下代码&#xff1a; #!/usr/bin/env monkeyrunne…

什么是接口

概念&#xff1a; 接口是更加彻底的抽象&#xff0c;接口中全部是抽象方法。接口是不能直接创建对象的。从JDK8之后&#xff0c;接口中不再只是抽象方法&#xff0c;接口还可以有默认方法&#xff08;也就是实例方法&#xff09;&#xff0c;和静态方法了&#xff0c;还包含了私…

php session作用,PHP中Session的作用

PHP session变量的作用是&#xff1a;存储用户的session信息&#xff0c;或者改变用户的session设置。Session变量储存了一个单一用户的信息&#xff0c;它可以被所有的页面使用。PHP Session变量当你在自己的计算机上运行一个应用程序时&#xff0c;你打开它&#xff0c;对他做…

Vuex核心知识(2.0)

Vuex核心知识&#xff08;2.0&#xff09; 转自&#xff1a;http://www.cnblogs.com/ghost-xyx/p/6380689.html Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式&#xff0c;它类似于 Redux 应用于 React 项目中&#xff0c;他们都是一种 Flux 架构。相比 Redux&#xff…

java带权连通图上最小权边,连通图最小生成树的算法及实现

连通图的最小生成树生成树定义&#xff1a;无向连通图G的极小连通子图&#xff0c;称为它的生成树。(n个顶点&#xff0c;n-1条边)考虑一下下面这个图上图是一个完全图&#xff0c;它的生成树不是唯一的&#xff0c;我们列出最特殊的两种情况上面2个图都是第一个完全图的生成树…