Hallo, ich rufe folgende Routine long long bla(long long eins,long long zwei,long long drei) { return drei ; } so auf: rerere=bla( (long long)(1ll),(long long)(2ll),(long long)(3ll)); Das "1ll" ist "eins Ell Ell", Suffix für long long, also richtiger Typ mit nem Sicherheits-cast. Das funzt auch, die zwei kommt zurück, die eins auch, die drei aber nicht !? D.h. return(3); liefert Schrott zurück. Die funktionierende Variante macht das handling der Daten nur über die Register, die nicht-funktionierende Variante holt sich die Daten vom Stack und liefert sie in den Registern zurück. Die Stackzugriffe gehen wohl schief. Im angehängten File Auszüge des listings. Zu geringe Stackgröße ist ausgeschlossen. Atmega128 ist Zielhardware, natürlich GCC. Wo liegt der Fehler, gibts Infos oder Optionen dazu, die mir unbekannt sind? Danke Cheers Detlef
Ähm, so muß es heißen: D.h. return drei; liefert Schrott zurück. Gute Nacht Detlef
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27386 :-( Auch wenn es nicht offensichtlich ist: der Bug hat gar nichts mit dem AVR zu tun, sondern ist im generischen Teil von GCC. Leider (zu unserem Leidwesen) stört er GCCs wichtige Architekturen eben überhaupt nicht, weil diese dafür ihre eigenen Pattern für die Parameterübergabe liefern.
Danke. Den nächsten verregneten Sonntagnachmittag lese ich mal bugreports. Cheers Detlef
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.