想知道是否可以从clang生成交错的源和汇编? 我正在寻找与gcc命令等效的东西(如http://www.fclose.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/所示)
gcc -Wa,-adhln -g source_code.c > assembly_list.s
我访问过Link:How do you get assembler output from C/C++ source in gcc?但它已经列出了程序集 - 但没有交错。
Visual Studio确实为您提供了非常好的交错式汇编输出,详情请参阅:How to view the assembly behind the code using Visual C++?
感谢您的帮助。
萨朗
答案 0 :(得分:7)
去年有时会出现一个错误报告:http://llvm.org/bugs/show_bug.cgi?id=16647
Bug 16647 - No option to produce mixed source + assembly listing?
因为它仍然是NEW
我猜clang还没有支持这个。
作为替代方案,如何编译代码然后使用objdump -S
?输出格式有点类似......
答案 1 :(得分:3)
截至2016年8月,@ dragosht提到的错误仍然是开放的。但是,the linked bug 17465提供了一种解决方法:clang -no-integrated-as -Xassembler -adhln
。它禁用了clang集成的汇编程序并调用外部汇编程序,希望它支持列表生成选项。
在Linux中运行正常,但在Mac OS X中不起作用(截至10.11.6)。问题是即使OS X中的外部汇编程序也不支持列表生成选项 - 您可以使用man as
进行检查。
objdump -S
是一种在Linux中运行良好的替代方案,但Mac OS X替代objdump的是otool,它确实提供了反汇编而不是源隔行扫描。希望这很快就会改变,因为otool似乎正在逐渐退出,而llvm会发展自己的objdump。请参阅man llvm-otool
。
最后,对于OS X,最好的选择似乎是使用来自binutils的gobjdump -S
。它可以与MacPorts或brew一起安装。