【问题标题】:SIGILL in android native code on NVIDIA Tegra 2 (on BL instruction)SIGILL 在 NVIDIA Tegra 2 上的 android 本机代码中(在 BL 指令上)
【发布时间】:2012-03-16 09:38:15
【问题描述】:

我在本机代码中遇到了严重的崩溃。 到目前为止,我的代码在所有设备上运行良好,除了这个:

LG-P990(配备 NVIDIA Tegra 2 双核 1 GHz 处理器)。

LG-P990 / ORIGINAL / LGE/LGE_STAR/P990/P990:2.2.2/FRG83G/LGP990-V10D.2ED2ED2216:USER/RELEASE-KEYS

每次都会发生。

崩溃似乎在属于 libc++ 的代码中(所以我没有相应的 C++ 代码)。我一定错过了什么,因为崩溃似乎是在 BL 指令上?

Application.mk 配置为针对所有平台构建,因此相关手机应使用 armeabi-v7a。

1022  1022 I DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
1022  1022 I DEBUG   : Build fingerprint: 'lge/lge_star/p990/p990:2.2.2/FRG83G/lgp990-V10d.2ED2ED2216:user/release-keys'
1022  1022 I DEBUG   : pid: 3932, tid: 3942  >>> com.package.appdebug <<<
1022  1022 I DEBUG   : signal 4 (SIGILL), fault addr 819372a8
1022  1022 I DEBUG   :  r0 00000000  r1 4056c000  r2 00000000  r3 002fe356
1022  1022 I DEBUG   :  r4 00000000  r5 002fe354  r6 4a754540  r7 4a7543c8
1022  1022 I DEBUG   :  r8 4a7543b0  r9 00000000  10 00000000  fp ffffffff
1022  1022 I DEBUG   :  ip 00000002  sp 4a754310  lr 819372a0  pc 819372a8  cpsr 20000010
1022  1022 I DEBUG   :  d0  000084c000002601  d1  461c0000bf800000
1022  1022 I DEBUG   :  d2  461c0800461c0400  d3  bf800000461c0c00
1022  1022 I DEBUG   :  d4  0000005b00000000  d5  00000000000084c0
1022  1022 I DEBUG   :  d6  4056c00000000000  d7  4056c00000000000
1022  1022 I DEBUG   :  d8  0000000000000000  d9  0000000000000000
1022  1022 I DEBUG   :  d10 0000000000000000  d11 0000000000000000
1022  1022 I DEBUG   :  d12 0000000000000000  d13 0000000000000000
1022  1022 I DEBUG   :  d14 0000000000000000  d15 0000000000000000
1022  1022 I DEBUG   :  scr 20000012
1022  1022 I DEBUG   : 
1022  1022 I DEBUG   :          #00  pc 001372a8  /data/data/com.package.appdebug/lib/libthor.so
1022  1022 I DEBUG   :          #01  lr 819372a0  /data/data/com.package.appdebug/lib/libthor.so
1022  1022 I DEBUG   : 
1022  1022 I DEBUG   : code around pc:
1022  1022 I DEBUG   : 81937288 e3a00006 e08f1001 ebfcf395 e1a00005 
1022  1022 I DEBUG   : 81937298 e28d1004 ebfcf251 e59d3004 e1530005 
1022  1022 I DEBUG   : 819372a8 ec410b30 eef77be0 edc67a00 0a000002 
1022  1022 I DEBUG   : 819372b8 e5d33000 e3530000 0a00000c eddf7a25 
1022  1022 I DEBUG   : 819372c8 e3a03004 edc67a00 e5873000 e3a00006 
1022  1022 I DEBUG   : 
1022  1022 I DEBUG   : code around lr:
1022  1022 I DEBUG   : 81937280 ebfcf20d e59f10e8 e3a00006 e08f1001 
1022  1022 I DEBUG   : 81937290 ebfcf395 e1a00005 e28d1004 ebfcf251 
1022  1022 I DEBUG   : 819372a0 e59d3004 e1530005 ec410b30 eef77be0 
1022  1022 I DEBUG   : 819372b0 edc67a00 0a000002 e5d33000 e3530000 
1022  1022 I DEBUG   : 819372c0 0a00000c eddf7a25 e3a03004 edc67a00 
1022  1022 I DEBUG   : 
1022  1022 I DEBUG   : stack:
1022  1022 I DEBUG   :     4a7542d0  81969250  
1022  1022 I DEBUG   :     4a7542d4  8192b700  /data/data/com.package.appdebug/lib/libthor.so
1022  1022 I DEBUG   :     4a7542d8  0000002d  
1022  1022 I DEBUG   :     4a7542dc  00000000  
1022  1022 I DEBUG   :     4a7542e0  00000000  
1022  1022 I DEBUG   :     4a7542e4  00000000  
1022  1022 I DEBUG   :     4a7542e8  00000000  
1022  1022 I DEBUG   :     4a7542ec  00000000  
1022  1022 I DEBUG   :     4a7542f0  00000000  
1022  1022 I DEBUG   :     4a7542f4  00000000  
1022  1022 I DEBUG   :     4a7542f8  00000000  
1022  1022 I DEBUG   :     4a7542fc  00000000  
1022  1022 I DEBUG   :     4a754300  002fe354  [heap]
1022  1022 I DEBUG   :     4a754304  4a754540  
1022  1022 I DEBUG   :     4a754308  df002777  
1022  1022 I DEBUG   :     4a75430c  e3a070ad  
1022  1022 I DEBUG   : #00 4a754310  4a7543c8  
1022  1022 I DEBUG   :     4a754314  002fe356  [heap]
1022  1022 I DEBUG   :     4a754318  4a754368  
1022  1022 I DEBUG   :     4a75431c  4a754358  
1022  1022 I DEBUG   :     4a754320  4a754368  
1022  1022 I DEBUG   :     4a754324  4a7543c8  
1022  1022 I DEBUG   :     4a754328  002fe354  [heap]
1022  1022 I DEBUG   :     4a75432c  4a7543b0  
1022  1022 I DEBUG   :     4a754330  81969348  
1022  1022 I DEBUG   :     4a754334  8192cb34  /data/data/com.package.appdebug/lib/libthor.so
1022  1022 I DEBUG   :     4a754338  00000000  
1022  1022 I DEBUG   :     4a75433c  ffffffff  
1022  1022 I DEBUG   :     4a754340  4a754420  
1022  1022 I DEBUG   :     4a754344  4a7543c8  
1022  1022 I DEBUG   :     4a754348  4a754368  
1022  1022 I DEBUG   :     4a75434c  00000000  
1022  1022 I DEBUG   :     4a754350  4a7543f8  
1022  1022 I DEBUG   :     4a754354  00000020  

