c++ - 如何强制将常量 C 表达式求值用作 .S 文件中的常量?

标签 c++ c gcc assembly macros

我从 /usr/include/**/asm 中包含的头文件(粗鲁地?)使用简单的 C 表达式来表达相对于基值的偏移量,即:

#define __NR_exit                       (__NR_SYSCALL_BASE+  1)

当然,当我将其#include 到我的.S 文件中时,预处理器生成的 asm 会显示:

start.S|17| Error: garbage following instruction -- `ldr r7,=$(0+1)'

所以,尽管听起来很疯狂,我想我希望 C 预处理器(或汇编器)对宏进行 constexpr 求值,以便它实际上可以使用,尽管 C 算术 + 运算符和那里的括号 - 执行此操作的正确方法是什么?

请注意,这不是内联汇编,而是一个“外联”.S 文件。

最佳答案

噢嘘,这只是因为有一个错误的美元符号。如果将其更改为:

ldr r7,=__NR_exit

看起来编译得很好。我猜 as 在需要常量的位置支持基本算术表达式。

关于c++ - 如何强制将常量 C 表达式求值用作 .S 文件中的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455830/

相关文章:

c++ - 数据类型的名称从何而来?

c++ - 客户端-服务器回显程序陷入UDP死锁

c++ - 外部关键字 "missing type specifier"

c++ - 在 std::bind 和 std::thread 中 move 语义/行为

c++ - 在 gdb 中检查模板参数包

C++ 添加到包含 Char[] 作为参数的链表

c++ - 如何使用 boost::asio 实现嵌套协议(protocol)?

C 编程 scanf() 无法正常工作

c - 类型转换字符指针

linux - 没有 %gs 寄存器的 x86 子集 : binary patching code that uses %gs instead of trapping to emulation?