4.6 リンカフィードバックの使用例

これは、リンカフィードバックの動作例です。

手順

  1. この例に示すコードを含む fb.c という名前のファイルを作成します。
    #include <stdio.h> void legacy() {     printf("This is a legacy function that is no longer used.\n"); } int cubed(int i) {     return i*i*i; } void main(void) {     int n = 3;     printf("%d cubed = %d\n",n,cubed(n)); }
    
  2. 以下のコマンドラインを実行して、プログラムをコンパイルし、フィードバックファイルが存在しないことを示す警告メッセージは無視します。
    armcc --asm -c --feedback fb.txt fb.c
    

    これにより、デフォルトでは cubed() 関数がインライン展開され、アセンブラファイル fb.s とオブジェクトファイル fb.o が作成されます。アセンブラファイルには、legacy()cubed() のコードが残っていますが、インライン展開により、main から cubed() を呼び出すことはありません。

    cubed() のアウトオブラインコピーは、 static として宣言されていないため、保持されています。

  3. 以下のコマンドラインを実行して、オブジェクトファイルをリンクし、リンカフィードバックファイルを作成します。
    armlink --info sizes --list fbout1.txt --feedback fb.txt fb.o -o fb.axf
    

    リンカによる診断結果がファイル fbout1.txt に出力されます。

    リンカのフィードバックファイルは、(コンパイラで使用されない)コメントとして未使用の関数を含み、legacy() 関数と cubed() 関数のエントリを含んでいるソースファイルを特定します。以下に例を示します。

    ;#<FEEDBACK># ARM Linker, 5.01 [Build num]:Last Updated:Date ;VERSION 0.2 ;FILE fb.o cubed &lt;= USED 0 legacy &lt;= USED 0
    

    このフィードバックファイルは、2 つの関数が使用されていないことを示します。

  4. 以下のコマンドラインを実行し、別の診断ファイルを使用してコンパイルとリンクのステージを実行します。
    armcc --asm -c --feedback fb.txt fb.c
    
    armlink --info sizes --list fbout2.txt fb.o -o fb.axf
    
  5. 2 つの診断ファイル fbout1.txtfbout2.txt を比較し、イメージのコンポーネント(例えば、Code、RO Data、RW Data、ZI Data)のサイズを確認します。Code コンポーネントが小さくなります。

    アセンブラファイル fb.s 内では、legacy() 関数と cubed() 関数は、main() 関数と同じ領域に存在しなくなりました。これらの関数は関数独自の ELF セクションにコンパイルされます。したがって、 armlink は最終イメージから legacy() 関数と cubed() 関数を削除できます。

後発条件

リンカフィードバックを最大限に活用するには、完全なコンパイルとリンクを 2 回以上実行する必要があります。ただし、通常は、前回のビルドのフィードバックを使用して 1 回コンパイルしてリンクすれば十分です。

関連する概念
4.5 リンカフィードバックについて
関連する参考文書
12.57 --feedback=filename
12.58 --feedback_image=option
12.59 --feedback_type=type
12.71 --info=topic[,topic,…]
12.90 --list=filename
12.126 --scatter=filename
関連情報
--asm コンパイラオプション
-c コンパイラオプション
--feedback=filename コンパイラオプション
--inline、no_inline コンパイラオプション
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.