对于i386,uClibc syscalls.h中.L__X'%ebx = 1的含义是什么

时间:2014-02-13 15:09:15

标签: assembly kernel system-calls i386 uclibc

__asm__ (".L__X'%ebx = 1\n\t"
 ".L__X'%ecx = 2\n\t"
 ".L__X'%edx = 2\n\t"
 ".L__X'%eax = 3\n\t"
 ".L__X'%esi = 3\n\t"
 ".L__X'%edi = 3\n\t"
 ".L__X'%ebp = 3\n\t"
 ".L__X'%esp = 3\n\t"
 ".ifndef _BITS_SYSCALLS_ASM\n\t"
 ".set _BITS_SYSCALLS_ASM,1\n\t"
 ".macro bpushl name reg\n\t"
 ".if 1 - \\name\n\t"
 ".if 2 - \\name\n\t"
 "pushl %ebx\n\t"
 ".else\n\t"
 "xchgl \\reg, %ebx\n\t"
 ".endif\n\t"
 ".endif\n\t"
 ".endm\n\t"
 ".macro bpopl name reg\n\t"
 ".if 1 - \\name\n\t"
 ".if 2 - \\name\n\t"
 "popl %ebx\n\t"
 ".else\n\t"
 "xchgl \\reg, %ebx\n\t"
 ".endif\n\t"
 ".endif\n\t"
 ".endm\n\t"
 ".macro bmovl name reg\n\t"
 ".if 1 - \\name\n\t"
 ".if 2 - \\name\n\t"
 "movl \\reg, %ebx\n\t"
 ".endif\n\t"
 ".endif\n\t"
 ".endm\n\t"
 ".endif\n\t");

#define LOADARGS_1 \
    "bpushl .L__X'%k2, %k2\n\t"                           \
    "bmovl .L__X'%k2, %k2\n\t"


#define INTERNAL_SYSCALL(name, err, nr, args...) \
  ({                                                                          \
    register 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");                  \
     (int) resultvar; })

谁知道.L_ X'%ebx = 1的含义, 我没有在AS doc中找到这句话的任何语法,这句话用于赋值? .L _X'%ebx不是有效的符号名称,我猜这是否意味着一个特殊的变量导致扩展“bpushl .L_ X'%k2,%k2 \ n \ t”,我们需要扩展.L _X'%k2,那么扩展的结果是什么,有些身体可以帮助我,它让我疯狂,我无法在doc中找到任何线索。如果有人知道我在哪里可以找到相关信息,请给我一个URL或doc名称,thx!

0 个答案:

没有答案