2013/10/09(水)[ARM] コンパイラ

ARM Developer Suiteの独自仕様?

とあるソースコードを読むときに必要だったもの。昔にもコレ使った気がする。

既存のコードをそのままにして、サブクラス化してしまうもの。
要はオリジナル関数をスーパークラスとみなして、継承したサブクラスの実行にすり替える、というイメージか。
仮想関数よろしく、スーパークラスの呼び出しも可能となっています。
デバッグ用に関数を挿入したいとか、main()の手前に処理を追加したいとか、で、使えますね。

コンパイラがコレじゃないとダメですが…。

gccにも似たようなのってあるかな... shared libraryなら、LD_PRELOAD使えるわね。

※以下の資料を参照しました。

Document: "ARM DUI 0151A"
"ARM Developer Suite Version 1.2", "Linker and Utilities Guide"
Example 4-3
extern void ExtraFunc(void);
extern void $Super$$foo(void):

/* this function will be linked instead of the original foo() */
void $Sub$$foo(void)
{
  ExtraFunc();
  /* does some extra setup work */
  $Super$$foo(); /* calls the original foo function */
}