Tuve un misterioso error al cargar archivos Vorbis Ogg en Mac OSX. El primer archivo se carga correctamente, el segundo falla en algún código que indica que el archivo está dañado, lo mismo ocurre incluso si cargué el mismo archivo exacto dos veces.MAC OSX Error de Intel LLVM Assembler (causa que el cargador OGG de Vorbis se bloquee)
Después de largas horas de depuración profunda dentro de Vorbis descubrí que el error es causado por la función del sistema "pow" (doble potencia de) que devuelve un (nan) para una entrada completamente válida, y eso ocurre solo en el segundo llamar a (ov_read), en la primera llamada los mismos valores exactos pasados a "pow" devuelve un resultado válido.
8 horas después y mucha documentación de Intel x87 leyendo Encontré el problema. Larga historia corta, hay una función muy dentro Vorbis "vorbis_ftoi" que utiliza este código ensamblador:
__asm__("fistl %0": "=m"(i) : "t"(f));
Cuál debe empujar y hacer estallar en la FPU Pila de Intel. Sin embargo, en LLVM que genera este código:
fld QWORD PTR [ebp-0x20]
fist DWORD PTR [ebp-0x14]
que empuja en la pila, pero nunca aparece provocando un desbordamiento de pila FPU. Y eso es, obviamente, un error en LLVM
El código apropiado generada por GCC se ve así:
fld QWORD PTR [ebp-0x20]
fist DWORD PTR [ebp-0xc]
fstp st(0) // pops off the stack
perdí un día y medio y algunos bytes de mi Brian aprendizaje un poco de basura (Instrucción x87 set y Registros) sobre esto, así que pensé que lo compartiría.
Auday
Si cree que ha encontrado un error en el código suministrado por Apple, debe informarlo a Apple: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/wa/signIn –
hecho , gracias Ned – Auday
+1 porque ayer también encontré un error en su código y también lo informé. Al menos el mío fue un fallo del compilador por lo que el tiempo de depuración no fue tan malo ... –