在arm7上启用浮点异常时未更新fpscr寄存器,未生成SIGFPE

时间:2015-05-14 18:39:39

标签: debugging android-ndk floating-point arm

fpscr寄存器未更新且未生成SIGFPE。这是在NVidia Shield平板电脑和第一代Nexus 7上测试的。

feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);

实现调用代码,最终执行此程序集:

  asm _volatile__("vmsr fpscr,%0" : :"ri" (fpscr));
  ; disassembly follows
  ldr r3, [r11, #-8] 
  vmsr fpscr, r3

vmsr fpscr未更新。当它应该更新为0x20000710时,它仍然是0x20000010。

使用-mfloat-abi=soft-mfloat-abi=softfp进行测试。

我能得出什么结论?

1 个答案:

答案 0 :(得分:5)

ARM ARM可以解释FPSCR中的所有异常捕获位:

  

[...]。仅当实现支持捕获浮点异常时,此位才是RW。在不支持浮点异常捕获的实现中,该位为RES0。

SHIELD平板电脑中的Tegra K1 SoC具有Cortex-A15 CPU,don't support VFP exception trapping

原始Nexus 7中的Tegra 3 SoC具有Cortex-A9 CPU(带有VFP + NEON实现),don't support VFP exception trapping

特别无益的是,从用户空间,您甚至无法访问MVFR0功能寄存器以编程方式找到它。

我认为你只能得出结论,你没有任何支持被困异常的硬件;)