【问题标题】:Linux x86 32 bits calling convention inside kernelLinux x86 32 位内核调用约定
【发布时间】:2019-04-14 06:01:06
【问题描述】:

我了解到 Linux 使用堆栈将参数传递给 32 位 x86 计算机上的函数。

但我看得更深,似乎内核使用 eax 作为第一个参数(参见 commit_creds)

所以我不明白。

谢谢

【问题讨论】:

  • 它由 ABI 指定给相关平台。 en.wikipedia.org/wiki/X86_calling_conventions 注意,对于单个模块,可以进行额外的编译和链接时间优化。总的来说,LTO 技术也可以应用于整个构建集。

标签: linux-kernel


【解决方案1】:

我认为:Function parameter passing in a Linux kernel interrupt handler (from asm to C) 可以解释您的担忧。 简而言之,EAX将用于优化。

【讨论】:

  • 您好,欢迎来到 Stack Overflow。请避免在答案中发布单独的链接,因为链接可能会更改。只要您还直接在帖子中发布答案材料,您就可以发布链接。
  • 这是用于系统调用的。我说的是内核内部函数调用
  • 我不想知道 irq 或 syscall 的约定,我想知道内部内核函数调用的约定(当一个内核函数调用另一个内核函数时)
  • 您真的阅读了链接的主题吗?从性能的角度来看,将函数参数放在寄存器中确实很有意义,无论它是内核内部函数还是用户空间应用程序。
猜你喜欢
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2017-05-30
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
相关资源
最近更新 更多