我正在编写线程切换代码,其中内核将相关状态转储到内存,但实际的线程切换完全发生在用户模式下。
这可以正常工作,除非抢占点出现在 Thumb If-Then (IT) 块内。在那种情况下,我无法弄清楚如何恢复 ITSTATE(即 CPSR 的 [15:10] 和 [26:25] 位),因为这些位是用户 RAZ/WI,并且无论如何它可能不会给定 ITSTATE 的语义。
什么(如果有)是在不陷入内核的情况下恢复此状态的正确方法?
我已经考虑过倒带执行并从 IT 指令继续,但除了重量很大之外,我不确定这是否总是可能的。
编辑:对 ARMv7-A 感兴趣