2.2.11. イメージ関連の情報の生成

--callgraph を指定した場合を除き、リンカでは要求された情報がデフォルトでは標準出力ストリーム stdout に出力されます。--list コマンドラインオプションを使用すると、この情報をテキストファイルに転送できます。

イメージに関する情報の抽出および表示方法を制御するには、以下のオプションを使用します。

--[no_]callgraph

--callgraph は関数のスタティックコールグラフを作成します。 このファイルは、生成されたイメージと同じディレクトリに保存されます。 コールグラフは、イメージ内のすべての関数の定義および参照情報を提供します。

Note

リンカで関数のスタック使用量を計算する場合は、アセンブラファイルに定義された関数に適切な PROC/ENDP および FRAME PUSH/POP ディレクティブが必要です。

各関数 func について、リンカによって以下の情報が示されます。

  • 関数がコンパイルされるときのプロセッサの状態(ARM または Thumb)

  • func を呼び出す一連の関数

  • func によって呼び出される一連の関数

  • func のアドレスがイメージ内で使用される回数

また、コールグラフは以下のような関数を識別します。

  • インターワークベニア経由で呼び出される関数

  • イメージ外で定義された関数

  • 未定義の状態が可能な関数(weak 型の参照)

また、スタティックコールグラフでは、スタックの使用状況に関する以下のような情報も提供されます。

  • 各関数によって使用されるスタックフレームのサイズ

  • 任意の呼び出しシーケンス(関数呼び出し非環式チェイン)を介して関数で使用されるスタックの最大サイズ

サイクルがある場合、またはリンカによって呼び出しチェイン内にスタックサイズの情報がない関数が検出された場合、スタックの使用状況に + Unknown が追加され、 スタックの使用状況が不明である理由が追加されます。

関数のデバッグフレーム情報がない場合は、リンカによって不明なスタックフレームの情報がレポートされます。

間接的な関数については、どの関数によって間接的な呼び出しが行われたかを、リンカで確実に判断することはできません。 このことは、呼び出しチェインの最大のスタック使用量の計算に影響する場合があります。 イメージで使用されるすべての関数ポインタがリンカによって示されます。

アセンブリ言語コードでフレームディレクティブを使用して、コードでスタックを使用する方法を記述します。 これらのディレクティブを使用すると、デバッガのデバッグフレーム情報は確実に存在し、スタック展開またはプロファイリングが実行されます。

スタック使用量が決定される方法の詳細については、『アセンブラガイド』のディレクティブ参照について説明した章を参照して下さい。

--callgraph_file=filename

コールグラフの出力の名前 filename を制御します。 以下に例を示します。 --callgraph_file=myfile

デフォルトの filename はイメージと同じです。 出力形式は --callgraph_output=fmt オプションによって制御されます。

--callgraph_output=fmt

コールグラフの出力形式を制御します。fmt には以下のいずれかを使用できます。

html

コールグラフを html 形式で出力します。 これがデフォルトです。

text

コールグラフをプレーンテキスト形式で出力します。

--cgfile=type

コールグラフに含まれる内容を制御します。type には以下のいずれかを使用できます。

all

すべてのファイルのシンボルを含みます。 これがデフォルトです。

user

ユーザ定義のオブジェクトおよびライブラリのシンボルのみを含みます。

system

システムライブラリのシンボルのみを含みます。

--cgsymbol=type

コールグラフに含まれる内容を制御します。type には以下のいずれかを使用できます。

all

ローカルシンボルとグローバルシンボルの両方を含みます。 これがデフォルトです。

locals

ローカルシンボルのみを含みます。

globals

グローバルシンボルのみを含みます。

--cgundefined=type

コールグラフに含まれる内容を制御します。type には以下のいずれかを使用できます。

all

関数エントリと未定義の weak 型の参照への呼び出しの両方を含みます。 これがデフォルトです。

entries

未定義の weak 型の参照に対する関数エントリを含みます。

calls

未定義の weak 型の参照への呼び出しを含みます。

none

出力のすべての未定義の weak 型の参照を省略します。

