tma*_*dry 10 c++ assembly android arm android-ndk
我在市场上有一个NDK应用程序,并获得有关SIGILL
信号的本机崩溃报告.(我使用google breakpad生成本机崩溃报告.)以下是详细信息:
armeabi-v7a
,与 NEON支持.0x399cc
,信号是SIGILL
,并且它在我的代码中.登记和拆卸:
r4 = 0x001d50f0 r5 = 0x001d50f0 r6 = 0x598e2a3c r7 = 0x00000000
r8 = 0x00000001 r9 = 0x001c22b0 r10 = 0x00000000 fp = 0x81216264
sp = 0x598e2a18 lr = 0x816399cb pc = 0x816399cc
0x000399c6 <_ZN8Analyzer15setExpAvgFactorEi+22>: blx 0x30508
0x000399ca <_ZN8Analyzer15setExpAvgFactorEi+26>: fconstd d16, #7
0x000399ce <_ZN8Analyzer15setExpAvgFactorEi+30>: vldr d17, [pc, #32] ; 0x399f2 <_ZN8Analyzer15setExpAvgFactorEi+66>
Run Code Online (Sandbox Code Playgroud)
这里有完整的源代码和汇编程序(很简单,基本上是2行C++.)
你可以看到它0x399cc
在fconstd
指令的中间.根据arm.com的说法添加了这个指令VFP-v3
,应该(我认为)可以在任何现代处理器中使用.
会发生什么事?地址是否在指令中间的事实是否指向某处的损坏指针?(请注意,回溯非常有意义,所以它并不像这个功能在某种程度上被意外调用.)或者它是否是别的东西?
Jay*_*ik- 16
好吧,我明白了:NVIDIA Tegra 2只有16个64位GPU寄存器,因此要定位它,你必须使用-mfpu=vfpv3-d16
.有问题的指令使用寄存器d16
,这是"太多".:(
以下是对NVIDIA论坛的引用,其中员工提及此限制:http://developer.nvidia.com/tegra/forum/optimal-performance-guidelines