2.17 コンパイル中に未使用の関数を削除してコードサイズを最小化する

コンパイラに対するリンカからのフィードバックを使用すると、未使用の関数を効率的に削除できます。

手順

  1. ソースコードをコンパイルします。
  2. リンカオプション --feedback=filename を使用して、フィードバックファイルを作成します。
  3. リンカが生成するフィードバックを制御するには、リンカオプション --feedback_type を使用します。
    デフォルトでは、リンカは未使用関数を削除するためのフィードバックを生成します。これは、--feedback_type=unused,noiw に相当します。また、リンカは、インターワークのコンテキストで使用されない関数がインターワーク用にコンパイルされることを回避するためのフィードバックも生成します。両方のタイプの未使用関数を削除するには、リンカオプション --feedback_type=unused,iw を使用します。

    インターワークに必要なコンパイルの削減は、ARMv4T アーキテクチャにのみ該当します。ARMv5T 以降のプロセッサではインターワークによるペナルティは発生しません。
  4. コンパイラオプション --feedback=filename を使用して再コンパイルし、フィードバックファイルをコンパイラに送ります。
コンパイラはリンカが生成したフィードバックファイルを使用して、リンカが後で未使用関数を破棄できるようにソースコードをコンパイルします。

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

リンカフィードバックファイルを使用する直前に、完全なクリーンビルドを必ず実行して下さい。これにより、生成に使用したソースコードが原因で古いフィードバックファイルを使用するリスクを最小限に抑えることができます。
フィードバックファイルが存在しない場合でも、--feedback=filename オプションを指定できます。これにより、フィードバックファイルが存在するかどうかに関係なく、同じビルドコマンドまたはメイクファイルを使用できます。以下に例を示します。
armcc -c --feedback=unused.txt test.c -o test.o
armlink --feedback=unused.txt test.o -o test.axf
初めてアプリケーションをビルドする際、アプリケーションは正常にコンパイルされますが、コンパイラによって、指定したフィードバックファイルが存在しないために読み出すことができないという警告メッセージが表示されます。その後、リンクコマンドによって、フィードバックファイルが作成され、イメージがビルドされます。2 回目以降のコンパイル時には、前のリンク手順のフィードバックファイルを使用して、特定された未使用の関数を削除します。
関連する概念
2.16 未使用の関数コード
関連する参考文書
2.15 コンパイル中のリンカフィードバック
8.81 --feedback=filename
関連情報
--feedback_type=type リンカオプション
リンカフィードバックについて
ARM と Thumb のインターワーク
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.