--feedback file

次にファイルをコンパイルするときのため、未使用の関数についてコンパイラに通知するフィードバックファイルを生成します。

次にファイルをコンパイルするとき、コンパイラオプション --feedback file を設定して、使用するフィードバックファイルを指定します。 未使用の関数は、関数自体のセクション内に配置され、後でリンカによって削除できるようになっています。 フィードバックファイルの使用方法の詳細については、リンカのフィードバックを参照して下さい。

--feedback_image option

フィードバックファイルを記述するときのリンカの動作を変更します。 このオプションを使用すると、実行可能な ELF イメージが通常は作成できないフィードバックファイルが生成されます。 例えば、未使用の関数を削除する前に分散ファイルに記述された範囲の制限にコードが合わない場合に、--feedback_image noerrors を使用します。

option には、以下のいずれかの値を設定できます。

none

分散ロードファイルを使用します。 領域の重複と領域サイズのオーバーフローメッセージを無効にします。 ELF イメージを記述しません。 領域が 32 ビットアドレス空間をオーバーフローする場合でも、エラーメッセージが生成されます。

noerrors

分散ロードファイルを使用します。 領域の重複と領域サイズのオーバーフロー警告メッセージが表示されます。 ELF イメージを記述しますが、実行可能でない場合があります。 領域が 32 ビットアドレス空間をオーバーフローする場合でも、エラーメッセージが生成されます。

simple

分散ロードファイルを無視します。 ROPI/RWPI エラーと警告を無効にします。 ELF イメージを記述しますが、実行可能でない場合があります。

full

すべてのエラーと警告メッセージを有効にし、有効な ELF イメージを記述します。 これはデフォルトのオプションです。

--info topics

指定されたトピックに関する情報を出力します。topics は、トピックキーワードのコンマ区切りのリストを示します。 トピックキーワードには以下のいずれかを使用できます。

architecture

CPU、FPU、およびバイト順序を一覧表示することにより、イメージのアーキテクチャを要約します。

common

イメージから削除されたすべての共通セクションが一覧表示されます。 このオプションを使用すると、--info common,totals を指定したことになります。

debug

--removeを使用したことによってイメージから削除される、すべての削除された入力デバッグセクションが一覧表示されます。 このオプションを使用すると、--info debug,totals を指定したことになります。

exceptions

例外テーブルの生成と最適化に関する情報が表示されます。

inline

--inline を使用した場合にリンカによりインライン化された、すべての関数およびインラインの総数が表示されます。 分岐のインライン化に関する詳細については、分岐のインライン化を参照して下さい。

inputs

入力シンボル、オブジェクト、およびライブラリを一覧表示します。

libraries

リンクステージに対して自動的に選択されたすべてのライブラリの完全パス名を一覧表示します。

このオプションを修飾子 --info_lib_prefix と共に使用すると、特定のライブラリに関する情報を表示できます。 例えば、以下のオプションを使用すると、リンカによって使用される浮動小数点ライブラリを識別できます。 --info libraries --info_lib_prefix=f.

pltgot

実行可能ファイルまたは DLL にビルドされた PLT エントリを一覧表示します。

sizes

イメージ内の入力オブジェクトおよびライブラリのメンバごとに、コードとデータ(RO データ、RW データ、ZI データ、およびデバッグデータ)のサイズが一覧表示されます。 このオプションを使用すると、--info sizes,totals を指定したことになります。

stack

すべてのグローバルシンボルのスタック使用状況を一覧表示します。

summarysizes

イメージのコードサイズとデータサイズを要約します。

summarystack

すべてのグローバルシンボルのスタック使用状況を要約します。

tailreorder

--tailreorder を使用したことによって、ターゲットの上に移動したすべての Tail の呼び出しセクションが一覧表示されます。 Tail の呼び出しセクションの処理の詳細については、分岐のインライン化を参照して下さい。

totals

入力オブジェクトとライブラリの、コードとデータ(RO データ、RW データ、ZI データ、およびデバッグデータ)のサイズの合計が一覧表示されます。

unused

