而我在 2.6.8的内核上的include/linux/linkage.h查到它的定义是:
进一步,CPP_ASMLINKAGE的定义为:
而在include/asm-i386/linkage.h里则有更明确的定义:
#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
__attribute__是GCC的C语言扩展语法。regparm(0)表示不从寄存器中传递参数。
另外,如果是__attribute__((regparm(3))),那么调用函数的时候参数不是通过栈传递,而是直接放到寄存器里,被调用函数直接从寄存器取参数。
此句引自了海中一浪的博客文章
asmlinkage确保它定义的函数从栈中读取参数而不是在寄存器中。