12.19 --callgraph、--no_callgraph

関数の静的コールグラフを含むファイルを作成します。

コールグラフは、イメージ内のすべての関数の定義および参照情報を提供します。

--partial オプションを使用して、部分的にリンクされたオブジェクトを作成する場合は、コールグラフファイルが作成されません。

使用法

コールグラフファイル:
  • 生成されたイメージと同じディレクトリに保存されます。
  • リンク先イメージと同じ名前です。別のコールグラフファイル名を指定するには、 --callgraph_file=filename オプションを使用します。
  • デフォルトの出力形式は HTML です。出力形式を制御するには、 --callgraph_output=fmt オプションを使用します。

リンカで関数のスタック消費量を計算する場合は、アセンブラファイルに定義された関数に次の適切な要素が必要です。
  • PROC ディレクティブおよび ENDP ディレクティブ。
  • FRAME PUSH ディレクティブおよび FRAME POP ディレクティブ。
各関数 func について、リンカによって以下の情報が示されます。
  • 関数がコンパイルされるときの命令セットの状態(ARM または Thumb)。
  • func を呼び出す一連の関数。
  • func によって呼び出される一連の関数。
  • func のアドレスがイメージ内で使用される回数。
また、コールグラフは以下のような関数を識別します。
  • インターワークベニア経由で呼び出される関数。
  • イメージ外で定義された関数。
  • 未定義の状態が可能な関数(弱参照)。
  • プロシージャリンクテーブル(PLT)経由で呼び出される関数。
  • 呼び出されていないものの、まだイメージ内に存在する関数。
また、静的コールグラフでは、スタック消費量に関する情報も提供されます。以下の情報が表示されます。
  • 各関数によって使用されるスタックフレームのサイズ。
  • 任意の呼び出しシーケンス(関数呼び出し非環式チェーン)を介して関数で使用されるスタックの最大サイズ。
サイクルがある場合、またはリンカによってコールチェーン内にスタックサイズの情報がない関数が検出された場合、スタック消費量に + Unknown が追加され、スタック消費量が不明である理由が追加されます。
関数のデバッグフレーム情報がない場合は、リンカによって不明なスタックフレームの情報がレポートされます。
間接的な関数については、どの関数によって間接的な呼び出しが行われたかを、リンカで確実に判断することはできません。このことは、呼び出しチェインの最大のスタック消費量の計算に影響する場合があります。イメージで使用されるすべての関数ポインタがリンカによって示されます。
アセンブリ言語コードでフレームディレクティブを使用して、コードでスタックを使用する方法を記述します。これらのディレクティブを使用すると、デバッガのデバッグフレーム情報は確実に存在し、スタック展開またはプロファイリングが実行されます。

デフォルト

デフォルトは --no_callgraph です。
関連する参考文書
12.20 --callgraph_file=filename
12.21 --callgraph_output=fmt
12.22 --callgraph_subset=symbol[,symbol,...]
12.23 --cgfile=type
12.24 --cgsymbol=type
12.25 --cgundefined=type
8.2 スキャッタファイルの構文
関連情報
FRAME POP
FRAME PUSH
FUNCTION、PROC
ENDFUNC、ENDP
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.