[linux-users: 108984] Re: QEMUで実行しているLinuxカーネルをDDDでデバッグするときブレークできない

柳原光佑 yanagihara.kosuke @ gmail.com
2015年 1月 16日 (金) 17:32:06 JST


小島さん

アドバイスありがとうございます。
GDB本体のターゲットアーキテクチャを確認したところi386系だったため、
armにビルドし直すことで無事解決いたしました。大変助かりました。

以下の通り実施しました。

●GDBで使用できるアーキテクチャの確認
(参考:https://sourceware.org/gdb/onlinedocs/gdb/Targets.html)

$ ddd ~/android/goldfish/vmlinux    #DDD起動

GNU DDD 3.3.12 (x86_64-pc-linux-gnu), by Dorothea LReading symbols from
/home/ksky/android/goldfish/vmlinux...done.
(gdb) set arch
Requires an argument. Valid arguments are i386, i386:x86-64, i386:x64-32,
i8086, i386:intel, i386:x86-64:intel, i386:x64-32:intel, i386:nacl,
i386:x86-64:nacl, i386:x64-32:nacl, auto.   #一覧の中に"arm"が入っていない
(gdb)

●GDBをクロスデバッガとしてビルドし直す
cd /tmp
wget http://ftp.gnu.org/gnu/gdb/gdb-7.7.1.tar.bz2
tar xjvf gdb-7.7.1.tar.bz2

cd gdb-7.7.1/
./configure --prefix=/opt/gdb/arm --target=arm-eabi   #ターゲットにarm-eabiを指定
make -j8
sudo make install

export PATH=/opt/gdb/arm/bin:$PATH       #arm-eabi-gdbコマンドにパスを通す

●arm-eabi-gdbを指定してDDD起動
ddd ~/android/goldfish/vmlinux --debugger arm-eabi-gdb

●アーキテクチャにarmが含まれていることを確認
GNU DDD 3.3.12 (x86_64-pc-linux-gnu), by Dorothea LReading symbols from
/home/ksky/android/goldfish/vmlinux...done.
(gdb) set arch
Requires an argument. Valid arguments are arm, armv2, armv2a, armv3,
armv3m, armv4, armv4t, armv5, armv5t, armv5te, xscale, ep9312, iwmmxt,
iwmmxt2, auto.

●エミュレータに接続、ブレイクポイントを設定して続行
(gdb) b start_kernel
Breakpoint 1 at 0xc00086a4: file init/main.c, line 531.
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
warning: Can not parse XML target description; XML support was disabled at
compile time
0x00000000 in ?? ()
(gdb) continue
Continuing.

Breakpoint 1, start_kernel () at init/main.c:531
(gdb)
 柳原光佑 <yanagihara.kosuke @ gmail.com> wrote:
> (gdb) target remote localhost:1234
> Remote debugging using localhost:1234
> warning: Architecture rejected target-supplied description
> Could not fetch register "st2"; remote failure reply 'E14'
> 0x00000000 in ?? ()

このgdbの警告はQEMU内蔵のgdbserverとgdb本体とでターゲットにしている
アーキテクチャがあっていないために出ているように見えます。
(gdb) show arch
で本体側のターゲットアーキテクチャの設定がわかります。 このケースだとarm
系になってないといけないと思います。
十分新しいgdbとgdbserverだとその間でアーキテクチャの情報を交換してうまく
やってくれると思うのですがそのあたりに問題があるのかもしれません。
とりあえずgdb本体の方がarmアーキテクチャに対応してさえいれば
(gdb) set arch arm
などと手で設定することもできます。 gdb本体が対応しているアーキテクチャは
(gdb) set arch
でリストしてくれるはずです。

何かヒントになれば幸いです。

--
小島 一元  <kkojima @ rr.iij4u.or.jp>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://listserv.linux.or.jp/pipermail/linux-users/attachments/20150116/64ac29f8/attachment-0001.html>


linux-users メーリングリストの案内