发生 FIQ 时从 el3 返回到 nwd 32 位进程时出现段错误
Segmentation fault when returned from el3 to nwd 32-bit proccess when FIQ occured
I 运行 带有信任区仿真的 qemu。 64 位 Linux 在普通世界 (NWD) EL1 中是 运行,一些专有代码在 EL3 和安全世界 (SWD) EL1 中是 运行。我也有这样的中断配置:
1) 为 SWD 分配 FIQ;
2) 为 NWD 分配 IRQ。
另外nwd可以被FIQ打断的三种情况:
1) NWD 在内核模式下执行 (64-bit Linux)
2) NWD 是在 64 位用户模式下执行的
3) NWD 在 32 位用户模式下执行
发生FIQ时被EL3捕获。然后 NWD 上下文被 EL3 的代码保存并且 FIQ 的处理程序开始执行。
从 el3 返回到 NWD 1),2) 情况下一切正常 - 中断的过程继续工作。
但是在案例 3) 从 el3 返回到 NWD 后,中断的进程发生了分段错误。这也是从 el3 返回到 NWD EL0 之前 spsr_el3 寄存器的值 - 0x600f0010 - 看起来不错。
此外,我已经比较了案例 3 在 EL3 中保存和恢复的上下文,它看起来也不错。
看起来这是 qemu 中的一些错误。有人知道是什么问题吗?
其实我已经解决了。问题出在文件 'op_helper.c' 中执行 'eret' 指令时:'env->regs [15]=env->elr_el [1] & ~0x1;'。 “1”需要更改为 'cur_el'。此错误已在最新的 qemu 中修复,因此我需要更新我的。
I 运行 带有信任区仿真的 qemu。 64 位 Linux 在普通世界 (NWD) EL1 中是 运行,一些专有代码在 EL3 和安全世界 (SWD) EL1 中是 运行。我也有这样的中断配置: 1) 为 SWD 分配 FIQ; 2) 为 NWD 分配 IRQ。
另外nwd可以被FIQ打断的三种情况: 1) NWD 在内核模式下执行 (64-bit Linux) 2) NWD 是在 64 位用户模式下执行的 3) NWD 在 32 位用户模式下执行
发生FIQ时被EL3捕获。然后 NWD 上下文被 EL3 的代码保存并且 FIQ 的处理程序开始执行。 从 el3 返回到 NWD 1),2) 情况下一切正常 - 中断的过程继续工作。 但是在案例 3) 从 el3 返回到 NWD 后,中断的进程发生了分段错误。这也是从 el3 返回到 NWD EL0 之前 spsr_el3 寄存器的值 - 0x600f0010 - 看起来不错。 此外,我已经比较了案例 3 在 EL3 中保存和恢复的上下文,它看起来也不错。 看起来这是 qemu 中的一些错误。有人知道是什么问题吗?
其实我已经解决了。问题出在文件 'op_helper.c' 中执行 'eret' 指令时:'env->regs [15]=env->elr_el [1] & ~0x1;'。 “1”需要更改为 'cur_el'。此错误已在最新的 qemu 中修复,因此我需要更新我的。