スタック使用量の静的解析
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 * コールコストが意外とでかい。
関連エントリー
- SRAM 使用量のカウント #!/usr/bin/env ruby require 'pp' D = Struct.new(:sec, :size, :name) ta...
- GitHub Pages を GitHub Actions で PDF 化して releases にアップロード GitHub Pages を GitHub Actions で PDF 化して releases にアップロードするというのをやってみた。 ...
- Benchmark.js の結果表示を改善する Benchmark.js ちゃんと使えるので良いのですが、計測を頑張っている割に結果表示が貧弱というのが悲しいところです。 なので Perl...
- STM32F401CC の安いボード Type-C コネクタ 25MHz / 32.768 kHz 水晶つき NRST / BOOT ボタン 裏面に WeAct と書いてあった。...
- Original Prusa i3 MK2S でペンプロッタ 3Dプリンタとペンプロッタはほとんど似たようなものなので、アタッチメントをつけて簡単にペンプロッタ化してみた。アタッチメントはこんな感じ。4...