【发布时间】:2019-07-07 03:09:40
【问题描述】:
在 macOS 上手动编写汇编代码时,.section .text 会导致“unexpected token in '.section' directive”错误,解决方法是删除.section token。
但是当我通过像clang xxxx.cpp -S 这样的clang 生成汇编代码时,结果是这样的
.section __TEXT,__text,regular,pure_instructions
这两种方式有什么区别?
【问题讨论】:
-
只是为了确认一下,您正在使用相同的
clang组装您的手写程序集,对吗? (如果您省略-c选项,也可以进行链接)。 -
@PeterCordes 我使用 GAS 来组装我的手写程序集。
-
这很奇怪。通常
.text只是.section .text的别名,至少在具有ELF 目标文件的Linux 系统上是这样。也许 MacOS 在其 macho64 目标文件格式中使用了不同的部分名称,并且.text成为具有某些属性的.section __TEXT的别名。无论如何,clang 有自己的内置汇编程序,与 GNU binutilsgas分开。它们使用相同的语法和指令,因此它们应该兼容。 -
@PeterCordes 我认为这是与平台相关的,而不是与汇编程序相关的。我使用 GAS、g++ 和 clang 来组装
.section .text的东西,所有这些都变成了“'.section' 指令中的意外标记”;我使用 g++ 和 clang 从 .cpp 文件生成汇编文件,两个文件都包含.section __TEXT,__text,regular,pure_instructions -
是的,这也是我的假设,这对于 MacOS 来说可能是正常的,而不是对于一种工具或另一种工具。 Disable assembler warning ".section __TEXT,__textcoal_nt,coalesced,pure_instructions" 显示了一些正在生成的示例。
标签: macos assembly clang llvm sections