Autor Thema: va_arg()  (Gelesen 7570 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« 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.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 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.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 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?
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #3 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
Reality is that which, when you stop believing in it, doesn't go away.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 28. June 2011, 13:31 »
Setzen die gcc-builtins irgendwelche Eigenschaften der Umgebung voraus, die du vielleicht in deinem Kernel nicht erfüllst?

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #5 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.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #6 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.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

 

Einloggen