#define INLINE_SYSCALL(name, nr, args...) \
({ \
unsigned int resultvar; \
asm volatile ( \
LOADARGS_##nr \
"movl %1, %%eax\n\t" \
"int $0x80\n\t" \
RESTOREARGS_##nr \
: "=a" (resultvar) \
: "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc"); \
if (resultvar >= 0xfffff001) \
{ \
__set_errno (-resultvar); \
resultvar = 0xffffffff; \
} \
(int) resultvar; })
#define LOADARGS_0
#define LOADARGS_1 \
"bpushl .L__X'%k2, %k2\n\t" \
"bmovl .L__X'%k2, %k2\n\t"
#define LOADARGS_2 LOADARGS_1
#define LOADARGS_3 LOADARGS_1
#define LOADARGS_4 LOADARGS_1
#define LOADARGS_5 LOADARGS_1
谁知道以下asm代码的含义
#define LOADARGS_1 \
"bpushl .L__X'%k2, %k2\n\t" \
"bmovl .L__X'%k2, %k2\n\t"
有人可以向我解释这个 %2表示asm输入和输出中的第三个参数,因此%k2表示.L__X的含义和含义 对于ia32来说,bpushl和bmovl似乎没有这样的指令
答案 0 :(得分:0)
%2
和%k2
是注册约束,这里有很好的描述:Simple Constraints
bpushl
和bmovl
是由syscalls.h中的uClibc定义的宏,似乎是为了在破坏它之前保留%ebx中的先前值。
.L__X
在同一个文件中定义。