来自 Robert Love 的书,(在系统调用实现中)
不知何故,用户空间必须在陷阱期间将参数传递给内核。最简单的方法是通过传递系统调用号的相同方式:参数存储在寄存器中。在 x86-32 上,寄存器 ebx、ecx、edx、esi 和 edi 按顺序包含前五个参数。在不太可能出现六个或更多参数的情况下,使用单个寄存器来保存指向 user-存储所有参数的空间。
但是asymlinkage
为每个系统调用加上前缀,这些系统调用期望参数位于系统堆栈中。还有当模式切换发生时,如何将参数复制到内核堆栈中?