Mac OSX上でVorbis Oggファイルを読み込む際に不思議なバグがありました。最初のファイルが正しく読み込まれ、2番目のファイルが破損していることを示すコードがクラッシュします。同じファイルを2回読み込んでも同じことが起こります。MAC OSXインテルLLVMアセンブラのバグ(Vorbis OGGローダがクラッシュする)
Vorbisの中で深くデバッグした後、私はバグが完全な有効な入力のために(ナノ)を返すシステム関数 "pow"(二重の力)によって引き起こされていることを発見しました。 (ov_read)を呼び出すと、最初の呼び出しで "pow"に渡された同じ正確な値が有効な結果を返します。
8時間後、Intel x87のドキュメントが多数読んで、問題が見つかりました。押すとインテルFPUスタックに飛び出します
__asm__("fistl %0": "=m"(i) : "t"(f));
:長い話が短い、このアセンブリコードを使用する関数奥Vorbisの「vorbis_ftoi」があります。スタックにプッシュしていないが、決してFPUスタックオーバーフローを引き起こしポップ
fld QWORD PTR [ebp-0x20]
fist DWORD PTR [ebp-0x14]
:しかしLLVMのは、このコードを生成します。
fld QWORD PTR [ebp-0x20]
fist DWORD PTR [ebp-0xc]
fstp st(0) // pops off the stack
私は一日半、私のブライアンは、いくつかのゴミ(のx87命令セットとレジスタを学ぶのいくつかのバイトを無駄:そして、それはGCCによって生成された適切なコードは次のようになり
LLVM
に明らか バグです私はそれを分かち合いますが。Auday
Appleが提供するコードでバグが見つかったと思われる場合は、Appleに報告してください。https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/wa/signIn –
done 、ありがとうNed – Auday
+1私は彼らのコードの昨日のバグを見つけたので、またそれを報告しました。少なくとも私のものはコンパイラのクラッシュだったので、デバッグの時間はそれほど悪くはありませんでした。 –