• 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中

     

  • 相关阅读:
    【工具】typora的一些配置
    Python海洋专题七之Cartopy画地形水深图的陆地填充
    【电子通识】为什么高速信号传输要用差分
    关于内存条的知识要点⑴
    软件设计模式(四):观察者、组合、享元模式
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    Java反射工具类
    Docker:从入门到实战过程全记录
    NITON尼通光谱仪维修手持合金分析仪维修概述
    [RK3568 Android11]AudioTrack音频流数据传输
  • 原文地址:https://blog.csdn.net/flyingnosky/article/details/127580158