Linux内核模块ABI(x86)

Linux内核模块ABI(x86),linux,x86,kernel,abi,Linux,X86,Kernel,Abi,我正在寻找用于x86内核模块调用的ABI的正式定义。我最近查看了一个编译模块,惊讶地发现: 它使用寄存器传递前三个参数(eax、edx和 ecx) 它不是GCC文档中描述的fastcall。那个 fastcall使用ecx和edx(微软风格) 我能找到的唯一有点相关的信息是,但它并没有说太多 因此: 1) 是否有关于内核模块中使用的ABI的官方文档(不是系统调用ABI,也不仅仅是我找到的函数列表) 2) 编译器是如何产生这种奇怪的快速调用的?有一个开关我错过了吗?-mregparm=3对此负

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

  • 它使用寄存器传递前三个参数(
    eax
    edx
    ecx

  • 它不是GCC文档中描述的
    fastcall
    。那个
    fastcall
    使用ecx和edx(微软风格)

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

因此:

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


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

-mregparm=3
对此负责。

这实际上是
\uu fastcall
,但不是MS变体,而是Borland版本:请注意,在32位x86系统上,另一个约定用于具有可变参数列表的函数,这些函数的所有参数都在堆栈上。x86-64是另一个故事。谢谢,这就解释了它!现在我知道了我找到的关键词,这可能是整个事情的起源。不过,如果能在文档中的某个地方也有这个,那就太好了。。。