Armv7:return Thumb 代码异常

Armv7: return frome exception to Thumb Code

由于我对 arm 社区的问题没有运气(请参阅 here),我也问你以下问题。

我正在编写一个针对 ARM v7 处理器的 OS,我加载了 ELF32 格式的可执行文件。如果设置了入口点地址的 LSB,则意味着入口点应该以 Thumb 模式执行。我的问题是,如果设置了 lr 的 LSB,movs pc, lr 是否会更新 CPSR.T 位,或者我是否应该在执行之前先手动设置 SPSR.T 位我的 return 来自使用 movs pc, lr.

的异常

编辑: 要 100% 清楚,我的问题是关于入口点在 Thumb 中的应用程序的第一次调度。 return 到.

没有“旧状态”

初始进入较低异常级别的事情是它实际上与正常情况没有任何不同 - 当然,您实际上没有 采取 异常,但在为了 "return",您只需让事情看起来完全一样。

异常入口的 LR 是当时 PC 的直接副本(减去任何首选 return 地址偏移量)因此永远不会设置 lsb - 互通仅适用于分支,异常 entry/return 不是分支。如果您在执行 Thumb 代码时出现异常,LR 值将是真正的半字对齐指令地址,并且 SPSR.T 将被设置,因此这就是您需要构造的状态。