コマンドラインオプションを使用した C++ 例外テーブルの生成の制御

デフォルト、つまり、オプション --exceptions が指定されている場合は、イメージに例外テーブルを含めることができます。 コードで例外がスローされない場合、例外テーブルは自動的に破されます。 ただし、オプション --no_exceptions を指定すると、未使用セクションの削除後に例外セクションが存在する場合、リンカによってエラーが生成されます。

--no_exceptions オプションを使用すると、コードで例外が処理されないようにできます。 リンカは、エラーメッセージを生成して例外が検出されたことを通知、最終イメージを生成しません。

ただし、--no_exceptions オプションを --diag_warning オプションと組み合わせて使用すると、エラーメッセージを警告メッセージに降格できます。 この場合、リンカは、最終イメージを生成します、例外が検出されたことを警告するメッセージも生成します。

リンカは、従来のオブジェクト用に、デバッグフレーム情報を含む例外テーブルを作成できます。 この操作は、C 言語またはアセンブリ言語のオジェクトについては支障なく行うことができます。 デフォルトでは、リンカは例外テーブルを作成しません。 これは、リンカオプション --exceptions_tables=nocreate を使用した場合と同じです。

リンカオプション --exceptions_tables=unwind を使用すると、リンカは、.debug_frame 情報を使用して、例外テーブルを含んでいないイメージのセクションごとに、レジスタが復元する unwind テーブルを作成できます。 unwind テーブを作成できない場合、リンカは代わりに nounwind テーブルを作成します。

リンカオプション --exceptions_tables=cantunwind を使用すると、例外テーブルを含んでいないイメージのセクションごとに nounwind テーブルを作成できます。

Note

以下の点に注意して下さい。

  • デフォルト(つまり、--exceptions --exception_tables=nocreate)では、C コードがオプション --exceptions でコンパイルされる場合を除き、C コードまたはアセンブリコードで例外をスローすることは安全ではありません。

  • リンカは、.debug_frame 情報を使用して、オブジェクトからフレーム展開命令を生成できます。 フレーム展開は、C およびアセンブラコードには十分です。 しかし、展されるスタック上のオブジェクトのデスクトラクタを呼び出さないため、C++ コードには不十分です。

    C++ のクリーンアップコードは、--exceptions オプションを使用して、コンパイラによって生成される必要があります。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612