[Suzaku:01527] Re: エラー表示の解析方法について

菊地 義和 email@hidden
2009年 6月 24日 (水) 13:06:22 JST


溝渕様

菊地です。回答ありがとうございます。

> rPCがプログラムカウンタです。逆アセンブルしたコード上でどの場所になって
> いるかを確認してみてください。

確認しました。

c0045bdc <kmem_cache_alloc>:
c0045bdc: 3021ffe0  addik r1, r1, -32
c0045be0: f9e10000  swi r15, r1, 0
c0045be4: fa61001c  swi r19, r1, 28
c0045be8: 96710002  msrclr r19, 2
c0045bec: 80000000  or r0, r0, r0
c0045bf0: e8e50000  lwi r7, r5, 0        ←RPCはここを指していました。
c0045bf4: e8870000  lwi r4, r7, 0
c0045bf8: 3104ffff  addik r8, r4, -1
c0045bfc: 64680402  bslli r3, r8, 2
c0045c00: be040034  beqid r4, 52  // c0045c34

それで、続いてアドバイスいただけますでしょうか。

・インストラクション「lwi r7, r5, 0」は
「kmem_cache_alloc」というラベル(関数)の内部であると
理解しましたが、そうでしょうか。
・関数「kmem_cache_alloc」は当方のソフトからは
実行していないのですが、どのようなときに実行される
と考えられるのでしょうか。
・先にお送りしたレジスタ情報と上記逆アセンブルの
結果から、次に確認すべき点はどのような箇所になる
のでしょうか。

よろしくお願いいたします。

以上

----- Original Message ----- 
From: "mizo" <email@hidden>
To: "菊地 義和" <email@hidden>; "SUZAKU general discussion list" 
<email@hidden>
Sent: Wednesday, June 24, 2009 9:36 AM
Subject: Re: [Suzaku:01525] エラー表示の解析方法について


> 溝渕です。
>
> 菊地 義和 wrote:
>>  Registers dump: mode=1
>>
>>  r1=C0024B5C, r2=00000000, r3=00000080, r4=C1C6FEAC
>>  r5=C01BC56C, r6=C1C6FEA0, r7=00000001, r8=000061A2
>>  r9=C07B47A4, r10=000061A0, r11=0000000D, r12=8000003E
>>  r13=00000000, r14=10001EC8, r15=C00D15D0, r16=00000001
>>  r17=00000001, r18=00000000, r19=C00CFCD8, r20=00001000
>>  r21=00000000, r22=C204C000, r23=8060C000, r24=00000000
>>  r25=000061A2, r26=81000000, r27=FFFFA83C, r28=80000000
>>  r29=00000003, r30=C00D1564, r31=C07B47A4, rPC=C0024B5C
>>  ear=00000084, esr=00000C92
>> Oops: kernel access of bad area, sig: 11
>>  Registers dump: mode=1
>>
>>  r1=C0024B5C, r2=00000000, r3=00000080, r4=C1C6FEAC
>>  r5=C01BC56C, r6=C1C6FEA0, r7=00000001, r8=000061A2
>>  r9=C07B47A4, r10=000061A0, r11=0000000D, r12=8000003E
>>  r13=00000000, r14=10001EC8, r15=C00D15D0, r16=00000001
>>  r17=00000001, r18=00000000, r19=C00CFCD8, r20=00001000
>>  r21=00000000, r22=C204C000, r23=8060C000, r24=00000000
>>  r25=000061A2, r26=81000000, r27=FFFFA83C, r28=80000000
>>  r29=00000003, r30=C00D1564, r31=C07B47A4, rPC=C0024B5C
>>  ear=00000084, esr=00000C92
>>
>> 不具合解析するためには上記内容をどのように見るとよいのでしょうか。
>> CPUのマニュアルからおおよそ次のことはわかりましたが
>> デバグする上で、どのように見たらよいのかわかりません。
> C言語のままレジスタダンプとの対応を見るのは厳しいので、まずカーネルを逆
> アセンブルします。
>
> [ATDE]$ cd linux-2.6.x
> [ATDE]$ microblaze-linux-gnu-objdump -dx vmlinux
>
> rPCがプログラムカウンタです。逆アセンブルしたコード上でどの場所になって
> いるかを確認してみてください。
>
>> Oops: kernel access of bad area, sig: 11
> と出力されていたので、エラーが発生した原因が「使用してはいけない空間にア
> クセスしたこと」であることがわかります。
> 




suzaku メーリングリストの案内