【发布时间】:2019-11-07 02:34:23
【问题描述】:
我正在研究 asmlinkage 标记。
来自https://kernelnewbies.org/FAQ/asmlinkage
这是一些 gcc 魔术的#define,它告诉编译器 函数不应该期望在寄存器中找到它的任何参数 (一种常见的优化),但只在 CPU 的堆栈上。
查看定义,x86_64定义为空:
#ifdef __cplusplus
#define CPP_ASMLINKAGE extern "C"
#else
#define CPP_ASMLINKAGE
#endif
#ifndef asmlinkage
#define asmlinkage CPP_ASMLINKAGE
#endif
另外,我读到 ABI 规范说我们应该将系统调用号放在一个寄存器中,并将参数放在其他一些寄存器中。
那我们为什么要在堆栈中寻找函数参数。系统调用号是否也入栈?
【问题讨论】:
-
你在哪里找到这个代码的?它看起来不是 x86_64 特定的。
-
它存在于 include/linux/linkage.h 文件中
标签: c linux linux-kernel system-calls abi