2014-07-07 6 views
9

Fragen Sie sich, ob es möglich ist, interleaved Quelle und Assembly von Clang zu generieren? Ich bin auf der Suche nach etwas, das entspricht gcc-Befehl (wie bei http://www.fclose.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/ gezeigt)Clang Interleaved Quelle und Assembly

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

Ich habe Einen Link besucht: How do you get assembler output from C/C++ source in gcc? aber es wird so weit wie die Anordnung zur Liste - aber keine Verschachtelung.

Auch Visual Studio gibt Ihnen recht schön verschachtelt Montage Ausgabe, Details hier: How to view the assembly behind the code using Visual C++?

Danke für all die Hilfe.

Sarang

Antwort

7

Es scheint ein Fehler gemeldet manchmal im vergangenen Jahr die besagt genau dies zu: http://llvm.org/bugs/show_bug.cgi?id=16647

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

So, da es noch NEW ist Ich denke, Klirren dies noch nicht unterstützt hat.

Als Alternative, wie wäre es mit der Kompilierung Ihres Codes und dann objdump -S? Das Ausgabeformat ist etwas ähnlich ...

3

Ab August 2016 ist der Bug, den @dragosht erwähnt, immer noch offen. Es gibt jedoch eine Problemumgehung, die von the linked bug 17465: clang -no-integrated-as -Xassembler -adhln angeboten wird. Es deaktiviert den clang-integrierten Assembler und ruft einen externen Assembler auf, der hoffentlich die listing-generierenden Optionen unterstützt.

Das funktioniert unter Linux einwandfrei, funktioniert aber unter Mac OS X nicht (ab 10.11.6). Das Problem ist, dass selbst der externe Assembler in OS X die listinggenerierenden Optionen nicht unterstützt - Sie können das mit man as überprüfen.

objdump -S ist eine Alternative, die auch unter Linux gut funktioniert, aber Mac OS Xs Alternative zu objdump ist otool, das Disassemblierung bietet, aber kein Quell-Interlacing. Hoffentlich wird sich das bald ändern, denn Otool scheint auf dem Weg nach draußen zu sein, während Llvm seinen eigenen Objdump anbaut. Siehe man llvm-otool.

Schließlich scheint für OS X die beste Option gobjdump -S von binutils zu verwenden. Es kann mit MacPorts oder Gebräu installiert werden.