Ich versuche, ein Programm zu erstellen, das mit GCC kompiliert wurde und Qt- und SSE-Intrinsics verwendet. Es scheint, dass wenn eine meiner Funktionen von Qt aufgerufen wird, die Stapelausrichtung nicht erhalten bleibt. Hier ist ein kurzes Beispiel, um zu verdeutlichen, was ich meine:
%Vor%Hier ist die Ausgabe:
%Vor%Konfiguration:
Ich habe versucht, das Beispielprogramm mit den gleichen Optionen zu kompilieren, die ich im Qt Makefile gesehen habe:
%Vor%, Verknüpfungsoptionen:
%Vor%Jetzt weiß ich nicht, in welche Richtung ich suchen soll. Irgendwelche Hinweise würden geschätzt werden. Danke!
Fabien
Sie können dazu die Option -mstackrealign
verwenden, ohne Ihrem Quellcode Attribute hinzuzufügen:
-mstackrealign Richten Sie den Stapel beim Eintritt neu aus. Auf dem Intel x86 generiert die Option -mstackrealign einen alternativen Prolog und Epilog, der den Laufzeitstapel bei Bedarf neu ausrichtet. Dies unterstützt das Mischen von Legacy-Codes, die einen ausgerichteten 4-Byte-Stapel mit modernen Codes halten, die einen 16-Byte-Stapel für SSE-Kompatibilität behalten. Siehe auch das Attribut force_align_arg_pointer, anwendbar auf einzelne Funktionen.
(aus den GCC-Dokumenten )