2014-07-07 8 views
9

Chiedersi se è possibile generare sorgente interleaved e assemblaggio da clang? Sto cercando qualcosa di equivalente al comando gcc (come dimostrato in http://www.fclose.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/)clang interleaved sorgente e assemblaggio

gcc -Wa,-adhln -g source_code.c > assembly_list.s 

Ho visitato Link: How do you get assembler output from C/C++ source in gcc? ma ottiene quanto alla lista l'assemblea - ma nessun interleaving.

anche Visual Studio ti dà abbastanza piacevole uscita assemblaggio interlacciata, dettagli qui: How to view the assembly behind the code using Visual C++?

Grazie per tutto l'aiuto.

Sarang

risposta

7

sembra che ci sia un bug segnalato a volte l'anno scorso affermando esattamente questo: http://llvm.org/bugs/show_bug.cgi?id=16647

Bug 16647 - No option to produce mixed source + assembly listing? 

Quindi, dal momento che è ancora NEW immagino clang non ha ancora questo supportato.

In alternativa, che ne dici di compilare il codice e quindi utilizzare objdump -S? Il formato di output è in qualche modo simile ...

3

A partire da agosto 2016, il bug segnalato da @dragosht è ancora aperto. Tuttavia, vi è una soluzione alternativa offerta da the linked bug 17465: clang -no-integrated-as -Xassembler -adhln. Disabilita l'assemblatore integrato in clang e chiama un assemblatore esterno, che si spera supporta le opzioni di generazione di annunci.

Questo funziona correttamente in Linux, ma non funziona in Mac OS X (a partire da 10.11.6). Il problema è che anche l'assemblatore esterno in OS X non supporta le opzioni di generazione di elenchi - è possibile verificarlo con man as.

objdump -S è un'alternativa che funziona bene anche su Linux, ma l'alternativa di Mac OS X a objdump è otool, che fornisce il disassemblaggio ma non l'interlacciamento della sorgente. Spero che questo cambierà presto, perché l'otool sembra essere in via di esaurimento mentre llvm fa crescere il suo objdump. Vedi man llvm-otool.

Infine, per OS X l'opzione migliore sembra utilizzare gobjdump -S, da binutils. Può essere installato con MacPorts o brew.