Wie schreibe ich ein eigenes Codegenerator-Backend für gcc?

 C Programming >> C-Programmierung >  >> Tags >> GCC
Wie schreibe ich ein eigenes Codegenerator-Backend für gcc?


Ich habe meine ganz eigene (sehr einfache) Byte-Code-Sprache und eine virtuelle Maschine entwickelt, um sie auszuführen. Es funktioniert gut, aber jetzt möchte ich gcc (oder einen anderen frei verfügbaren Compiler) verwenden, um Bytecode für diese Maschine aus einem normalen C-Programm zu generieren. Die Frage ist also, wie ändere oder erweitere ich gcc, damit es meinen eigenen Bytecode ausgeben kann? Beachten Sie, dass ich meinen Bytecode NICHT in Maschinencode kompilieren möchte, ich möchte C-Code in (meinen eigenen) Bytecode "kompilieren".


Mir ist klar, dass dies eine potenziell große Frage ist, und es ist möglich, dass die beste Antwort lautet:"Schauen Sie sich den gcc-Quellcode an". Ich brauche nur etwas Hilfe, um damit anzufangen. Ich nehme an, dass es einige Artikel oder Bücher zu diesem Thema geben muss, die den Prozess zum Hinzufügen eines benutzerdefinierten Generators zu gcc beschreiben könnten, aber ich habe beim Googeln nichts gefunden.


Antworten:


Es ist harte Arbeit.


Zum Beispiel entwerfe ich auch meine eigene "Architektur" mit eigenem Bytecode und wollte dafür C/C++ Code mit GCC generieren. So mache ich es:



  1. Zunächst sollten Sie alles über die Portierung im Handbuch von GCC nachlesen.

  2. Vergessen Sie auch nicht, GCC Internals zu lesen.

  3. Lesen Sie viel über Compiler.

  4. Sehen Sie sich auch diese Frage und die Antworten hier an.

  5. Google für weitere Informationen.

  6. Fragen Sie sich, ob Sie wirklich bereit sind.

  7. Stellen Sie sicher, dass Sie eine sehr gute Kaffeemaschine haben ... Sie werden sie brauchen.

  8. Beginnen Sie damit, maschinenabhängige Dateien zu gcc hinzuzufügen.

  9. Kompilieren Sie gcc host-zielübergreifend.

  10. Überprüfen Sie die Code-Ergebnisse im Hex-Editor.

  11. Führen Sie weitere Tests durch.

  12. Jetzt viel Spaß mit deiner eigenen Architektur :D


Wenn Sie fertig sind, können Sie c oder c++ nur ohne betriebssystemabhängige Bibliotheken verwenden (Sie haben derzeit kein laufendes Betriebssystem auf Ihrer Architektur) und Sie sollten jetzt (falls erforderlich) viele andere Bibliotheken mit Ihrem Cross-Compiler kompilieren, um ein gutes Framework zu haben .


PS:LLVM (Clang) ist einfacher zu portieren... vielleicht möchtest du da anfangen?