2016-09-06 8 views
1

私がコンパイルしているCプログラムのアセンブリ出力を解析したい。 GCCで一時ファイルを保存するには、コンパイル時に-save-tempsオプションを追加しました。GCCは一時的な出力を余分な情報で保存する

link次のGCCオプションでは、アセンブリコードで余分な出力が得られました。このオプションを-save-tempsと組み合わせて使用​​すると、より読みやすいアセンブリ出力が得られますか?また、私が見ているアセンブリファイルがGCCによって生成されたバイナリに対応していることを確認したい。

-a[sub-option...] turn on listings 
       Sub-options [default hls]: 
       c  omit false conditionals 
       d  omit debugging directives 
       g  include general info 
       h  include high-level source 
       l  include assembly 
       m  include macro expansions 
       n  omit forms processing 
       s  include symbols 
       =FILE list to FILE (must be last sub-option) 
+3

「-fverbose-asm」を試してください。 – fuz

+3

** asm出力を人間が読めるように**するヒントについては、こちらも参照してください:[GCC/clangアセンブリ出力からノイズを除去する方法](http://stackoverflow.com/a/38552509/224132) –

+0

大丈夫、私はそれが助けると思う。ありがとうございました ! – Raj

答えて

1

関連:How to remove "noise" from GCC/clang assembly output?:読みコンパイラのasm出力を容易にする方法はたくさん。


-Wa,xyz=FILE通常の出力と一緒に余分出力ファイルを作成します。それは-save-tempsと直交しています。ファイルに移動するには、コマンドラインで追加の出力ファイル名が必要です。

Makefile pattern ruleに:

%.o : %.c 
     $(CC) -c $(CFLAGS) $(CPPFLAGS) -Wa,-adhln=$*.lst $< -o [email protected] 

は入れているのMakefileという名前のファイルで、あなたがすることができ、(インデントは本物TAB、ないスペースである):だから

$ CFLAGS='-O3 -g -fverbose-asm' make rnd10.o 
cc -c -O3 -g -fverbose-asm -Wa,-adhln=rnd10.lst rnd10.c -o rnd10.o 

$ ll rnd10.* 
-rw-rw-r-- 1 peter peter 912 Mar 3 2016 rnd10.c 
-rw-rw-r-- 1 peter peter 25K Sep 6 08:23 rnd10.lst 
-rw-rw-r-- 1 peter peter 12K Sep 6 08:23 rnd10.o 

の.oとリストの両方同じコマンドによって作成されました。 -save-tempsを使用した場合は、前処理されたソースと、実際に.sがアセンブラに供給されていますが、それらとリストを同時に保存することはあまり意味がありません。


あなたちょうどあなたCFLAGS-Wa,-adhln=$*.lstを追加し、代わりのパターンルールをオーバーライドして逃げることができるかもしれ(それが集合した形式ではないので、私は.lstを選びました)。これは、Makeルールを使用するビルドシステムでのみ有効です。パターンルールのステムへの展開がMakeに固有なので、最終的にMakefileを生成しない代替(例えば、scons)ではありません。また、明示的なスタイルルールではなく、パターンルールを作成する場合にのみ機能します。

$ rm Makefile 
$ CFLAGS='-O3 -g -fverbose-asm -Wa,-adhln=$*.lst' make rnd10.o 
cc -O3 -g -fverbose-asm -Wa,-adhln=rnd10.lst -c -o rnd10.o rnd10.c 

楽しい事実:doesn't even work with spaces in filenamesを作成していますが、ルールのビルドコマンドの一部では、単一引用符で(foo$(echo)_weirdname.cのような)何かのシェル拡張から保護することができ、かつCFLAGSインチ例えばCFLAGS="-O3 -g "\'-Wa,-adhln=\$\*.lst\' make -B 'foo$(echo)weirdfil\\.o'

関連する問題