2012-06-12 17 views
46

Como muestra this question, con g ++, puedo hacer g++ -S -masm=intel test.cpp. Además, con clang, puedo hacer clang++ -S test.cpp, pero -masm=intel no es compatible con clang (warning argument unused during compilation: -masm=intel). ¿Cómo obtengo la sintaxis de Intel con clang?¿Cómo generar el código de ensamblado con clang en la sintaxis de Intel?

+0

@JerryCoffin: Gracias, generé un archivo '.bc' con clang y luego obtuve con éxito el ensamblado de Intel con' llc'. ¿Te importa hacer una respuesta? –

+0

Oh, supongo que no es un problema. –

Respuesta

85

Esto debe conseguir sonido metálico para emitir el código de montaje con la sintaxis de Intel:

clang++ -S -mllvm --x86-asm-syntax=intel test.cpp 

Puede utilizar -mllvm <arg> acontecerá en llvm opciones de la línea de comandos sonido metálico. Lamentablemente, esta opción no parece estar bien documentada y, por lo tanto, solo la encontré navegando por las listas de correo de llvm.


Como noted below by @thakis, esto ya no es necesario en las versiones más recientes de Sonido metálico (3.5 +), ya que ahora son compatibles con la sintaxis -masm=intel.

+0

¡Excelente información, gracias! –

+0

+1: Genial, exactamente lo que estaba buscando. – Leo

+2

http://llvm.org/bugs/show_bug.cgi?id=17465 solicitudes de soporte para -masm = intel y más. – Trass3r

16

Suponiendo que pueda hacer que Clang emita códigos de bytes LLVM normales, puede usar llc para compilar en lenguaje ensamblador y utilizar su opción --x86-asm-syntax=intel para obtener el resultado en la sintaxis Intel.

+0

Gracias de nuevo. También descubrí que 'llc' por defecto activa las optimizaciones (-02), mientras que gcc y clang no usan optimizaciones (-O0) de manera predeterminada (me llevó mucho tiempo descubrir por qué la salida del ensamblaje era diferente). –

24

En cuanto a clang r208683 (clang 3.5+), entiende -masm=intel. Entonces, si tu clang es lo suficientemente nuevo, puedes usarlo.

Cuestiones relacionadas