C コードでゼロによる整数除算エラーが発生した場合のパラメータの検証

パラメータを検証し、事後分析デバッグ用に保存するには、__aeabi_idiv0 をトラップします。__aeabi_idiv0 のすべての呼び出しに割り込むには、$Super$$ および $Sub$$ のメカニズムを使用します。

ゼロによる整数除算エラーが発生した場合にパラメータを検証するには、次の手順を実行します。

  1. パッチを適用していない元の関数 __aeabi_idiv0() を識別するには、__aeabi_idiv0() に接頭辞 $Super$$ を付けます。

  2. 元の関数を直接呼び出すには、接頭辞 $Super$$ を付けた __aeabi_idiv0() を使用します。

  3. __aeabi_idiv0() の元のバージョンの代わりに呼び出す新しい関数を識別するには、__aeabi_idiv0() に接頭辞 $Sub$$ を付けます。

  4. 元の関数 __aeabi_idiv0() の前または後に処理を追加するには、__aeabi_idiv0() に接頭辞 $Sub$$ を付けます。

Show/hide

Example 36 は、$Super$$ および $Sub$$ のメカニズムを使用して __aeabi_div0 をインターセプトする仕組みを示しています。

Example 36.  $Super$$ および $Sub$$ を使用した __aeabi_div0 のインターセプト

extern void $Super$$__aeabi_idiv0(void);
/* この関数が元の関数 __aeabi_idiv0() の代わりに呼び出される */
void $Sub$$__aeabi_idiv0()
{
    // ゼロによる除算を処理するコードを挿入する
    ...
    // 元の __aeabi_idiv0 関数を呼び出す
    $Super$$__aeabi_idiv0();
}

Show/hide関連項目

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