这是目标文件的反汇编: 崩溃(程序计数器)是地址 137270

00137238 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi>:
  137238:   e92d45f0    push    {r4, r5, r6, r7, r8, sl, lr}
  13723c:   e1a05000    mov r5, r0
  137240:   e24dd00c    sub sp, sp, #12 ; 0xc
  137244:   e1a06001    mov r6, r1
  137248:   e3a00006    mov r0, #6  ; 0x6
  13724c:   e3a01000    mov r1, #0  ; 0x0
  137250:   e1a07002    mov r7, r2
  137254:   ebfcf3a4    bl  740ec <_ZN7_JNIEnv12NewGlobalRefEP8_jobject-0x7c>
  137258:   e250a000    subs    sl, r0, #0  ; 0x0
  13725c:   01a0400a    moveq   r4, sl
  137260:   0a00000b    beq 137294 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x5c>
  137264:   ebfcf250    bl  73bac <_ZN7_JNIEnv12NewGlobalRefEP8_jobject-0x5bc>
  137268:   e2808001    add r8, r0, #1  ; 0x1
  13726c:   e1a00008    mov r0, r8
  137270:   eb000b5b    bl  139fe4 <_Znaj>
  137274:   e1a0100a    mov r1, sl
  137278:   e1a02008    mov r2, r8
  13727c:   e1a04000    mov r4, r0
  137280:   ebfcf20d    bl  73abc <_ZN7_JNIEnv12NewGlobalRefEP8_jobject-0x6ac>
  137284:   e59f10e8    ldr r1, [pc, #232]  ; 137374 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x13c>
  137288:   e3a00006    mov r0, #6  ; 0x6
  13728c:   e08f1001    add r1, pc, r1
  137290:   ebfcf395    bl  740ec <_ZN7_JNIEnv12NewGlobalRefEP8_jobject-0x7c>
  137294:   e1a00005    mov r0, r5
  137298:   e28d1004    add r1, sp, #4  ; 0x4
  13729c:   ebfcf251    bl  73be8 <_ZN7_JNIEnv12NewGlobalRefEP8_jobject-0x580>
  1372a0:   e59d3004    ldr r3, [sp, #4]
  1372a4:   e1530005    cmp r3, r5
  1372a8:   ec410b30    vmov    d16, r0, r1
  1372ac:   eef77be0    fcvtsd  s15, d16
  1372b0:   edc67a00    fsts    s15, [r6]
  1372b4:   0a000002    beq 1372c4 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x8c>
  1372b8:   e5d33000    ldrb    r3, [r3]
  1372bc:   e3530000    cmp r3, #0  ; 0x0
  1372c0:   0a00000c    beq 1372f8 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0xc0>
  1372c4:   eddf7a25    flds    s15, [pc, #148]
  1372c8:   e3a03004    mov r3, #4  ; 0x4
  1372cc:   edc67a00    fsts    s15, [r6]
  1372d0:   e5873000    str r3, [r7]
  1372d4:   e3a00006    mov r0, #6  ; 0x6
  1372d8:   e1a01004    mov r1, r4
  1372dc:   ebfcf382    bl  740ec <_ZN7_JNIEnv12NewGlobalRefEP8_jobject-0x7c>
  1372e0:   e3540000    cmp r4, #0  ; 0x0
  1372e4:   0a000001    beq 1372f0 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0xb8>
  1372e8:   e1a00004    mov r0, r4
  1372ec:   eb0000ea    bl  13769c <_ZdaPv>
  1372f0:   e28dd00c    add sp, sp, #12 ; 0xc
  1372f4:   e8bd85f0    pop {r4, r5, r6, r7, r8, sl, pc}
  1372f8:   eef00be0    fabsd   d16, d16
  1372fc:   eddf1b15    vldr    d17, [pc, #84]  ; 137358 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x120>
  137300:   eef40be1    fcmped  d16, d17
  137304:   eef1fa10    fmstat
  137308:   da000005    ble 137324 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0xec>
  13730c:   eef57ac0    fcmpezs s15
  137310:   eef1fa10    fmstat
  137314:   da00000a    ble 137344 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x10c>
  137318:   eddf7a11    flds    s15, [pc, #68]
  13731c:   edc67a00    fsts    s15, [r6]
  137320:   ea000009    b   13734c <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x114>
  137324:   ed9f7a0f    flds    s14, [pc, #60]
  137328:   eef47a47    fcmps   s15, s14
  13732c:   eef1fa10    fmstat
  137330:   0afffff8    beq 137318 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0xe0>
  137334:   ed9f7a0c    flds    s14, [pc, #48]
  137338:   eef47a47    fcmps   s15, s14
  13733c:   eef1fa10    fmstat
  137340:   1affffe3    bne 1372d4 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x9c>
  137344:   eddf7a09    flds    s15, [pc, #36]
  137348:   edc67a00    fsts    s15, [r6]
  13734c:   e3a03004    mov r3, #4  ; 0x4
  137350:   e5873000    str r3, [r7]
  137354:   eaffffde    b   1372d4 <_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi+0x9c>
  137358:   e0000000    and r0, r0, r0
  13735c:   47efffff    undefined
  137360:   00000000    andeq   r0, r0, r0
  137364:   7f7fffff    svcvc   0x007fffff
  137368:   7f800000    svcvc   0x00800000
  13736c:   ff800000    undefined instruction 0xff800000
  137370:   ff7fffff    undefined instruction 0xff7fffff
  137374:   0001caa8    andeq   ip, r1, r8, lsr #21

有什么想法吗?

【问题讨论】:

  • 我认为您的崩溃实际上发生在 0x1372a8 --- 如果您查看寄存器转储正下方的位,您可以看到 Android 已自动为您计算偏移量。您能否扩展反汇编以包含该地址?
  • 顺便说一句,总是值得检查“pc 周围代码”部分中的字节是否与反汇编相匹配,以确保您正在寻找正确的位置。它们不会完美匹配,因为反汇编会在修复之前向您显示说明,但仔细检查这已经多次保存了我的培根。
  • 感谢@DavidGiven 的侦探工作 - 已更新反汇编
  • 我想你破案了,大卫。 0x1372a8 是一个 vmov 指令,它是一个 NEON 指令。而且 Tegra2 不支持 NEON。如果您将评论放在答案中,我会立即将其标记为已接受:)
  • 很高兴能帮上忙 --- 答案已写。

标签: android assembly android-ndk


【解决方案1】:

我认为您的崩溃实际上发生在 0x1372a8 --- 如果您查看寄存器转储正下方的位,您会看到 Android 已自动为您计算偏移量。 (它并不总是正确的。看看lr地址如何没有被修改?然而,Android总是在对齐的地址加载共享对象,所以地址的底部四位或五位匹配,这很容易弄清楚地址应该是什么。)

顺便说一句,始终值得检查“pc 周围的代码”部分中的字节是否与反汇编相匹配,以确保您在正确的位置查找。它们不会完美匹配,因为反汇编会在修复之前向您显示说明,但是仔细检查这已经多次保存了我的培根。

【讨论】:

  • 你是杰出的大卫。有关错误的实际原因的更多信息:它是错误的 NDK-v7b。请参阅此处的错误code.google.com/p/android/issues/detail?id=26199#c2。基本上包含的 gnustl 是在支持 NEON 的情况下编译的,这当然会在非 NEON 处理器上崩溃。
猜你喜欢
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多