Lowlevel
Lowlevel => Softwareentwicklung => Thema gestartet 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.
-
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.
-
Also unter meiner Linux-Umgebung funktioniert es einwandfrei.
Woran kann es bei meinem Kernel liegen?
Das ganze wird doch komplett vom Kernel organisiert, oder?
-
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
-
Setzen die gcc-builtins irgendwelche Eigenschaften der Umgebung voraus, die du vielleicht in deinem Kernel nicht erfüllst?
-
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.
-
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.