ARMv8-A 与异常相关的指令

这篇具有很好参考价值的文章主要介绍了ARMv8-A 与异常相关的指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

与异常相关的指令

最近一直在学习 ARMv8-A 的东西,记录一下与异常相关的指令。下面的内容基于AArch64讨论,暂不考虑 AArch32。
与异常生成相关的指令如下所示。下面主要学习 SVCHVC
ARMv8-A 与异常相关的指令,ARMv8-A,arm

1. SVC

SVC (Supervisor Call) 产生一个路由到 EL1 的异常,可以调用系统服务这些。此时,ESR_ELx.EC = 0x15

2. HVC

个人认为这个应该就是用于实现虚拟化相关的指令,要通过 Hypercall 调用虚拟机管理器的一些服务。因为 Hypervisor 的 EL2 就是 Non-Secure,所以要使用 HVC 应该是只能从 Non-Secure EL1 调用,应该就是指 Guest OS 的内核态了。

HVC (Hypervisor Call) 指令用于生成针对 EL2 的异常。就是说,调用这个指令后,会产生一个异常,陷入到 EL2,通常也就是 Hypervisor 会处理这个异常。
在 EL1 运行的非安全软件会调用 Hypervisor 请求一个服务,让 Hypervisor 帮忙做一些事情。但是 EL0 和 Secure EL1 是不可以通过 HVC 陷入 EL2 调用 Hypervisor 的服务的,产生的异常也是 Undefined。按理来说,只有 Non-Secure EL1 才可以顺利执行 HVC 指令。

执行 HVC 指令之后,产生异常,走到异常向量表。通过 ESR_ELx 判断异常的原因,ESR_ELx.EC = 0x16,判断是 HVC类型的异常后,就可以进入我们自己定义好的 Hypercall 处理程序啦。

ESR_ELx 还是一个挺重要的寄存器的。它包含了陷入 ELx 异常的 syndrome (综合征?) 信息。EC 就是异常类型!

ARMv8-A 与异常相关的指令,ARMv8-A,arm

3. ERET (异常返回指令)

ERET 是异常返回指令,它会使用当前异常级别的 ELRSPSR
执行这个指令时,会从 SPSR 中恢复 PSTATE,然后跳转到 ELR 中存放的地址。

肯定是不能在 EL0 里面调用这个指令的!

与内存屏障相关的指令

这部分有点难,主要学习了一下 ISB

1. DMB

2. DSB

DSB 用于同步执行流(execution stream)和内存访问(memory accesses)。

3. ISB

有时候看到操作完 GICv3 的系统寄存器后,还会专门执行 ISB 指令。
ISB 全称是 Instruction Synchronization Barrier,指令同步屏障。

ISB 会刷新CPU的流水线,比如清掉一些预取的指令。只有当 ISB 完成后,才会从缓存或内存中读取 ISB 之后的指令。

Instruction Synchronization Barrier flushes the pipeline in the PE, so that all instructions following the ISB are fetched from cache or memory, after the instruction has been completed.

对于一些系统控制器,它们会控制系统行为。
比如说GICv3中的一些系统寄存器(CPU接口寄存器这些),对它们进行写操作之后是很有必要使用 ISB 同步一下的。个人觉得,GICv2 因为里面的寄存器都是MMIO,所以应该不会使用 ISB 同步。

It ensures that the effects of context changing operations executed before the ISB instruction are visible to the instructions fetched after the ISB. Context changing operations include changing the ASID, TLB maintenance instructions, and all changes to the System registers.

在该指令之后的指令也会受此影响,所以需要同步一下再往下面执行。

In addition, any branches that appear in program order after the ISB instruction are written into the branch prediction logic with the context that is visible after the ISB instruction. This is needed to ensure correct execution of the instruction stream.

备注:图片来自 ARMv8-A 手册。文章来源地址https://www.toymoban.com/news/detail-833262.html

