0

我已将 JIT 表(/dalvik/vm/Globals.h 中的 pJitEntryTable)的结构从链式数组(哈希排序)更改为哈希表和 B 树的组合。它根据PC找到散列值,并将对应的JitEntry(dalvik地址,翻译地址)输入到散列索引指向的b-tree中。我成功构建了代码并将 libdvm.so 文件推送到模拟器中,并通过杀死 zygote 重新启动了模拟器。但是启动屏幕无限显示“android”,当我执行 $adb logcat 时,我发现以下日志

   I/DEBUG   (   33): *** *** *** *** *** *** *** *** *** *** *** *** 
*** *** *** *** 
I/DEBUG   (   33): Build fingerprint: 'generic/sdk/generic:4.0.3/ 
MR1/237985:eng/test-keys' 
I/DEBUG   (   33): pid: 491, tid: 520  >>> system_server <<< 
I/DEBUG   (   33): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault 
addr 002e0080 
I/DEBUG   (   33):  r0 002e0081  r1 4d685228  r2 00000014  r3 002e006d 
I/DEBUG   (   33):  r4 4d685228  r5 51669e38  r6 001de3b8  r7 000086f4 
I/DEBUG   (   33):  r8 407d9dc0  r9 00000002  10 00000000  fp 520a0e68 
I/DEBUG   (   33):  ip 00000030  sp 520a0da0  lr 00000000  pc 
002e0080  cpsr 20000030 
I/DEBUG   (   33):  d0  437000004382353f  d1  3ff0000043700000 
I/DEBUG   (   33):  d2  3ff0000000000000  d3  4197d78400000000 
I/DEBUG   (   33):  d4  3ff0000000000000  d5  4028000000000000 
I/DEBUG   (   33):  d6  43e0000000000000  d7  000000f000000000 
I/DEBUG   (   33):  d8  0000000000000000  d9  0000000000000000 
I/DEBUG   (   33):  d10 0000000000000000  d11 0000000000000000 
I/DEBUG   (   33):  d12 0000000000000000  d13 0000000000000000 
I/DEBUG   (   33):  d14 0000000000000000  d15 0000000000000000 
I/DEBUG   (   33):  scr 80000012 
I/DEBUG   (   33): 
D/dalvikvm(  491): in getCodeAddrCommon function 
D/dalvikvm(  491): searching in the JIT table 
I/DEBUG   (   33):          #00  pc 002e0080 
I/DEBUG   (   33):          #01  lr 00000000  <unknown> 
I/DEBUG   (   33): 
I/DEBUG   (   33): code around pc: 
I/DEBUG   (   33): 002e0060 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 002e0070 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 002e0080 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 002e0090 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 002e00a0 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 
I/DEBUG   (   33): code around lr: 
I/DEBUG   (   33): 00000000 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 00000010 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 00000020 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 00000030 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 00000040 ffffffff ffffffff ffffffff 
ffffffff  ................ 
I/DEBUG   (   33): 
I/DEBUG   (   33): memory map around addr 002e0080: 
I/DEBUG   (   33): 0000b000-00237000 [heap] 
I/DEBUG   (   33): (no map for address) 
I/DEBUG   (   33): 10000000-10001000 
I/DEBUG   (   33): 
I/DEBUG   (   33): stack: 
I/DEBUG   (   33):     520a0d60  4d685228  /system/framework/ 
framework.odex 
I/DEBUG   (   33):     520a0d64  00000000 
I/DEBUG   (   33):     520a0d68  00000000 
I/DEBUG   (   33):     520a0d6c  407d9dc0  /system/lib/libdvm.so 
I/DEBUG   (   33):     520a0d70  00000002 
I/DEBUG   (   33):     520a0d74  00000000 
I/DEBUG   (   33):     520a0d78  520a0e68 
I/DEBUG   (   33):     520a0d7c  4083c78b  /system/lib/libdvm.so 
I/DEBUG   (   33):     520a0d80  4d685228  /system/framework/ 
framework.odex 
I/DEBUG   (   33):     520a0d84  51669e38 
I/DEBUG   (   33):     520a0d88  001de3b8  [heap] 
I/DEBUG   (   33):     520a0d8c  000086f4  /system/bin/app_process 
I/DEBUG   (   33):     520a0d90  407d9dc0  /system/lib/libdvm.so 
I/DEBUG   (   33):     520a0d94  4083c7e5  /system/lib/libdvm.so 
I/DEBUG   (   33):     520a0d98  df0027ad 
I/DEBUG   (   33):     520a0d9c  00000000 
I/DEBUG   (   33): #00 520a0da0  00000000 
I/DEBUG   (   33):     520a0da4  001de3b8  [heap] 
I/DEBUG   (   33):     520a0da8  4086ef90  /system/lib/libdvm.so 
I/DEBUG   (   33):     520a0dac  520a0dd8 
I/DEBUG   (   33):     520a0db0  44e6bb60  /dev/ashmem/dalvik- 
LinearAlloc (deleted) 
I/DEBUG   (   33):     520a0db4  520a0e1c 
I/DEBUG   (   33):     520a0db8  00000000 
I/DEBUG   (   33):     520a0dbc  fffffe60 
I/DEBUG   (   33):     520a0dc0  520a0e68 
I/DEBUG   (   33):     520a0dc4  407ef200  /system/lib/libdvm.so 
I/DEBUG   (   33):     520a0dc8  00000000 
I/DEBUG   (   33):     520a0dcc  00000000 
I/DEBUG   (   33):     520a0dd0  00000000 
I/DEBUG   (   33):     520a0dd4  520a0eb8 
I/DEBUG   (   33):     520a0dd8  00000000 
I/DEBUG   (   33):     520a0ddc  00000000 
I/DEBUG   (   33):     520a0de0  00000000 
I/DEBUG   (   33):     520a0de4  00000000 
I don't understand the error. Do i need to make any adjustments to the 
jit code cache size and heap size? Any help regarding this will be 
appreciated. 
Thanks
4

1 回答 1

1

这是一个段错误崩溃。有东西试图访问尚未分配的内存段,否则不允许访问。这很可能表明您所做的 libdvm 更改中存在错误。

调试会很棘手。我会尝试构建一个链接它的 libdvm_new.so 和 dalvikvm_new 二进制文件,并将它们推送到设备/模拟器(而不是替换现有的 libdvm.so 和 dalvikvm),然后使用 gdb-server 和 gdb 调试 dalvikvm_new ,在命令行类型程序(典型的静态 void main(String[] args) 类型程序)上。

于 2012-04-26T17:01:57.063 回答