clang交错源和汇编

Sar*_*ang 12 c++ assembly gcc clang visual-studio

想知道是否有可能从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
Run Code Online (Sandbox Code Playgroud)

我访问过Link:如何在gcc中从C/C++源获得汇编程序输出?但它到目前为止列出了程序集 - 但没有交错.

此外,Visual Studio确实为您提供了非常好的交错式汇编输出,详细信息如下:如何使用Visual C++查看代码背后的程序集?

谢谢你的帮助.

萨朗

dra*_*sht 7

去年有时候似乎有一个错误报道:http://llvm.org/bugs/show_bug.cgi?id = 16647

Bug 16647 - No option to produce mixed source + assembly listing?
Run Code Online (Sandbox Code Playgroud)

所以,因为它仍然是NEW我猜clang还没有这个支持.

作为替代方案,如何编译代码然后使用objdump -S?输出格式有点类似......


hmi*_*ail 5

截至 2016 年 8 月,@dagosht 提到的错误仍然存​​在。但是,链接错误 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,最好的选择似乎是使用gobjdump -S来自 binutils 的 , 。它可以与 MacPorts 或 brew 一起安装。