2

我包含的头文件/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文件。

4

1 回答 1

2

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

ldr r7,=__NR_exit

它似乎编译得很好。我猜想as在需要常量的位置支持基本算术表达式。

于 2013-03-16T23:28:58.510 回答