記事 ID: 000085705 コンテンツタイプ: トラブルシューティング 最終改訂日: 2015/05/19

nios2-elf-gcc 4.9 ToolChain で Null ポインターの逆参照を使用するとクラッシュするのはなぜですか?

環境

  • インテル® Quartus® II サブスクリプション・エディション
  • インテル® Nios® II プロセッサー
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    インテル® Quartus®® II ソフトウェア・バージョン 15.0、Nios® nios2-elf-gcc 4.9 ツールチェーンを使用して II コードをコンパイルします。nios2-elf-gcc 4.9 ツールチェーンで -O2 (またはそれ以降) のコードをコンパイルする場合、最適化 -fisolate-erroneous-paths-dereference デフォルトではオンに切り替わります。

     

    で説明されているように

    https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options,

     

    -fisolate-erroneous-paths-dereference

    null ポインターの逆参照により、誤った動作または未定義の動作を引き起こすパスを検出します。これらのパスをメインの制御フローから分離し、誤った動作または未定義の動作でステートメントをトラップにします。このフラグはデフォルトで -O2 以降で有効になっています。

     

    この最適化は、ツールチェーンが可能な null ポインターを介してコードの読み込みまたは格納を試みているのを検出すると、load ステートメントまたは store ステートメントをトラップ命令に変更することを意味します。これにより、コンパイル時の警告なしにエンベデッド・プログラムがクラッシュする可能性があります。

    解決方法

    デザインにアドレスゼロの有効なデータが含まれている場合、次のスイッチを使用してコードをコンパイルして、NULL ポインターの逆参照に関連する問題を回避してください。

     

    -fno-delete-null-pointer-checks

    関連製品

    本記事の適用対象: 1 製品

    インテル® プログラマブル・デバイス

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。