2012-01-30 21 views
8

¿Hay alguna manera de tener GNU como expandiendo las directivas .macro en un archivo .S, produciendo otro archivo .S sin ellas? Similar a lo que gcc -E hace con código C.GNU como ampliación de la directiva .macro

Tenga en cuenta que se trata de la directiva ensamblador .macro que se muestra en el siguiente código, no sobre macros #define estilo C que se pueden expandir mediante cpp.

.macro my_macro src, so, dest 
    movl \so+10(\src), %r8d 
+3

No exactamente, pero pruebe la opción de listado (p. -limosna). –

+0

Lo encontré también en la página de manual, pero no ayuda el problema. –

+0

A partir de su respuesta (eliminada), parece que está tratando de lograr "compilar los archivos de sintaxis del ensamblador GNU para OSX"; la última vez que necesité hacer esto, utilicé 'objdump' y un editor de texto para construir un archivo lleno de directivas' .byte'. Horrible, pero funcionó. Principalmente. –

Respuesta

0

Tal vez usted podría utilizar 'cpp' para evaluar las macros en su lugar:

> cpp -P file.S

o ensamblar después de macro de expansión:

> cpp -P file.S | as -o file.o

+2

Esto no funciona, porque espera macros de estilo C (#define). Mi problema es evaluar las macros del ensamblador (.macro). –

2

GNU como es preprocesador doesn't handle.include y .macro, como everythin g comenzar con un punto es, de hecho, una directiva de ensamblador; por lo tanto, la macro expansión se realiza a lo largo del ensamblaje del programa, y ​​no se puede hacer por separado, al menos por.

Usted tiene las siguientes opciones:

  • búsqueda en Google de algún otro guión
  • Escriba su propia (parece un ejercicio de programación agradable)
  • Cambiar a macros de tipo C o M4

El procesamiento de macros de estilo C se realiza de forma predeterminada cuando utiliza la extensión .S (mayúscula s) para archivos de ensamblaje que utiliza para alimentar gas, y también se puede invocar el preprocesador C independiente con el comando cpp

+1

Esa es una buena aclaración del problema (+1), pero no puedo aceptar "encontrar/escribir uno propio" como solución. –

Cuestiones relacionadas