★★★ 个人博客导读首页—点击此处 ★★★

文章目录

  • 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中的①应用异常信息:即图1中的② ...

  2. [ARM异常]-ARMV8-aarch64异常和中断处理概念详细介绍

    ★★★ 个人博客导读首页-点击此处 ★★★ 文章目录 1.异常和中断的概念 2.异常产生的方法: (1).Abort : (2).Reset (3).同步异常 (4).异步异常(中断) 3.同步异常和 ...

  3. 11.ARM架构的异常与中断

    目录 1.异常与中断的引入 2.CPU模式(Mdde)状态(state)以及程序状态寄存器 3.Undefined 异常模式例子 4.SWI异常模式实例 源代码: 1.异常与中断的引入 1.1.中断的 ...

  4. ARM体系的异常中断

    在ARM体系中,通常有3种方式控制处理器的流程  1:在正常执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加四个字节,在每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节,整个过 ...

  5. swi 指令能用在C语言吗,ARM的SWI异常中断处理程序设计

    原标题:ARM的SWI异常中断处理程序设计 本节主要介绍编写 处理程序时需要注意的几个问题,包括判断SWI中断号,使用汇编语言编写SWI异常处理函数,使用C语言编写SWI异常处理函数,在特权模式下使用 ...

  6. 微软服务器异常是什么原因,远程服务器返回异常:(400)异常的请求,微软的翻译接口...

    当前位置:我的异常网» C# » 远程服务器返回异常:(400)异常的请求,微软的翻译接 远程服务器返回异常:(400)异常的请求,微软的翻译接口 www.myexceptions.net  网友分享 ...

  7. Redis主从同步异常问题记录

    一.背景 2015.7.31 10.36.14.*网段的TOR故障一小时,网络故障恢复后,redis nj多个从主从同步异常: 除slave0外,其他slave的offset均比master大.注:r ...

  8. null?对象?异常?到底应该如何返回错误信息

    null?对象?异常?到底应该如何返回错误信息 参考文章: (1)null?对象?异常?到底应该如何返回错误信息 (2)https://www.cnblogs.com/dsj2016/p/748208 ...

  9. mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题

    之前的一篇文章中,我们遇到了主从同步的一个问题,错误代码:1236,详细请看 今天,突然发现测试环境的主从同步关系断开了,报错代码:1677 一.问题错误信息 Last_SQL_Errno: 1677 ...

最新文章

  1. request threaded-only IRQs with IRQF_ONESHOT【转】
  2. Java相对路径/绝对路径总结(转)
  3. 单一职责原则(SRP)
  4. H5页面与ios交互返回上一级
  5. eslint检测node 内部模块报错解决方案
  6. linux主机开放ftp、http服务_Linux系统与Windows系统哪个好呢(一)
  7. 原来医生的处方不是随便乱写的...
  8. LeetCode 33. 搜索旋转排序数组 golang
  9. c语言输出3位数逆序数,C语言求助!一个三位数的逆序数,总是编不对
  10. Android ProGuard 代码压缩混淆与打包优化
  11. 轻松搞懂word2vec / FastText + SVM(支持向量机)实现中英文情感分类
  12. —— GPS测量原理及应用复习 ——
  13. uln2003驱动蜂鸣器_通过单片机来控制蜂鸣器
  14. LA 4490 Help Bubu
  15. Credit card dataset: SVM Classification --- PCA效果/不平衡数据
  16. matlab海洋数值模拟,海洋数值模拟课程教学大纲.PDF
  17. BGP线路是什么意思?BGP双线的优点是什么?
  18. SSD LOSS-train interation 可视化
  19. 服务器基线加固脚本_一种基于WebLogic的安全基线加固方法与流程
  20. 番茄工作法总结-第七章:团队

热门文章

  1. 配电基础知识汇总,99%的人都收藏了!
  2. AWS昨日突发大规模故障,官方称受施工方挖断光纤影响
  3. 在linux下创立bash文件,Linux文件管理及bash特性
  4. Python语言学习之lambda:lambda函数的简介、使用方法、案例大全之详细攻略
  5. 成功解决matplotlib绘图中描述性字体特殊符号(比如数值的右上角标和右下角标表示)
  6. Django路由分发
  7. HDU - 3068 最长回文(manacher)
  8. Android Studio 添加 Genymotion插件
  9. 软件工程作业----个人读后感
  10. VC中的Unicode