MAC OSX Intel LLVM Assembler-Fehler (führt zum Absturz von Vorbis OGG Loader)

9

Ich hatte einen mysteriösen Fehler beim Laden von Vorbis Ogg-Dateien auf Mac OSX. Die erste Datei wird korrekt geladen, die zweite stürzt in einem Code ab, der anzeigt, dass die Datei beschädigt ist, dasselbe passiert auch, wenn ich die gleiche Datei zweimal lade.

Nach vielen Stunden tiefem Debugging in Vorbis habe ich herausgefunden, dass der Fehler durch die Systemfunktion "pow" (doppelte Potenz) verursacht wird, die ein (nan) für eine vollständig gültige Eingabe zurückgibt, und das erst beim zweiten Aufruf to (ov_read), beim ersten Aufruf geben die gleichen exakten Werte an "pow" das gültige Ergebnis zurück.

8 Stunden später und viele Intel x87 Dokumentation lesen ich das Problem gefunden. Lange Rede, kurzer Sinn, es gibt eine Funktion tief in vorbis "vorbis_ftoi", die diesen Assemblercode verwendet:

%Vor%

Was sollte Push und Pop auf dem Intel FPU Stack. Auf LLVM erzeugt es jedoch diesen Code:

%Vor%

Was auf den Stack drückt, aber nie platzt, verursacht einen FPU-Stack-Überlauf. Und das ist offensichtlich ein Fehler in LLVM

Der richtige Code, der von GCC generiert wird, sieht folgendermaßen aus:

%Vor%

Ich verschwendete eineinhalb Tage und einige Bytes meiner Brian, die etwas Müll (x87 Instruction Set und Register) dazu lernten, also würde ich es teilen.

Auday

    
Auday 11.10.2011, 03:31
quelle

2 Antworten

3

Simpler Patch, hat nur Auswirkungen beim Kompilieren mit llvm:

%Vor%

Leider habe ich nicht genug Reputation, um das OP zu wählen, aber wisse, dass ich für deinen Fund dankbar bin. Danke.

    
Darko M. 02.02.2012 14:22
quelle
2

Ausgezeichnet! Vielen Dank. Eine andere Lösung ist, die asm ganz einfach zu entfernen. Hier ist ein Patch:

%Vor%     
john 15.11.2011 23:55
quelle

Tags und Links