なぜそのバイナリはそんなに大きいのか?
What
CodeSizerは静的コードサイズ解析ツールです。
サイズ重視の組み込みファームウェア開発では、最終バイナリは高度にインライン化され、リンク時最適化されています。単一の関数シンボルが数十のインライン化された関数をカバーする場合があります。CodeSizerはobjdumpとaddr2lineを使用して各命令アドレスのインラインコールスタックを展開し、コードサイズを各関数のインラインコールツリー内の正しいノードに割り当てます。
出力は静的なHTMLレポートファイルで、ツリービューの展開/折りたたみなどのUI機能のために少量のJavaScriptが含まれています。
How
インタラクティブヘルプより:
usage: codesizer.py [-h] [--cross-prefix CROSS_PREFIX] [--section SECTION]
elf output
Analyse static code size of an ELF file. Disassemble via objdump, unwind inline
call stacks via addr2line, and emit a static HTML report.
positional arguments:
elf input ELF file
output output HTML file
options:
-h, --help show this help message and exit
--cross-prefix CROSS_PREFIX
prefix for objdump and addr2line (default: riscv32-unknown-
elf-)
--section, -j SECTION
Specify ELF section. Pass multiple times for multiple
sections. If unspecified, .text is used.
指定されたプレフィックスを持つ正しいツールチェーンが$PATH上に存在するか、ツールチェーンバイナリへのフルパスを指定する必要があります。例:
-
Ubuntuで
gcc-arm-none-eabiパッケージをインストールした場合、--cross-prefix=arm-none-eabi-を使用します。 -
/opt/riscv/gcc15にriscv-gnu-toolchainビルドをインストールした場合、--cross-prefix=/opt/riscv/gcc15/bin/riscv32-unknown-elf-を使用します。
Example Output
このHTMLレポートは以下のコマンドで生成されました:
./codesizer.py --cross-prefix arm-none-eabi- arm-bootrom.elf arm-bootrom.html -j .text -j .secure_gateways
ELFファイルはRP2350 A4 bootromリリースからのものです。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.