Linux内核模块ABI(x86)

我正在寻找在x86上用于内核模块调用的ABI的官方定义.我最近查看了一个已编译的模块,并惊讶地发现:

>它使用寄存器传递前三个参数(eax,edx和
ECX).
>它不像GCC docs中描述的那样快速调用. docs say那个
fastcall使用ecx和edx(微软风格).

我能找到的唯一相关信息是this,但它并没有说太多.

所以:

1)是否有关于内核模块中使用的ABI的官方文档(不是系统调用ABI,而不仅仅是函数列表 – 我找到的那些).

2)编译器如何产生这种奇怪的快速调用?我错过了一个开关吗?

解决方法:

-mregparm = 3对此负责.

上一篇:C ABI如何处理RVO和NRVO?


下一篇:linux – 运行x32 ABI应用程序必须重新编译什么?