0xfee1dead

by SATO Yusuke (http://binary.nahi.to)
Nov 26
Permalink
If you are on x86-64 system, know that you have a set of system libraries with frame-pointers enabled, and compile all your applications with -fno-omit-frame-pointer, then you can enable the built-in perftools stack unwinder by passing the —enable-frame-pointers flag to configure.

http://google-perftools.googlecode.com/svn/trunk/INSTALL

google-perftoolsのソースのコメント、INSTALLファイルと、READMEファイルにはいろいろ面白いことが書いてあるので必見だ。ARM portにも関係する部分だと… まず、x86_64とかarmは、-O2で勝手に-fomit-frame-pointerするという点だな。もし、perftools組込みの、DWARF CFI (.eh_frameセクションとか) を使わない簡易backtracerを使うなら、perftools本体を-fno-omit-frame-pointerでコンパイルしないと明らかにまずい (ので./configure時に—enable-frame-pointer しないといかん>おれ)。解析対象も-fno-omit-frame-pointerしてやらないとだな。最初からインストールされてるDSOは、しょうがないねえ。この部分のプロファイルはちょっとおかしくなりますよということで。特にコールグラフとか。

あとは、libunwindを使えば、CFIのほうを見てbacktraceできるのでこの問題はなくなるとか(ARM対応してんのかねこれ。あと、READMEのほうに更なる問題が書いてあったかも)、glibcのbacktrace(3) and/or(あとで調べる) libgccの_Unwind_Backtrace()は、x86_64だと? (あとで調べる) 中でmallocしてるからdeadlockするかも、使うなとか、そのへんのあれこれも書いてある。