1
#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 bpushl 和 bmovl 的含义和含义似乎对 ia32 没有这样的说明

4

1 回答 1

0

%2%k2是寄存器约束,这里有很好的描述:Simple Constraints

bpushl并且是 uClibc 在syscalls.hbmovl中定义的宏,似乎是为了在破坏之前保留 %ebx 中的先前值。

.L__X在同一个文件中定义。

于 2014-02-12T13:44:54.707 回答