我已经读到,它用于在Linux中实现系统调用的函数.
asmlinkage long sys_getjiffies( void )
{
return (long)get_jiffies_64();
}
它告诉编译器在堆栈上传递所有函数参数.但现在不是这样吗?函数参数通常只通过在堆栈上推送来传递.还是我们指的是通过寄存器传递函数参数?
我已经读到,它用于在Linux中实现系统调用的函数.
asmlinkage long sys_getjiffies( void )
{
return (long)get_jiffies_64();
}
它告诉编译器在堆栈上传递所有函数参数.但现在不是这样吗?函数参数通常只通过在堆栈上推送来传递.还是我们指的是通过寄存器传递函数参数?
有一个FAQ:
asmlink标记是我们应该注意的另一件事 这个简单的函数.这是对一些GCC魔法的#定义,它告诉我们 该函数不应期望找到其任何 寄存器中的参数(一种常见的优化),但仅限于CPU的 堆栈.回想一下我们之前的断言,SYSTEM_CALL使用它的 第一个参数是系统调用号,最多允许另外四个 传递给实际系统调用的参数.系统调用 实现这一壮举只需将它的其他参数(它们是 在寄存器中传递给它).所有系统调用都已标记 使用asmlink标记,所以它们都在堆栈中查找参数. 当然,在
sys_ni_syscall
的情况下,这并没有什么不同, 因为sys_ni_syscall
不需要任何争论,但这是一个问题 用于大多数其他系统调用.而且,因为你会看到asmlinkage
在许多其他功能面前,我想你应该知道它是什么 是关于.它还用于允许从程序集文件调用函数.