Hallo, mit GCC 4.3.2 aus Yagarto 28.09.2008 scheint dieser Fehler: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27859 behoben zu sein. Zumindest erzeugt der GCC nun den korrekten Code. Allerdings finden ich dafür keinen Eintrag im Changelog und im Bugzilla ist er nicht als behoben vermerkt. Könnte der Fehler zufällig durch eine andere Änderung mit behoben worden sein?
Seit wann soll der Fehler denn drin sein ? Ist das nicht nur ein EABI Problem ?
Der Fehler ist schon seit vielen Jahren enthalten. Eröffnet 19.7.2004: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16634 Er tritt (bei mir) immer auf, wenn in einer Interruptroutine der Stackpointer verwendet werden muss. Dann wird am Anfang und am Ende der Interruptroutine das Linkregister jeweils um 4 decrementiert, so das der Rücksprung um 4 Bytes zuweit zurückgeht, und der letzte Befehl vor dem Interrupt doppelt ausgeführt wird. Das hat natürlich katastrophale Auswirkungen, wenn es dabei z.B. eine Adressberechnung trifft. Muss in der Interruptroutine der Stackpointer nicht verändert werden, so ist alles ok. Daher habe ich alle langen Introutinen umgeschrieben, so das dort nur eine weitere Routine aufgerufen wird. Ich würde mir aber gerne diesen Extraaufruf aus Zeitgründen sparen.
Ich habe mir mal den betreffenden Code im GCC angesehen, d.h. den Code für Prolog/Epilog von Funktionen. Und bin eigentlich nur etwas verwundert, dass nicht noch mehr Böcke solcher Art geschossen werden. Das ist leider ein auf mittlerweile unpassender Grundlage programmierter Flickenteppich und gewisse Redundanzen lassen vermuten, dass sich schon einige Leute dort betätigt haben. Würde mich nicht wundern, wenn sich da einfach nur niemand mehr heran traut, denn im Grund müsste dieser Teil mal vollständig renoviert werden. Aber dann sind reichlich Tests für alle Plattformen und Varianten fällig, und wer hat die schon, folglich mit signifikantem Risiko von Kinderkrankheiten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.