PrettyOS mit Clang kompilieren



  • Als Alternative zu GCC lässt sich auch Clang dazu nutzen, PrettyOS zu kompilieren.

    Damit andere das auch ausprobieren können, hier ein Zip-Archiv mit einem SVN-Patch, der das Makefile ändert, damit es kompiliert, und Clang für Windows: http://kloke-witten.dyndns.org/~philipp/downloads/PrettyOS/Patchs/clang.zip
    Gelinkt wird PrettyOS weiterhin mit LD.

    Ganz Problemlos funktioniert es aber nicht, da sich das Laufzeitverhalten von PrettyOS ändert (leider zum Schlechten, aber seht selbst!). Bei der Optimierungsstufe -O1 bootet es zwar, zeigt aber andere Macken (z.B. fehlerhafte Ausgaben); Bei anderen Optimierungsstufen bootet es garnicht.

    Warum es nicht fehlerfrei funktioniert, kann ich nicht sagen; Ich bin dankbar für Hinweise.

    mfg
    Mr X


  • Mod

    Nach meinen ersten Versuchen auf Qemu und realer Hardware muss ich von Clang doch etwas abraten. Für einfachere Systeme ist das aber vielleicht eine Alternative zum Cross-Compiler.



  • Was für Probleme gibt es denn damit? Hast du dich näher damit befasst und kennst irgendwelche konkreten Probleme im Zusammenhang mit dem Compiler oder hast nur festgestellt, dass irgendwas damit nicht tut wie beabsichtigt? Falls letzteres, dann könnte auch gut ein PrettyOS-Bug sein, dem man auf den Grund gehen sollte.

    Man rät ja auch nicht von realer Hardware ab, weil das System auf qemu besser läuft, sondern man fixt das OS. 😉



  • taljeth schrieb:

    Was für Probleme gibt es denn damit? Hast du dich näher damit befasst und kennst irgendwelche konkreten Probleme im Zusammenhang mit dem Compiler oder hast nur festgestellt, dass irgendwas damit nicht tut wie beabsichtigt? Falls letzteres, dann könnte auch gut ein PrettyOS-Bug sein, dem man auf den Grund gehen sollte.

    Man rät ja auch nicht von realer Hardware ab, weil das System auf qemu besser läuft, sondern man fixt das OS. 😉

    ehenkes hat einfach getestet und daraus geschlossen, das Clang fehlerhaft sei.
    Ich stimme dir zu, dass es gut möglich ist, das der Fehler in PrettyOS liegt.

    Ein Problem ist z.B. die Anzeige der Uhrzeit, die nur Zahlensalat enthält. Es ist dort z.B. denkbar, das PrettyOS irgendeine Variable nicht initialisiert, was bei verschiedenen Compilern vlt. verschiedene Auswirkungen hat


  • Mod

    @taljeth: Hast Du tyndur schon mal mit Clang kompiliert? 😉

    Ich habe nicht gesagt, dass Clang fehlerhaft ist, momentan bezüglich PrettyOS nur davon abgeraten, da an mehreren Stellen Probleme aufgetreten sind. Ein neues Werkzeug sollte Probleme lösen, nicht neue generieren. :xmas2:

    Allerdings lohnt es sich sicherlich an diesen Stellen genauer hin zu sehen.



  • Hm, ob kompiliert oder nicht bin ich mir nicht ganz sicher, und ausgeführt habe ich das Ergebnis ziemlich sicher nicht, aber für statische Analyse hab ich Clang mal benutzt. Ich glaube, neben einem Haufen falscher Alarme hat er sogar ein paar richtige Bugs gefunden. 😉

    Ich würde Clang in diesem Zusammenhang auch nicht als etwas ansehen, das Probleme generiert, sondern das bestehende Probleme aufzeigt, über die man früher oder später wohl auch mit gcc stolpern könnte und die vielleicht in anderen Zusammenhängen schwieriger zu debuggen sind. Klare und offensichtliche Probleme sind doch etwas schönes.

    Es könnte sich natürlich auch herausstellen, dass das Problem mit Clang nicht leicht zu debuggen ist, aber bevor ich zu diesem Ergebnis gekommen bin, würde ich es einfach mal eher als Chance sehen.



  • Bei PrettyOS hats auch einen Bug gefunden: die Funktion abs ist sinnlos, wenn sie einen unsigned int als Parameter nimmt^^



  • *lol* Der gefällt mir. 😃



  • Mr X schrieb:

    Bei PrettyOS hats auch einen Bug gefunden: die Funktion abs ist sinnlos, wenn sie einen unsigned int als Parameter nimmt^^

    Solche Sachen hätte man auch mit splint finden können 😉 :xmas1:


  • Mod

    Ja, ihr habt in Beziehung "Fehlersuche" Recht. Alles, was hilft Fehler aufzudecken und zu testen, ist in irgendeiner Form hilfreich. :xmas1:



  • Da, wo ein Fehler ist, ist auch der zweite drin... :xmas2:



  • Ich habe das Downloadpaket oben aktualisiert: Clang kann seit neustem auch Register-Variablen, sodass der Patch für cpu.c nichtmehr notwendig ist.


  • Mod

    Das klingt gut! 👍


Anmelden zum Antworten