asmlinkage宏
来源:互联网 发布:华通云数据 编辑:程序博客网 时间:2024/06/06 09:16
asmlinkage宏
asmlinkage是个宏,使用它是为了保持参数在stack中。
看一下/usr/include/asm/linkage.h里面的定义:
#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
其中 __attribute__是关键字,是gcc的C语言扩展。
__attribute__机制是GNU C的一大特色,它可以设置函数属性、变量属性和类型属性等。可以通过它们向编译器提供更多数据,帮助编译器执行优化等。
__attribute__((regparm(0))):告诉gcc编译器该函数不需要通过任何寄存器来传递参数,参数只是通过堆栈来传递。
__attribute__((regparm(3))):告诉gcc编译器这个函数可以通过寄存器传递多达3个的参数,这3个寄存器依次为EAX、EDX 和 ECX。更多的参数才通过堆栈传递。这样可以减少一些入栈出栈操作,因此调用比较快。
asmlinkage大都用在系统调用中。有一些情况下是需要明确的告诉编译器,我们是使用stack来传递参数的,比如X86中的系统调用,是先将参数压入stack以后调用sys_*函数的,所以所有的sys_*函数都有asmlinkage来告诉编译器不要使用寄存器来编译,
#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
其中 __attribute__是关键字,是gcc的C语言扩展。
__attribute__机制是GNU C的一大特色,它可以设置函数属性、变量属性和类型属性等。可以通过它们向编译器提供更多数据,帮助编译器执行优化等。
__attribute__((regparm(0))):告诉gcc编译器该函数不需要通过任何寄存器来传递参数,参数只是通过堆栈来传递。
__attribute__((regparm(3))):告诉gcc编译器这个函数可以通过寄存器传递多达3个的参数,这3个寄存器依次为EAX、EDX 和 ECX。更多的参数才通过堆栈传递。这样可以减少一些入栈出栈操作,因此调用比较快。
asmlinkage大都用在系统调用中。有一些情况下是需要明确的告诉编译器,我们是使用stack来传递参数的,比如X86中的系统调用,是先将参数压入stack以后调用sys_*函数的,所以所有的sys_*函数都有asmlinkage来告诉编译器不要使用寄存器来编译,
- asmlinkage宏
- asmlinkage宏
- asmlinkage宏
- asmlinkage宏
- linux内核 asmlinkage宏
- linux内核 asmlinkage宏
- linux内核 asmlinkage宏
- linux内核 asmlinkage宏
- linux内核 asmlinkage宏
- linux内核 asmlinkage宏
- linux内核 asmlinkage宏
- asmlinkage
- asmlinkage
- asmlinkage
- asmlinkage
- asmlinkage
- asmlinkage
- asmlinkage
- 基于CyberGarage库的dlna开发(android)
- Web前端开发流程自动化
- Xwindow的工作原理
- C语言版的线性回归分析函数
- WPF 中使用XML作为Binding数据源
- asmlinkage宏
- Json对象的对写(Jackson使用)。
- install ffserver for streaming with libx264 and mp3lame on ubuntu
- C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用
- 关于apache的优化配置
- 什么是编译和链接??经典解释
- OpenGL基础
- 必须掌握的命令行
- Javascript高级程序设计第二版第八章--BOM--笔记