問題タブ [lto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - GCC LTO ファット オブジェクト ファイルでの「nm」の出力が正しくない
私が持っている場合tmp.c
:
gcc -c tmp.c -o tmp.o && nm tmp.o
ショーを見ます
しかし、 でコンパイルすると-flto -ffat-lto-objects
、nm
シンボル値にゼロが出力されます。
両方のファイルの 16 進ダンプで値34
と値を取得できます。12
.o
私の質問は
nm
LTO ファット ファイルでの の動作は期待どおりですか? 期待していない入力を与えているだけで、ガベージを出力していますか?元の出力 (初期化されていない配列の長さに一致するシンボル値) を説明するものは何ですか? この質問は配列の問題には役立たないように見えましたが、誤解していたのかもしれません。
c++ - gcc 9.2: スプリアス -Wuninitialized
gcc 9.2.0 でコード ベースをビルドしようとしていますが、-flto を使用すると、情報が不足しているという警告が多数表示されます。これらの問題は、gcc6.3 では発生しませんでした。
残念ながら、言及された行は文字通り空であり、警告メッセージには初期化されていない識別子がありません。
より小さなテストケースで再現したいのですが、それがどの変数に関係するのかわかりません。言及された 2 つのファイルには、具体的なことは何も言及されていません。実際には、コンパイラによって生成された関数 (__ct_base) について不平を言っています。
警告について gcc から詳細情報を取得する方法はありますか?
gcc - LTO モードで GCC/Clang からアセンブリ出力を取得する
通常、次の例のように、GCC と Clangのフラグを使用して、ソース ファイルからGCC の最適化されたアセンブラー出力を取得できます。-S
しかし、リンク時のプログラム全体の最適化を有効にするためにすべてのソース ファイルをコンパイルし-O3 -flto
、最終的にコンパイラによって生成された関数の最適化されたアセンブリを確認したり、コードがどこでどのようにインライン化されるかを確認したいとします。
コンパイルの結果、.o
実際にはオブジェクト ファイルを装った IR ファイルである一連のファイルが生成されます。実行可能ライブラリまたは共有ライブラリをリンクすると、これらがまとめられ、全体として最適化されてから、ターゲット バイナリにコンパイルされます。
しかし、この手順からアセンブリ出力が必要な場合はどうすればよいでしょうか? つまり、リンク時の最適化後、IR からアセンブリへのコンパイル中、実際のアセンブリと最終的な実行可能ファイルへのリンクの前に生成されるアセンブリ ソースです。
リンクステップに単純にフラグを追加しようとしました-S
が、うまくいきませんでした。
ソースとインターリーブしても、実行可能ファイルの逆アセンブルが可能であることは知っていますが、実際のコンパイラ生成アセンブリ、特に-fverbose-asm
.