avstack.pl である程度できる。
avstack.pl の $objdump を適当にアーキテクチャをあわせて変えておく。
my $objdump = "arm-none-eabi-objdump";
このうえで、GCC のコンパイルフラグに -fstack-usage をつける。そうすると .o の同じ名前で .su というファイルができる。
asm から変換されたファイルとかでは .su は作られないので、.su がない .o を除外して、avstack.pl の引数にすべて与える。
$ ./avstack.pl build/obj/Font5x7.o build/obj/adc.o ...
Func Cost Frame Height
------------------------------------------------------------------------
> Thread1 792 20 16
sweep 772 84 15
ui_process 688 12 14
ui_process_touch 676 12 13
touch_pickup_marker 664 52 12
drag_marker 612 44 11
ui_process_lever 608 12 12
ui_process_normal 596 28 11
> menu_marker_sel_cb 580 12 11
...
すると、使用率順に表示してくれる。> マークはどこからもそれが呼ばれていない関数、つまり呼び出し元と思われるもの。
Cost は最大スタック利用量。Frame は該当関数のスタック利用量 (コールコストを含む)。Height は最大コールスタック数。
Height * コールコストが意外とでかい。
- トップ
- tech
- スタック使用量の静的解析