JIT テーブル (/dalvik/vm/Globals.h の pJitEntryTable) の構造を、連鎖配列 (一種のハッシュ) からハッシュ テーブルと B ツリーの組み合わせに変更しました。PC に基づいてハッシュされた値を見つけ、対応する JitEntry (dalvik アドレス、変換されたアドレス) を、ハッシュされたインデックスが指す b ツリーに入力します。コードを正常にビルドし、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