とあるソースコードを読むときに必要だったもの。昔にもコレ使った気がする。
既存のコードをそのままにして、サブクラス化してしまうもの。
要はオリジナル関数をスーパークラスとみなして、継承したサブクラスの実行にすり替える、というイメージか。
仮想関数よろしく、スーパークラスの呼び出しも可能となっています。
デバッグ用に関数を挿入したいとか、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 */
}