最適化をオンにしてGCC for ARMを使用すると、本当に奇妙な問題が発生します。最適化を行わずに C++ アプリケーションをコンパイルすると、実行時に期待される結果を出力する実行可能ファイルが生成されます。最適化 (-O1) をオンにするとすぐに、アプリケーションが期待どおりの結果を生成できません。問題を特定するために数日間試しましたが、わかりません。初期化されていない変数をコードから削除し、厳密なエイリアシングが問題を引き起こす可能性がある箇所を修正しましたが、それでも適切な結果が得られませんでした。
私は ARM 用に GCC 4.2.0 を使用しており (プロセッサは ARM926ej-s です)、Montavista Linux ディストリビューションでアプリを実行しています。
以下は、私が使用しているフラグです。
-O1 -fno-unroll-loops fno-merge-constants -fno-omit-frame-pointer -fno-toplevel-reorder \
-fno-defer-pop -fno-function-cse -Wuninitialized -Wstrict-aliasing=3 -Wstrict-overflow=3 \
-fsigned-char -march=armv5te -mtune=arm926ej-s -ffast-math
-O1 フラグを取り除き、アプリケーションを再コンパイル/再リンクするとすぐに、適切な出力結果が得られます。フラグからわかるように、最適化を無効にしようとしましたが、問題が発生する可能性があると思いましたが、それでもうまくいきません。
この問題にさらに取り組む方法についての指針はありますか?
ありがとう