gdb で追い掛けてみたい (2)

折角なので 0.8.11 にて色々試す。ReadingGauche で使ってるソレで configure;make 実施。ぢつは職場でも試してみたのですが、起動にて若干ハマりましたので、手順を以下にきちんとメモりつつ、ツッコンで確認予定。
ぢつは ReadingGauche 方面にて TAIL-CALL なインストラクションの review 中でコメントも求められてたりなんかするんですが、こっち方面に流れてしまう弱い心 (何

とりあえず

優先度高そげな ReadingGauche をナニする事にしておいて以下に備忘録のみメモ。まず make ができたら src ディレクトリに移動して以下。

$ export GAUCHE_LOAD_PATH=.:../lib
$ gdb ./gosh
GNU gdb 6.4.90-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".

(gdb) b main
Breakpoint 1 at 0x8049d90: file main.c, line 314.
(gdb) b run_loop
Function "run_loop" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 2 (run_loop) pending.
(gdb) r
;; 中略
Breakpoint 1, main (argc=1282785413, argv=0x54a165) at main.c:314
314     {
(gdb) c
Continuing.

Breakpoint 3, run_loop () at vm.c:601
601     {
(gdb) bt
#0  run_loop () at vm.c:601
#1  0xb7df6b9c in user_eval_inner (program=0xb7ec1f40, codevec=0x8116290) at vm.c:2785
#2  0xb7dfc6fb in Scm_VMExecuteToplevels (cs=0xb7ef5e40) at code.c:101
#3  0xb7e83816 in Scm_Init_scmlib () at scmlib.c:6348
#4  0xb7dea1bb in Scm_Init (signature=0x804b36f "0.8.11,utf8,pthreads") at core.c:163
#5  0x08049dd0 in main (argc=Cannot access memory at address 0x0
) at main.c:324

ええと、scmlib.c は自動なナニに見えます。scmlib.scm もあります。なんなんだ、と言いつつ Makefile を確認したら以下なルールあり。

scmlib.c : scmlib.scm gencomp vminsn.scm
        $(HOSTGOSH) ./gencomp scmlib.scm

gencomp って何だ、と言いつつ src なディレクトリを見たらありますな。これをがっつり読むのと gdb なソレを云々ってのと、どっちが先かなぁ ...

整理

ええと、とりあえず gdb でナニするポイントを以下に。

  • 手動で make したナニでうまく動作した
    • 丁度良い事に src ディレクトリに gosh があるのでそこで gdb すれば OK
    • ただ、load-path が微妙なので GAUCHE_LOAD_PATH にカレントディレクトリと gauche なディレクトリ配下にある lib をナニする必要あり