[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 メーリングリストの案内