記事 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 製品

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

1

このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。このコンテンツはお客様の便宜と一般的な情報のみを目的として提供されており、情報の正確さと完全性を保証するものではありません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。