Tôi đã gặp lỗi bí ẩn khi tải các tệp Vorbis Ogg trên Mac OSX. Tệp đầu tiên được tải chính xác, sự cố thứ hai trong một số mã cho biết tệp bị hỏng, điều tương tự xảy ra ngay cả khi tôi tải cùng một tệp chính xác hai lần.Lỗi OSX MAC OSX Intel LLVM (khiến trình tải Vorbis OGG bị lỗi)
Sau nhiều giờ gỡ lỗi sâu bên trong Vorbis, tôi phát hiện ra lỗi do chức năng hệ thống "pow" (công suất kép) trả về (nan) cho đầu vào hoàn toàn hợp lệ và chỉ xảy ra vào giây gọi đến (ov_read), trên lần gọi đầu tiên, các giá trị chính xác được chuyển đến "pow" sẽ trả lại kết quả hợp lệ.
8 giờ sau và rất nhiều tài liệu đọc x87 của Intel tôi đã tìm thấy sự cố. Dài câu chuyện ngắn có một chức năng sâu bên trong vorbis "vorbis_ftoi" sử dụng mã lắp ráp này:
__asm__("fistl %0": "=m"(i) : "t"(f));
Nên đẩy và bật trên ngăn xếp FPU của Intel. Tuy nhiên trên LLVM nó tạo ra mã này:
fld QWORD PTR [ebp-0x20]
fist DWORD PTR [ebp-0x14]
Đẩy vào ngăn xếp nhưng không bao giờ bật ra gây tràn FPU. Và đó là rõ ràng là một lỗi trong LLVM
Các mã đúng được tạo ra bởi GCC trông như thế này:
fld QWORD PTR [ebp-0x20]
fist DWORD PTR [ebp-0xc]
fstp st(0) // pops off the stack
tôi lãng phí một ngày rưỡi và một số byte của brian mình biết một số rác (x87 Instruction Set và Thanh ghi) về điều này, vì vậy tôi mặc dù tôi sẽ chia sẻ nó.
Auday
Nếu bạn cho rằng mình đã tìm thấy lỗi trong mã do Apple cung cấp, bạn nên báo cáo lỗi đó cho Apple: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/wa/signIn –
xong , cảm ơn Ned – Auday
+1 bởi vì tôi đã tìm thấy một lỗi trong mã của họ ngày hôm qua cũng như và cũng báo cáo nó. Ít nhất tôi là một vụ tai nạn biên dịch nên thời gian gỡ lỗi không quá tệ ... –