ELFのすべてのシンボルのサイズとソースを抽出します。

ELFのすべてのシンボルのサイズとソースを抽出します。

バイナリのさまざまなコンポーネントのコードサイズを推定しようとしています。ソースコードとすべてのビルドオブジェクトファイルを含むビルドディレクトリにアクセスできます。もちろん、実際に使用されるシンボルだけを含めたいので、すべてのオブジェクトファイル.text.dataセクションのサイズを追加すると、実際の値が過大評価されます。

ELFファイルをリンクするために使用されるすべてのシンボルのサイズとソースを確認するには?次のようなものが役に立ちます。

Symbol   Size   Origin
func1    0x50   ../src/func1.o
func2    0x75   ../src/func2.o
...

これはすべてのシンボルに似ています.data。生成された.mapファイルには次のようです。一部しかし、これらのデータは不完全なようです。目立つ2つの部分は次のとおりです。

Allocating common symbols
Common symbol       size              file

s_Handle         0x8               ../BUILD/src/handle.o
_main_obj        0x48              ../BUILD/src/boot.o
....

しかし、ここには数十の記号だけがリストされています。次のセクションでは、より多くの記号があるように見えますが、リンク時に「廃止予定」と表示されます。

Discarded input sections

 .text          0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
 .data          0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
 .bss           0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
 .data          0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
 .bss           0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
 .ARM.extab     0x00000000        0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
 .text._Z12notify_startv
                0x00000000       0x14 ../BUILD/./test_env.o
 .text._Z30notify_performance_coefficientPKci
                0x00000000       0x18 ../BUILD/./test_env.o
 .text._Z30notify_performance_coefficientPKcj
                0x00000000       0x18 ../BUILD/./test_env.o
 .text._Z30notify_performance_coefficientPKcd
                0x00000000       0x20 ../BUILD/./test_env.o
 .text._Z17notify_completionb
                0x00000000       0x64 ../BUILD/./test_env.o
 .text._Z21notify_completion_strbPc
                0x00000000       0x30 ../BUILD/./test_env.o
...

答え1

使いたいかもしれません膨らんだマクブロットの顔:

「VM SIZE」列は、バイナリがメモリにロードされたときに占めるスペースを示します。ファイルサイズ列は、バイナリがディスクで占めるスペースを示します。 [...]デフォルト崩れるブロディにセクション別しかし、次のようにバイナリファイルを分割する他の多くの方法をサポートしています。シンボルそして市場部門。デバッグ情報でコンパイルすると、競合が発生する可能性があります。コンパイルユニットとインライン経由

答え2

言及することはできません。注意してください。このAllocating common symbolsセクションでは、プログラムのグローバル変数名とサイズをリストします。

関連情報