--remove を使用したことによってイメージから削除される、すべての未使用のセクションが一覧表示されます。

veneers

リンカによって生成されるベニアが一覧表示されます。 詳細については、ベニアの生成を参照して下さい。

veneercallers

リンカによって生成されるベニアを、各ベニアへの呼び出し元に関する追加情報と共に一覧表示します。 呼び出しを個別に一覧表示するには、--verbose と組み合わせて使用します。 詳細については、ベニアの生成を参照して下さい。

--info sizes,totals を使用した場合の出力には、常に入力オブジェクトとライブラリの合計にパッドする値が含まれます。

RW データ圧縮(デフォルト)を使用している場合、または --datacompressor id オプションを使用してコンプレッサを指定した場合、--info sizes,totals からの出力には Grand Totals の下に、イメージの実際のサイズを示すエントリが表示されます。

Note

リスト内のキーワードの間にはスペースを入れないで下さい。 例えば、--info sizes,totalsと入力することができますが、--info sizes, totalsと入力することはできません。

詳細については、イメージに関する情報の取得を参照して下さい。

--[un]mangled

診断メッセージと、--xref--xreffrom--xrefto、および --symbols オプションによって生成されたリストに、符号化された、または符号化されていない C++ シンボル名を表示するようリンカが設定されます。

--unmangled がデフォルトです。 つまり、リンカでは C++ シンボル名を符号化せず、C++ シンボル名はソースコードに表示されるときと同じように表示されます。

--mangled を選択した場合、リンカでは C++ シンボル名を符号化します。 したがって、シンボル名は、オブジェクトのシンボルテーブルに表示されるときと同じように表示されます。

--[no_]map

--map はイメージマップを作成します。 このマップには、各ロード領域、実行領域、およびイメージの入力セクション(リンカによって生成された入力セクションを含む)のアドレスとサイズが含まれます。

--[no_]symbols

--symbols は、リンク手順で使用される各ローカルシンボルとグローバルシンボル、およびその値を一覧表示します。

Note

これにはマッピングシンボルは含まれません。 出力結果にマッピングシンボルを含めるには、--list_mapping_symbols を使用して下さい。

--[no_]list_mapping_symbols

--list_mapping_symbols を使用すると --symbols の出力結果にマッピングシンボルが含まれます。 以下に例を示します。

$a

ARM コード

$t

Thumb コード

$d

データ

マッピングシンボルは、ARM コード、Thumb コード、およびデータ間のフラグの遷移に使用されます。 詳細については、『ELF for the ARM Architecture』(AAELF)を参照して下さい。

--symdefs file

出力イメージから、グローバルシンボル定義を含むファイルを作成します。

デフォルトでは、すべてのグローバルシンボルが symdefs ファイルに書き込まれます。 file という symdefs ファイルが既に存在する場合、リンカはこのファイルに記述されているシンボルの出力を制限します。

Note

この処理が必要ない場合は、リンク手順の前にすべての既存の symdefs ファイルを削除して下さい。

file にパス情報が指定されていない場合、リンカは出力イメージが書き込まれるディレクトリ内でファイルを検索します。 ファイルが検出されない場合は、そのディレクトリ内に作成されます。

シンボル定義ファイルは、他のイメージをリンクするときの入力として使用できます。 詳細については、別のイメージに含まれているシンボルへのアクセスを参照して下さい。

--[no_]xref

--xref は、入力セクション間のすべての相互参照を一覧表示します。

--[no_]xrefdbg

--xrefdbg は、入力デバッグセクション間のすべての相互参照を一覧表示します。

--xref{from|to} object(section)

以下の相互参照を一覧表示します。

  • object の入力 section から他の入力セクションへ

  • 他の入力セクションから object の入力 section

この一覧は --xref リンカオプションによって得られる一覧のサブセットであり、特定の入力セクションとの間の参照を調べるときに便利です。 このオプションを複数使用して、複数の入力セクションとの間の参照の一覧を表示できます。

Copyright © 2002-2007 ARM Limited. All rights reserved.ARM DUI 0206HJ
Non-Confidential