ARM アーキテクチャでは、例外からの復帰は、私が知っている 2 つの方法で行うことができます (他にもあるかもしれません)。しかし、主なロジックは PC を変更することです。これにより、プロセッサのトリガーが CPSR で設定されたモードになります。
したがって、 pop {...,pc} は、スーパーバイザーまたは mov pc,lr のユーザーが同じことを行うように切り替えます。
私の質問は、BX lr が切り替えを行うかどうかです。IRQ を処理していて、do_IRQ と言うアセンブリ ルーチンを呼び出し、do_IRQ からの戻りが BX LR 経由であると仮定します。これにより、フォールト ハンドラの bl do_IRQ の後のコードが無関係になりますか?
irq_fault_handler:
push {lr}
push {ro-r12}
mrs r0, spsr
push {r0}
bl do_IRQ
pop {r0}
msr cpsr, r0
pop {r0,-r12}
pop {lr}
subs pc, lr, #4
do_IRQ:
...
BX LR