[ARM异常]-同步异常产生和返回(svc/hyc/smc/eret)
★★★ 个人博客导读首页—点击此处 ★★★
文章目录
- 1、同步异常的产生和返回的指令 : svc/hyc/smc/eret
- 2、armv8新增的ELR寄存器
1、同步异常的产生和返回的指令 : svc/hyc/smc/eret
这里重点强调一下ERET,以arm64为例,调用该指令后,PSTATE恢复SPSR_ELn的值,PC恢复ELR_ELn的值.
代码示例:
在ATF中,exit_el3函数中,当一切寄存器准备好之后,调用ERET指令,恢复PC指针。跳转回Normal-EL1或secure-EL1
func restore_gp_registers_callee_eretldp x4, x5, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X4]ldp x6, x7, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X6]ldp x8, x9, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X8]ldp x10, x11, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X10]ldp x12, x13, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X12]ldp x14, x15, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X14]ldp x18, x19, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X18]ldp x20, x21, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X20]ldp x22, x23, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X22]ldp x24, x25, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X24]ldp x26, x27, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X26]ldp x28, x29, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X28]ldp x30, x17, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]msr sp_el0, x17ldp x16, x17, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X16]eret
endfunc restore_gp_registers_callee_eret
2、armv8新增的ELR寄存器
- AArch64 : Provides a 64-bit program counter (PC), stack pointers
(SPs), and exception link registers (ELRs) - AArch32 : Provides 13 32-bit general-purpose registers, and a 32-bit
PC, SP, and link register (LR). The LR is used as both an ELR and a
procedure link register
也就是说,再aarch64中,ELR做为exception link registers,在异常返回时恢复PC的指针;在aarch32中,使用LR替代ELR
[ARM异常]-同步异常产生和返回(svc/hyc/smc/eret)相关推荐
- 同步数据显示服务器异常,同步异常云端服务器异常
同步异常云端服务器异常 内容精选 换一换 您可以通过"应用管理"页面的应用列表,快速查看应用状态,及相关异常信息,如图1所示.包括:应用状态:即图1中的①应用异常信息:即图1中的② ...
- [ARM异常]-ARMV8-aarch64异常和中断处理概念详细介绍
★★★ 个人博客导读首页-点击此处 ★★★ 文章目录 1.异常和中断的概念 2.异常产生的方法: (1).Abort : (2).Reset (3).同步异常 (4).异步异常(中断) 3.同步异常和 ...
- 11.ARM架构的异常与中断
目录 1.异常与中断的引入 2.CPU模式(Mdde)状态(state)以及程序状态寄存器 3.Undefined 异常模式例子 4.SWI异常模式实例 源代码: 1.异常与中断的引入 1.1.中断的 ...
- ARM体系的异常中断
在ARM体系中,通常有3种方式控制处理器的流程 1:在正常执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加四个字节,在每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节,整个过 ...
- swi 指令能用在C语言吗,ARM的SWI异常中断处理程序设计
原标题:ARM的SWI异常中断处理程序设计 本节主要介绍编写 处理程序时需要注意的几个问题,包括判断SWI中断号,使用汇编语言编写SWI异常处理函数,使用C语言编写SWI异常处理函数,在特权模式下使用 ...
- 微软服务器异常是什么原因,远程服务器返回异常:(400)异常的请求,微软的翻译接口...
当前位置:我的异常网» C# » 远程服务器返回异常:(400)异常的请求,微软的翻译接 远程服务器返回异常:(400)异常的请求,微软的翻译接口 www.myexceptions.net 网友分享 ...
- Redis主从同步异常问题记录
一.背景 2015.7.31 10.36.14.*网段的TOR故障一小时,网络故障恢复后,redis nj多个从主从同步异常: 除slave0外,其他slave的offset均比master大.注:r ...
- null?对象?异常?到底应该如何返回错误信息
null?对象?异常?到底应该如何返回错误信息 参考文章: (1)null?对象?异常?到底应该如何返回错误信息 (2)https://www.cnblogs.com/dsj2016/p/748208 ...
- mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题
之前的一篇文章中,我们遇到了主从同步的一个问题,错误代码:1236,详细请看 今天,突然发现测试环境的主从同步关系断开了,报错代码:1677 一.问题错误信息 Last_SQL_Errno: 1677 ...
最新文章
- request threaded-only IRQs with IRQF_ONESHOT【转】
- Java相对路径/绝对路径总结(转)
- 单一职责原则(SRP)
- H5页面与ios交互返回上一级
- eslint检测node 内部模块报错解决方案
- linux主机开放ftp、http服务_Linux系统与Windows系统哪个好呢(一)
- 原来医生的处方不是随便乱写的...
- LeetCode 33. 搜索旋转排序数组 golang
- c语言输出3位数逆序数,C语言求助!一个三位数的逆序数,总是编不对
- Android ProGuard 代码压缩混淆与打包优化
- 轻松搞懂word2vec / FastText + SVM(支持向量机)实现中英文情感分类
- —— GPS测量原理及应用复习 ——
- uln2003驱动蜂鸣器_通过单片机来控制蜂鸣器
- LA 4490 Help Bubu
- Credit card dataset: SVM Classification --- PCA效果/不平衡数据
- matlab海洋数值模拟,海洋数值模拟课程教学大纲.PDF
- BGP线路是什么意思?BGP双线的优点是什么?
- SSD LOSS-train interation 可视化
- 服务器基线加固脚本_一种基于WebLogic的安全基线加固方法与流程
- 番茄工作法总结-第七章:团队