通常、次の例のように、GCC と Clangのフラグを使用して、ソース ファイルからGCC の最適化されたアセンブラー出力を取得できます。-S
gcc -O3 -S -c -o foo.s foo.c
しかし、リンク時のプログラム全体の最適化を有効にするためにすべてのソース ファイルをコンパイルし-O3 -flto
、最終的にコンパイラによって生成された関数の最適化されたアセンブリを確認したり、コードがどこでどのようにインライン化されるかを確認したいとします。
コンパイルの結果、.o
実際にはオブジェクト ファイルを装った IR ファイルである一連のファイルが生成されます。実行可能ライブラリまたは共有ライブラリをリンクすると、これらがまとめられ、全体として最適化されてから、ターゲット バイナリにコンパイルされます。
しかし、この手順からアセンブリ出力が必要な場合はどうすればよいでしょうか? つまり、リンク時の最適化後、IR からアセンブリへのコンパイル中、実際のアセンブリと最終的な実行可能ファイルへのリンクの前に生成されるアセンブリ ソースです。
リンクステップに単純にフラグを追加しようとしました-S
が、うまくいきませんでした。
ソースとインターリーブしても、実行可能ファイルの逆アセンブルが可能であることは知っていますが、実際のコンパイラ生成アセンブリ、特に-fverbose-asm
.