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.