asmlinkage

系统调用函数前面常有asmlinkage修饰,该关键字的定义在/usr/include/asm/linkage.h

COPY

#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))

__attribute__ 设置函数、变量等的属性,向编译器传参。

__attribute__((regparm(0)))告诉gcc编译器该函数不需要通过任何寄存器来传递参数,参数只是通过堆栈来传递。

__attribute__((regparm(3)))告诉gcc编译器这个函数可以通过寄存器传递多达3个的参数,这3个寄存器依次为EAX、EDX 和 ECX。更多的参数才通过堆栈传递。这样可以减少一些入栈出栈操作,因此调用比较快.

asmlinkage大都用在系统调用中。有一些情况下是需要明确的告诉编译器,我们是使用stack来传递参数的,比如X86中的系统调用,是先将参数压入stack以后调用sys_*函数的,所以所有的sys_*函数都有asmlinkage来告诉编译器不要使用寄存器来编译。

引用:blog.csdn.net/DLUTBruceZhang/article/detail..