jump to navigation

Documento: Archivos de un porting 12 noviembre, 2006

Posted by pjmicrocontroladores in Documentación.
trackback

Cuando nos enfrentamos al porting de GCC a una nueva arquitectura, el primer paso es modificar convenientemente el fichero “config.sub” de la raíz de directorios de GCC. El fichero “config.sub” es la base de datos de gcc de arquitecturas y sistemas operativos soportados. Por lo tanto debemos unir nuestra arquitectura `pic’ a la lista de máquinas básicas. Lo dicho se traduce en sumar, dentro del fichero, los siguientes datos:

case $basic_machine in

| pdp10 | pdp11 \
| pic \
| pj | pjl \

Con esto le decimos a GCC a la arquitectura PIC existe y es válida dentro de algún producto GNU. Para conseguir que el mismo GCC lo soporte, debemos modificar otro fichero, el de configuración. Para ello tenemos dos maneras de hacerlo, modificar el fichero configure.in y ejecutar posteriormente autoconf para regenerar el ejecutable configure o modificar éste directamente. Elegir una opción u otra no influye si seguimos los pasos adecuados al compilar, es decir, no olvidar ejecutar autoconf si elegimos modificar configure.in. En ambos casos para encontrar la sección adecuada podemos buscar la arquitectura avr e introducir los siguientes datos a continuación de ella:

avr-*-*)
noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
pic-*-*)
noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;

Modificados estos dos ficheros, GCC conoce la arquitectura PIC y podrá compilarla. La definición de la arquitectura estará en un directorio llamado pic dentro del subdirectorio gcc/config. Allí no solo podemos crear la nueva arquitectura sino examinar las otras ya existentes. Como ejemplo podemos ver la simplicidad de la arquitectura stormy16 o la complejidad de la arquitectura i386.

Los ficheros principales que describen la arquitectura y que serán el centro de trabajo fundamental durante el transcurso de este proyecto son:

  • pic.md
  • pic.h
  • pic.c

El primer fichero, pic.md, contiene la descripción de la máquina (Machine Description). Allí encontraremos como GCC tiene que traducir las instrucciones del lenguaje intermedio de registros RTL a código ensamblador funcional para nuestra arquitectura. Este fichero a su vez puede contener inclusiones de otros ficheros que contendrán el mismo tipo de datos. El objetivo de usar estos ficheros incluidos es la claridad en la presentación, ya que no imponen ningún cambio funcional.

El fichero pic.h contiene la especificación de la máquina. El objetivo es especificar macros de describen a GCC como funciona interiormente la máquina. Entre otras informaciones indica el número de registros, su uso y nombre, la alineación requerida para los datos o como nombrar las distintas sección dentro del código ensamblador. Para algunas macros no nos bastará un descripción corta en linea o esta sería muy compleja, por lo que podemos usar funciones C externas y que serán definidas en el fichero pic.c. Este último fichero puede contener también funciones C llamadas desde pic.md para aquellas instrucciones RTL que no sean fácil de pasar a código ensamblador o necesiten ciertas comprobaciones. GCC usa la información de pic.h para crear el código RTL adecuado a la máquina y saber como optimizarlo.

A parte de estos ficheros existen otros que sirven de apoyo a la descripción de la máquina. Por ejemplo con la pareja t-pic y libgcc.S podemos definir rutinas directamente en ensamblador que servirán para crear la librería libgcc, que contiene todas las operaciones matemáticas que no sean soportadas directamente por la arquitectura y si por el estándar ANSI C. En estos ficheros podemos incluir rutinas de apoyo para otras operaciones. Pensemos por ejemplo que una operación de división, esta es muy costosa espacialmente, y si la usamos varias veces a lo largo del código C tendremos un gasto excesivo de memoria de programa. Si en lugar de usarla directamente la incluimos en la librería como una rutina y en cada uso de la división simplemente realizamos una llamada a la rutina de librería, conseguiremos un recorte en el tamaño del código sin demasiado gasto temporal.

Conocidos los ficheros que forman la descripción de la arquitectura PIC para GCC, ya solo falta rellenarlos. Para la próxima entrega de documentación explicaré la idea que se desarrollará a partir de ahora, salvos futuros (y más que probables) cambios.

Anuncios

Comentarios»

No comments yet — be the first.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: