我为 ARM 编译了 v8,它可以在大多数 arm6/7 手机上正常加载。加载本机库时,某些特定设备(如 HTC Wildfire S)会崩溃。
这是SIGILL
我得到的(无效指令):
31-31/? I/DEBUG﹕ *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
31-31/? I/DEBUG﹕ Build fingerprint: 'generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys'
31-31/? I/DEBUG﹕ pid: 312, tid: 312 >>> org.myapp <<<
31-31/? I/DEBUG﹕ signal 4 (SIGILL), fault addr 81494f98
31-31/? I/DEBUG﹕ r0 00000001 r1 00000003 r2 81494f8e r3 81494f8c
31-31/? I/DEBUG﹕ r4 8198a26c r5 00000003 r6 00000004 r7 00000000
31-31/? I/DEBUG﹕ r8 42189eac r9 00000374 10 0000ce04 fp bef6765c
31-31/? I/DEBUG﹕ ip 8124695c sp bef67658 lr b0001169 pc 81494f98 cpsr 80000010
31-31/? I/DEBUG﹕ #00 pc 00494f98 /data/data/org.myapp/lib/libjv8.so
我可以ndk-stack
用来获取 v8 中崩溃的特定行,但它实际上是指一个宏,所以我不知道正在执行哪个特定指令。
我尝试使用 连接到设备gdb-server
,但没有提供有关该指令的更多详细信息:
Program received signal SIGILL, Illegal instruction.
0x81494f98 in ?? ()
所以我有点失落。有没有办法翻译0x81494f98
成特定的 ARM 指令?