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 */ }