‹ XCSG解説集

XCSG解説集 — 手続き間フロー

XCSG が関数間の呼び出しと、パラメータ、戻り値、グローバル変数を通じて移動するデータをどのように表すかを説明します。

こちらで解説集の索引をご覧下さい。

この記事では、XCSG における手続き間フローに関連する側面を扱います。手続き間フローは、関数間の呼び出し、またはグローバル変数へのアクセスによって生じます。まず、XCSG が手続き間の制御フロー、すなわちコールグラフと関数内のコールサイトをどのように表すかを説明します。次に、パラメータ、戻り値、グローバル変数を介した手続き間データフローに関する概念を説明します。

Xinu のファイル ethwstrt.c における ethwstrt の Atlas グラフで、dcmptr = etptr->ewcmd、代入 dcmptr->dc_buf = (short) buf、df(inter) エッジ、および struct dcmd へのリンクを示しています。
  • XCSG.Function: 関数を表す XCSG.Node です。
  • XCSG.Call: 関数 a が関数 b を呼び出すとき、2 つの XCSG.Function ノードを結ぶ XCSG.Edge a->b です。
  • XCSG.CallSite: 呼び出しが行われる位置であるコールサイトを表す XCSG.DataFlow_Node です。このノードは、対応する実行文を表す XCSG.ControlFlow_Node の中に必ず含まれます。
  • XCSG.InvokedFunction: XCSG.CallSite ノードを、そのコールサイトで呼び出される関数を表す XCSG.Function ノードに結ぶ XCSG.Edge です。

クエリの例:

var forwardCallTree = universe.edges(XCSG.Call).forward(<function>)

このクエリは、与えられた <function> を根とする前方コールツリーを推移的に計算します。同様に、forward を reverse に置き換えると、<function> の逆方向コールツリーを計算します。

次に、手続き間でのデータフローの転送に関連するタグを見てみましょう。

  • XCSG.Parameter: 関数定義で宣言された仮引数を表す XCSG.DataFlow_Node です。
  • XCSG.ParameterPass: コールサイトで渡される実引数を表す XCSG.DataFlow_Node です。
  • XCSG.PassedTo: XCSG.ParameterPass ノードを、対応する XCSG.Parameter ノードに結ぶ XCSG.DataFlow_Edge です。
  • XCSG.GlobalVariable: グローバル変数を表す XCSG.DataFlow_Node です。
  • XCSG.ReturnValue: 関数が返す値を表す XCSG.DataFlow_Node です。このノードは、その値を返す return 文に対応する XCSG.ControlFlow_Node の中に含まれます。
  • XCSG.InterproceduralDataFlow: パラメータ経由、戻り値経由、またはグローバル変数の読み書き経由の、手続き間データフローを表す XCSG.DataFlow_Edge です。

ご質問、または修正のご希望はありますか?

どのようなご用件ですか?