
ARM8 异常处理
ARM8 异常向量表
ARMv8 异常向量表分类
4大类(Execution Levels)
EL3(Exception Level 3): 安全监控模式,通常用于安全监控代码。
EL2(Exception Level 2): Hypervisor模式,用于虚拟化管理。
EL1(Exception Level 1): 内核模式,操作系统内核运行在该模式。
EL0(Exception Level 0): 用户模式,应用程序运行在该模式。
每类下的4种具体情况
对于每个执行级别,异常向量表分为以下4种具体情况:
Synchronous Exception(同步异常): 例如指令未定义、指令中止、数据中止等。
IRQ(Interrupt Request): 普通中断。
FIQ(Fast Interrupt Request): 快速中断。
SError(System Error): 系统错误。
简单代码示范
adr x0,vectors // 读取异常向量表的首地址
msr vbar_el1,x0 // 设置异常表的基地址
svc #2 // 系统调用(触发同步异常陷入,sp_el进入不同的异常) 类似swi指令
设置异常处理简单案例
.globl _start // 声明_start为全局符号,程序的入口点
_start:
mrs x1, SPSel // 将当前SP选择状态加载到x1
mrs x2, CurrentEL // 将当前异常级别加载到x2
mov x0, #0 // 将0加载到x0
//msr SPSel, x0 // 可选:将x0的值写入SPSel寄存器
mov x0, #0x5 // 将0x5加载到x0
adr x0, vectors // 获取vectors标签的地址并加载到x0
msr vbar_el1, x0 // 设置向量基址寄存器vbar_el1为x0的值
svc #0x02 // 触发系统调用
reset_end:
b reset_end // 进入无限循环,保持在reset_end标签
do_bad_sync:
mov x2, #1 // 将1加载到x2,表示同步异常
b reset_end // 跳转到reset_end,进入无限循环
do_bad_irq:
mov x2, #2 // 将2加载到x2,表示IRQ异常
b reset_end // 跳转到reset_end,进入无限循环
.align 11 // 2^11 = 2048字节对齐,整个异常向量表2K对齐
// 16个异常,每个异常32条指令,16*32*4=2048
// 16个异常,这里使用前8个
vectors:
// ===============sp0===============
// ---同步异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b do_bad_sync // 跳转到do_bad_sync处理例程
// ---irq异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b do_bad_irq // 跳转到do_bad_irq处理例程
// ---fiq异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b reset_end // 跳转到reset_end,进入无限循环
// ---SError异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b reset_end // 跳转到reset_end,进入无限循环
// ===============sp_elx===============
// ---同步异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b do_bad_sync // 跳转到do_bad_sync处理例程
// ---irq异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b do_bad_irq // 跳转到do_bad_irq处理例程
// ---fiq异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b reset_end // 跳转到reset_end,进入无限循环
// ---SError异常
.align 7 // 2^7 = 128字节对齐
mov x0, #1 // 将1加载到x0
b reset_end // 跳转到reset_end,进入无限循环
取消msr SPSel, x0
的注释,修改SPSel
的值来设置偏移向的地址。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术