リンク時コード生成について

リンク時コード生成(LTCG)を使用すると、リンク段階までコード生成を遅らせることで、クロスソースファイル最適化を実行できます。 これにより、コードサイズ大幅に縮小できます。 LTCG を有効にするには、-c --ltcg を使用してソースをコンパイルして、オブジェクトを中間形式で作成します。 コード生成を実行するようにリンカに指示するには、--ltcg を使用してこれらのオブジェクトファイルをリンクする必要があります。

armccarmlink のどちらにも、LTCG を有効にする --ltcg コマンドラインオプションが用意されています。

Note

LTCG は廃止予定の機能です。 代替の ARM コマンドとして、--multifile コンパイラオプションを使用します。

Show/hideLTCG 使用時の注意事項

LTCG を使用する際は、以下の点に注意して下さい。

  • 入力オブジェクトが --ltcg を使用してコンパイルされていない場合、最終オブジェクトは、LTCG を使用しないで生成された最終オブジェクトと同じになります。

  • --ltcg を使用してコンパイルされたオブジェクトファイルには、デバッグ情報は保持されません。 ただし、--ltcg を使用してコンパイルされていないオブジェクトファイルには、デバッグ情報は保持されます。

  • LTCG では、リンク用に一時的なオブジェクトファイルを作成して使用するため、スキャッタファイルで特定のオブジェクトファイル名を使用できせん。 スキャッタファイルを使用する場合、ワイルドカード * を使用してファイルを一致させる必要があります。 そうしないと、一時ファイルと一致しません。

  • リンカに渡す入力オブジェクトファイルに複数のエントリポイントがある場合、リンカによってすべてのエントリポイントがクリアされます。 そのため、以下のオプションを使用して、リンカコマンドラインでエントリポイントを 1 つ指定する必要があります。

    --entry=symbol

    エントリポイントを含む入力セクションは削除されません。 例えば、--ltcg を使用しないでオブジェクトをビルドした場合は削除されません。

    Note

    リンカオプション --entry=object(symbol) は、LTCG 使用時はサポートされません。

Show/hide

以下の例では、LTCG の一般的な使用方法を示しています。

  1. --ltcg を使用して、ELF オブジェクトファイル one.o および two.o を作成します。

    armcc -c --ltcg one.c -o one.o

    armcc -c --ltcg two.c -o two.o

    コンパイラによって、オブジェクトファイルへの中間コードが生成されます。

  2. 以下のコマンドを使用して、ファイルをリンクします。

    armlink --ltcg one.o two.o -o ltcg_image.axf

リンカによって、以下の処理が行われます。

  1. すべての中間コードを結合します。それによって、元のオブジェクトファイル名へのリンクが失われます。

  2. 中間コードに対してコード生成を実行します。

  3. 出力イメージを作成します。

Show/hideリンク時コード生成によって生成される中間オブジェクトファイルについて

リンク時コード生成(LTCG)によって生成される中間 ELF オブジェクトファイルには、.il という名前のセクションが含まれます。このセクションは、フラグ SHF_EXECINSTR および SHF_ALLOC でマークされます。

上記の例の中間オブジェクトファイル one.o では、fromelf コマンドを使用して、これらのセクションを表示できます。以下に例を示します。

fromelf --text -v one.o
...
====================================

** Section #1

    Name        : .il
    Type        : SHT_PROGBITS (0x00000001)
    Flags       : SHF_ALLOC + SHF_EXECINSTR (0x00000006)
...
    Link        : SHN_UNDEF
...
====================================

** Section #3

    Name        : .rel.il
    Type        : SHT_REL (0x00000009)
    Flags       : None (0x00000000)
...
    Link        : Section 2 (.symtab)
    Info        : Section 1 (.il)
...
====================================
...

Show/hide関連項目

参照

『リンカリファレンス』

『コンパイラリファレンス』

『fromelf イメージ変換ユーティリティの使用』

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612