SEA & FSIJ 合同フォーラム 2006年11月
プロゴルファー達に会える会だったようです。
いや、しかし、SEAもFSIJもどういう団体か全然わかってなかった人が喋ってたっていうのはよかったんだろうか…
http://morihyphen.hp.infoseek.co.jp/files/a.odp.gz
ooimpressの。あと、使ったソース
http://morihyphen.hp.infoseek.co.jp/files/sea-fsij-dwarf.tar.gz
update_aがeaxに586をロード、sum.sが総和、loop.sが無限ループ。あとはなんかゴミ
使いかたは、
$ gcc empty.c xxx.s
みたいにempty.cとリンク(スタックフレーム一個上がる必要があるので、一個だけ関数作っとく。mainとemptyを分けてる意味は特にない)
.code_beginと.code_endとか、.begin_asm_codeと.end_asm_codeの間にbreak、んで、run、upして、info registersするとよいです
(gdb) b asm_code Breakpoint 1 at 0x8048350: file sum.s, line 5. (gdb) run Starting program: /home/w0/test/dwarf/a.out Breakpoint 1, asm_code () at sum.s:5 Current language: auto; currently asm (gdb) up #1 0x0804832f in empty () at empty.c:2 Current language: auto; currently c (gdb) i r eax Cannot access memory at address 0x42
反省としては、前提知識の説明よりも本体のネタの方が少なかったというのが。
でも、DWARF2の説明って見たことないから、ひょっとしたら誰かの役に立つかなーっていう気持ちがあったのと、あと、まあ、ネタは表示が地味すぎるのであれ以上は厳しいかなーとか、を、考えるとあの量バランスは、妥当だったような気がしないでもない。
今回わかったことは、ネタは、ノリと勢いでなんとかならないこともないけど、説明のほうは、ノリと勢いではどうにもならないってところか…。
あと、ネタのほうは、受けが良いか悪いかがわかりやすいので、実行時にペース配分変えられるんだけど、説明のほうは、皆、「聞き入って黙ってる」のか、「さっぱりわからなくてわからん」のか、どっちなのかわからないから、詳細を説明すべきか、スキップしてしまうかが、実行時に決められない、というような。まあ、つまり、ちゃんと準備しましょうって話なんだが。
質問があったので、補足。
フレーム情報は、 .debug_frame セクションに。他のデバッグ情報も、それぞれ.debug_locみたいなセクションにあり。
(そういえば、.locってどういう解釈されんだろうな)
プログラムカウンタと、フレーム情報の対応は、
.LSFDE0: .long .LEFDE0-.LASFDE0 # FDE Length .LASFDE0: .long .Lframe0 # FDE CIE offset .long .begin_asm_code # FDE initial location ← このへん .long .end_asm_code - .begin_asm_code # FDE address range ← このへん .byte 0xd # DW_CFA_def_cfa_register
FDEの8byte目あたりに。