0

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
4

1 に答える 1

1

これはセグメンテーション クラッシュです。割り当てられていないか、アクセスが許可されていないメモリのセグメントに何かがアクセスしようとしています。これは、行った libdvm の変更にバグがある可能性が高いことを示しています。

デバッグは難しいでしょう。私が試みることは、それに対してリンクする libdvm_new.so および dalvikvm_new バイナリを構築し、それらを (既存の libdvm.so および dalvikvm を置き換えるのではなく) デバイス/エミュレーターにプッシュし、gdb-server および gdb を使用して dalvikvm_new をデバッグすることです。 、コマンド ライン タイプのプログラム (典型的な static void main(String[] args) タイプのプログラム)。

于 2012-04-26T17:01:57.063 に答える