GIC/ITS代码分析(5)exception处理流程

        中断为异步exception。在介绍中断处理之前,介绍exception通用处理过程。

1 exception分类

        ARM架构异常分为同步异常和异步异常。

        同步异常是指尝试执行指令时生成的异常,且返回的地址提供造成异常的详细信息。异步异常是指并不是由执行指令产生,且返回的地址不能提供造成异常的详细信息。

        通常异步异常源有IRQ,FIQ和SError。

        同步异常源有:

  1. 来自MMU的指令abort。比如,通过读取标记为Execute Never的内存位置的指令
  2. 来自MMU的数据abort。比如,权限失败或对齐检查
  3. SP和PC对齐检查
  4. Synchronous外部abort。比如,当读取转换表时产生abort
  5. 未分配指令
  6. 调试异常

2 exception处理

当一个异常产生时:

(1)处理器自动执行一些操作如下:

- 保存当前处理器状态PSTATE到SPSR_EL1中

- 将返回地址PC保存到ELR_EL1中

其中若是系统调用时,返回地址为系统调用指令后面的指令

若是除了系统调用外的其他同步异常,返回地址为生成异常的指令

若为异步异常,返回地址为没有执行的下一条指令

- 将DAIF异常屏蔽

- 若是同步异常,生成异常的原因存放在ESR_EL1,生成异常的地址存放在FAR_EL1

- 若当前处于EL0,陷入到EL1

(2)kernel_entry elx保存通用寄存器到进程栈下

(3)跳转至异常向量表中对应的entry,执行每个向量entry对应的handler

(4)执行完向量entry对应的handler,若要返回用户态,调用ret_to_user;若要返回内核态,调用ret_to_kernel

- 对于ret_to_user,恢复用户态栈指针sp_el0,恢复通用寄存器,eret返回

- 对于ret_to_kernel,恢复通用寄存器,eret返回

(5)当执行完ERET,处理器自动将保存的处理器状态SPSR_EL1返回到PSTATE,将ELR_EL1保存到PC中

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值