Lowlevel

Lowlevel => Softwareentwicklung => Thema gestartet von: rizor am 21. June 2011, 22:54

Titel: va_arg()
Beitrag von: rizor am 21. June 2011, 22:54
Nabend zusammen,

mir ist eben aufgefallen, dass ich ein Problem mit meinem va_arg habe.
Ich Verwende das builtin vom GCC.
An sich muesste die Funktion doch nach dem Aufruf den args-Parameter auf den naechsten Parameter verschieben, oder?
Leider macht sie das nicht. Woran kann das liegen?

Habe einfach ein kprintf, dass ab zwei weiteren Parametern immer nur den ersten verwendet.
z.B.: kprintf(string, val1, val2) => In kprintf wird nur val1 verarbeitet, obwohl ich zwei Steuerzeichen dafuer habe.
Titel: Re:va_arg()
Beitrag von: kevin am 21. June 2011, 23:00
Einfachste Möglichkeit, was zu testen, wäre dein kprintf mal einzeln in einer Umgebung zu probieren, von der du weißt, dass sie tut. Also zum Beispiel einfach mal in ein Linuxprogramm einbauen.

Ich kann dir aber auch versichern, dass die GCC-Builtins in tyndur einwandfrei funktionieren.
Titel: Re:va_arg()
Beitrag von: rizor am 27. June 2011, 20:28
Also unter meiner Linux-Umgebung funktioniert es einwandfrei.
Woran kann es bei meinem Kernel liegen?
Das ganze wird doch komplett vom Kernel organisiert, oder?
Titel: Re:va_arg()
Beitrag von: erik.vikinger am 28. June 2011, 12:39
Hallo,


ich vermute mal das die Builtins für die Behandlung von variablen Argumenten nicht korrekt in den Kernel eingebunden (gelinkt) werden.


Grüße
Erik
Titel: Re:va_arg()
Beitrag von: Svenska am 28. June 2011, 13:31
Setzen die gcc-builtins irgendwelche Eigenschaften der Umgebung voraus, die du vielleicht in deinem Kernel nicht erfüllst?
Titel: Re:va_arg()
Beitrag von: rizor am 28. June 2011, 19:15
Wie kann ich das mit dem Linking denn herausfinden?
Die builtins brauchen glaub ich nichts.
Die müssen nur einen ordentlichen Stack bekommen.
Der funktioniert.
Titel: Re:va_arg()
Beitrag von: rizor am 03. July 2011, 23:28
Das Problem ist geloest.
Ich hatte als Uebergabe die normale va_list, die von der aufrufenden Funktion immer gesichert wurde und somit nie ein ordentlicher Parameter heraus kam.