Assembly qemu中忽略armv5te上的校准故障

Assembly qemu中忽略armv5te上的校准故障,assembly,exception-handling,arm,qemu,Assembly,Exception Handling,Arm,Qemu,我在QEMU中运行了一个为arm编译的简单应用程序。我对内存对齐错误感兴趣,例如,我有如下说明: ldr r3, =0xa0000001 ldr r4, [r3] 我已启用MMU和对齐检查: mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #0x3 mcr p15, 0, r0, c1, c0, 0 但当处理器执行上面的指令(如ldrs)时,不会调用我的数据中止异常处理程序(我已验证它在gdb中工作)。仿真核心是ARMv5TE。有什么问题吗?我不是100%确定,但

我在QEMU中运行了一个为arm编译的简单应用程序。我对内存对齐错误感兴趣,例如,我有如下说明:

ldr r3, =0xa0000001
ldr r4, [r3]
我已启用MMU和对齐检查:

mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #0x3
mcr p15, 0, r0, c1, c0, 0

但当处理器执行上面的指令(如
ldr
s)时,不会调用我的数据中止异常处理程序(我已验证它在
gdb
中工作)。仿真核心是ARMv5TE。有什么问题吗?

我不是100%确定,但我认为只有QEMU才不会为这种例外情况而烦恼。在真正的董事会上,我保证你会因此受到严厉的惩罚。:)QEMU(不了解ARM,但至少x86)是一个很好的测试仿真器(即测试整个系统是否正常工作),但在一些未在现实生活中使用的特性上表现不佳,如异常。使用另一个仿真器(通常,总是将多个仿真器与真实机器一起使用,以仔细检查您的系统是否为一个特定的机器/仿真器编写)。您在哪里设置了V位和A位?根据ARM手册第B.2.7.6节“因此,在以下示例中(A=1,V=0),LDR可能会或可能不会因未对齐的事务而进行数据中止,但如果发生异常,所使用的向量将受到V位:内存顺序模型”
MCR p15,r0,c1,c0,0;清除A位并设置V位LDR r2,[R3];未对齐的加载。
还读回A位以验证它是否已实现。这可能被模仿,也可能不被模仿。