我从 /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/