【发布时间】: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