$Super$$ と $Sub$$ を使用したシンボル定義へのパッチの適用

外部ライブラリや ROM コード内に含まれているなどの理由で、既存のシンボルを変更できない場合があります。このような場合は、$Super$$ パターンと $Sub$$ パターンを使用して、既存のシンボルにパッチを適用できます。

関数 foo() の定義にパッチを適用するには、以下を使用します。

$Super$$foo

パッチを適用していない元の関数 foo() を識別します。このパターンを使用して、元の関数を直接呼び出します。

$Sub$$foo

元の関数 foo() の代わりに呼び出す新しい関数を識別します。このパターンを使用して、元の関数の前または後に処理を追加します。

Note

$Sub$$$Super$$ のメカニズムは静的なリンク時にのみ機能します。$Super$$ の参照をダイナミックシンボルテーブルにインポートまたはエクスポートすることはできません。

以下の例では、既存の関数 foo() への呼び出しの前に、関数 ExtraFunc() への呼び出しを挿入する方法を示しています。

Example 9. $Super$$ と $Sub$$ の使用

extern void ExtraFunc(void); extern void $Super$$foo(void):

/* この関数が元の関数 foo() の代わりに呼び出される */
void $Sub$$foo(void)
{
  ExtraFunc();    /* 追加のセットアップ作業を行う */
  $Super$$foo();  /* 元の関数 foo() を呼び出す */
                  /* 元の関数 foo() の呼び出しを回避するには
                   * $Super$$foo(); 関数の呼び出しを省略する。
                   */
}

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0474EJ
Non-ConfidentialID081711