gdbを用いたpintoolのデバグ その1
Intel Pin を用いて投機実行のシミュレーションを行うプログラムのデバグの話。 投機実行のシミュレーション中は本来実行されない path が実行されるので、適宜シグナルの処理が必要。 すなわち、例えば SIGSEGV の場合、シミュレーション中に SIGSEGV が発生したらそれを抑え込む必要がある。 実際に SIGSEGV(に限らず他のシグナルも)が発生した場合には、そのシグナルを抑え込んだ上でシミュレーションを中断する処理を入れている。
問題になるのは、Pintool(シミュレートするプログラム)が何らかのバグで SIGSEGV を発生させ、落ちる場合である。 この時、発生する SIGSEGV は 2 種類ある。それは:
- 投機実行のシミュレーション中に発生する SIGSEGV : Pintool によって抑え込まれる
- 何らかのバグで pintool が発生させる SIGSEGV : 放置される(ので、pintool が落ちる
上記が理由で、(デバグのために)pintool が落ちる直前で一時停止するのが困難になる。
さて gdb でデバグしよう。
と思った際に、gdb は上記の 2 種類の SIGSEGV を区別せずに、それが発生したらプログラムを一時停止させる。
従ってcont
コマンドを打って、実行が継続する場合と、そのまま pintool が落ちる場合があるからである。
どうやって落ちる直前で止まるか…。 考えられる方法:
- core dump の解析
- …
つづく
Reference
- linuxでcore dumpを出す方法 : https://zenn.dev/blackengineer/articles/9c60cdfbc96bf1b769da
comments powered by Disqus