到了这里,关于ARMv8-A 与异常相关的指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Armv8-A memory model guide

    快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门 【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买 【加群】ARM/TEE/ATF/SOC/芯片/安全-学习交

    2024年02月02日
    浏览(43)
  • Armv8-A Instruction Set Architecture

    快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门 【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买 【加群】ARM/TEE/ATF/SOC/芯片/安全-学习交

    2024年02月05日
    浏览(40)
  • 【ARM Cortex-M 系列 3 番外篇 -- ARMv6, ARMv7, ARMv8, ARMv9 架构差异及精简指令集 与 复杂指令集 介绍】

    上篇文章:ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析 ARM架构是一种处理器架构,全称为高级精简指令集计算机(Advanced RISC Machine)。它是英国ARM公司设计的一种精简指令集( RISC )处理器架构,和复杂指令集( CISC )处理器架构相对。 CISC 与 RISC 差异

    2024年02月08日
    浏览(47)
  • Learn the architecture - Before debugging on Armv8-A

    快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门 【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买 【加群】ARM/TEE/ATF/SOC/芯片/安全-学习交

    2024年01月23日
    浏览(50)
  • DP读书:鲲鹏处理器 架构与编程(七)ARMv8-A 体系结构

    大家好,我是DP,一名最近开始研究处理器与服务器的小白,以下是我在阅读 鲲鹏处理器 架构与编程 第二章 ARMv8-A体系结构 的笔记,希望能加深大家对该种架构的理解,但这是相当底层的原理,也是很多提供云原生的服务器底层架构。 2011年11月 ,ARM公司发布 首个支持64位指

    2024年02月12日
    浏览(57)
  • ARMv8 汇编指令

    MOV Xd|SP, Xn|SP MOV Xd|SP, #imm16 常用于寄存器之间的搬移和立即数搬移,   仅仅支持imm16, 0-4096大小范围的立即数操作 MRS: 状态寄存器 -- 通用寄存器的传送指令。 MSR: 通用寄存器 -- 状态寄存器的传送指令。 注意:在ARMv7里通过CP15协处理器方位系统寄存器 还可以访问PSTATE寄存器一

    2024年04月27日
    浏览(42)
  • ARMv8 - 安全机制 - 异常等级

    ARMv8架构处理器有一套异常等级(Exception level)机制,分成4个等级(EL0 ~ EL3)。 处理器运行时会处于其中的某个等级并且可以进行等级切换。 每个异常等级都拥有一些自己版本的特殊寄存器,例如:system ctrl 寄存器(sctlr_el1,sctlr_el2 …),程序状态寄存器(SPSR_EL1,SPSR_EL

    2024年02月13日
    浏览(48)
  • 【ARMv8 编程】A64 内存访问指令——内存加载指令

    与所有先前的 ARM 处理器一样,ARMv8 架构是一种加载/存储架构。这意味着没有数据处理指令直接对内存中的数据进行操作。数据必须首先被加载到寄存器中,修改,然后存储到内存中。该程序必须指定地址、要传输的数据大小以及源或目标寄存器。有额外的加载和存储指令提

    2024年02月02日
    浏览(40)
  • ARMv8 - 安全机制(TrustZone) - 异常等级

    ARMv8架构处理器有一套异常等级(Exception level)机制,分成4个等级(EL0 ~ EL3)。 处理器运行时会处于其中的某个等级并且可以进行等级切换。 每个异常等级都拥有一些自己版本的特殊寄存器,例如:system ctrl 寄存器(sctlr_el1,sctlr_el2 …),程序状态寄存器(SPSR_EL1,SPSR_EL

    2024年01月16日
    浏览(42)
  • 浅析ARMv8体系结构:异常处理机制

    异常处理指的是处理器在运行过程中发生了外部事件,导致处理器需要中断当前执行流程转而去处理异常事件的一种机制。在Intel处理器的术语中,中断与异常被分开来描述,但在ARMv8体系结构中,异常和中断统一被称为异常处理。 在ARMv8体系结构中,广义上的异常可以分成同

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包