¿Cómo escribir su propio motor generador de código para gcc?

 C Programming >> Programación C >  >> Tags >> GCC
¿Cómo escribir su propio motor generador de código para gcc?


Creé mi propio lenguaje de código de bytes (muy simple) y una máquina virtual para ejecutarlo. Funciona bien, pero ahora me gustaría usar gcc (o cualquier otro compilador disponible gratuitamente) para generar código de bytes para esta máquina desde un programa c normal. Entonces, la pregunta es, ¿cómo modifico o extiendo gcc para que pueda generar mi propio código de bytes? Tenga en cuenta que NO quiero compilar mi código de bytes en código de máquina, quiero "compilar" código c en (mi propio) código de bytes.


Me doy cuenta de que esta es una pregunta potencialmente grande, y es posible que la mejor respuesta sea "ir a ver el código fuente de gcc". Solo necesito ayuda sobre cómo empezar con esto. Me imagino que debe haber algunos artículos o libros sobre este tema que puedan describir el proceso para agregar un generador personalizado a gcc, pero no he encontrado nada buscando en Google.


Respuestas:


Es un trabajo duro.


Por ejemplo, también diseño mi propia "arquitectura" con mi propio código de bytes y quería generar código C/C++ con GCC para ello. Así es como lo hago:



  1. Al principio deberías leer todo sobre la portabilidad en el manual de GCC.

  2. Además, no olvide leer GCC Internals.

  3. Lea muchas cosas sobre compiladores.

  4. Mira también esta pregunta y las respuestas aquí.

  5. Google para obtener más información.

  6. Pregúntese si realmente está listo.

  7. Asegúrese de tener una máquina de café muy buena... la necesitará.

  8. Comience a agregar archivos dependientes de la máquina a gcc.

  9. Compila gcc de forma cruzada entre el host y el destino.

  10. Comprueba los resultados del código en Hex-Editor.

  11. Haga más pruebas.

  12. Ahora diviértete con tu propia arquitectura :D


Cuando haya terminado, puede usar c o c ++ solo sin bibliotecas dependientes del sistema operativo (actualmente no tiene un sistema operativo en ejecución en su arquitectura) y ahora debería (si lo necesita) compilar muchas otras bibliotecas con su compilador cruzado para tener un buen marco .


PD:LLVM (Clang) es más fácil de portar... ¿quizás quieras empezar por ahí?