ChinaUnix.net
相关文章推荐:

asmlinkage

asmlinkage 有网友来信问到,kernel 里的 system call 实作函数中(C 函数),为什麼每一个函数原型宣告的前面都有一个 "asmlinkage" 的字串?例如: asmlinkage long sys_nice(int increment) "asmlinkage" 是在 i386 system call 实作中相当重要的一个 gcc 标签(tag)。 当 system call handler 要呼叫相对应的 system call routine 时,便将一般用途暂存器的值 push 到 stack 里,因此 system call routine 就要由 stack...

by zhongztc - Linux文档专区 - 2010-01-08 17:31:13 阅读(628) 回复(0)

相关讨论

有网友来信问到,kernel 里的 system call 实作函数中(C 函数),为什麼每一个函数原型宣告的前面都有一个 "asmlinkage" 的字串?例如: asmlinkage long sys_nice(int increment) "asmlinkage" 是在 i386 system call 实作中相当重要的一个 gcc 标签(tag)。 当 system call handler 要呼叫相对应的 system call routine 时,便将一般用途暂存器的值 push 到 stack 里,因此 system call routine 就要由 stack 来读取 sys...

by kchunhui - Linux文档专区 - 2009-11-08 21:40:36 阅读(529) 回复(0)

在内核中,很多函数定义用到了asmlinkage,今天在看wait queue源码时,又看到了fastcall 修饰的函数定义。一直没有弄得特别明白,查了相关资料,在此和大家分享一下 #define fastcall __attribute__((regparm(3))) #define asmlinkage __attribute__((regparm(0))) 函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。 gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆栈,另一...

by coolper - Linux文档专区 - 2008-12-10 15:42:03 阅读(527) 回复(0)

fastcall是在include/asm-i386/linkage.h中定义的宏,它指导GCC连接时把fastcall修饰的函数的前三个参数用寄存器传递。 宏asmlinkage则告诉GCC不要用寄存器传递参数. asmlinkage和fastcall不能共存。 __user 宏简单告诉编译器(通过 noderef)不应该解除这个指针的引用(因为在当前地址空间中它是没有意义的)。 不明白什么意义? 有些网友说是为用户空间的, 我自己用了, 用的不是用户空间一样没什么问题. 本文来自ChinaUnix博客,...

by guobutter - Linux文档专区 - 2009-09-18 09:35:25 阅读(800) 回复(0)

#define fastcall __attribute__((regparm(3))) #define asmlinkage __attribute__((regparm(0))) 函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。 gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆栈,另一种是通过寄存器。缺省时采用寄存器,假如你要在你的汇编过程中调用c语言函数,并且想通过堆栈传递参数,你定义的c函数时要在函数前加上宏asmlinkage 本文来自ChinaUnix博...

by orine - Linux文档专区 - 2008-06-10 23:59:09 阅读(475) 回复(0)

网上 查到linux 系统调用asmlinkage是强制使用堆栈来传递函数参数,而很多书上却说系统调用的参数是用寄存器来传递的,感觉有点矛盾,请大家帮解答一下吧~~

by hongmy525 - 内核源码 - 2007-07-17 08:51:52 阅读(2248) 回复(1)

今天在一个问题上耗了大半天,原因就是这个asmlinkage。 由于要hook write系统调用,所以当模块执行到这句 orig_sys_call_table[__NR_write] = (u32 *)nwr; 的时候,系统总崩溃。 查看日志可以定位到是这句的错,用gdb一步一步跟,算是过去了,但是只要continue,系统还是down掉。 没办法,看来是找不出这句的错误所在了。索性把这句换成 orig_sys_call_table[__NR_write] = (u32 *)owr; (nwr是新的write系统调用...

by marksman201 - Linux文档专区 - 2009-03-04 20:44:02 阅读(747) 回复(0)

asmlinkage这个宏在网络上可以查到不少东西。 #define asmlinkage CPP_asmlinkage __attribute__((regparm(0))) 这里有一东西我以前没有接触过就是__attribute__这个gcc对c语言的扩展,上面的关键字可以让这个函数只从栈中取参数。 网络上有很多人对为什么要这么用没有理解,我接触过比较多的汇编和c语言函数代码的接口问题,对这个还是比较清楚:当你的函数和调用者都是c语言的话用同样的编译器和编译选项编译两处的代码,那么你...

by sczhang_0000 - Linux文档专区 - 2008-01-18 01:19:53 阅读(460) 回复(0)

有網友來信問到,kernel 裡的 system call 實作函數中(C 函數),為什麼每一個函數原型宣告的前面都有一個 "asmlinkage" 的字串?例如: asmlinkage long sys_nice(int increment) "asmlinkage" 是在 i386 system call 實作中相當重要的一個 gcc 標籤(tag)。 當 system call handler 要呼叫相對應的 system call routine 時,便將一般用途暫存器的值 push 到 stack 裡,因此 system call routine 就要由 stack 來讀取 system c...

by edwinrong - Linux文档专区 - 2008-01-14 16:53:41 阅读(710) 回复(0)

在内核中,很多函数定义用到了asmlinkage,今天在看wait queue源码时,又看到了fastcall 修饰的函数定义。一直没有弄得特别明白,查了相关资料,在此和大家分享一下:mrgreen: #define fastcall __attribute__((regparm(3))) #define asmlinkage __attribute__((regparm(0))) 函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。 gcc编译器在汇编过程中调用c语言函数时传递参数有两种方法:一种是通过堆...

by dreamice - 内核源码 - 2008-12-18 09:43:48 阅读(10178) 回复(28)

这段话是在网上搜到的: The asmlinkage tag is one other thing that we should observe about this simple function. This is a #define for some gcc magic that tells the compiler that the function should not expect to find any of its arguments in registers (a common optimization), but only on the CPU's stack. Recall our earlier assertion that system_call consumes its first argument, the system call num...

by rocky1972 - C/C++ - 2008-04-17 10:32:03 阅读(1399) 回复(0)