ABI فراخوان سیستمی
Sinux از ABI لینوکس x86_64 برای فراخوانهای سیستمی پیروی میکند. آرگومانها در رجیسترها پاس داده میشوند و شمارهی فراخوان سیستمی در RAX قرار میگیرد.
| رجیستر | نقش |
|---|---|
RAX | شمارهی فراخوان سیستمی |
RDI | آرگومان ۱ |
RSI | آرگومان ۲ |
RDX | آرگومان ۳ |
R10 | آرگومان ۴ |
R8 | آرگومان ۵ |
R9 | آرگومان ۶ |
RAX | مقدار بازگشتی |
نکته
از آنجا که قرارداد رجیستر با لینوکس مطابقت دارد، کد فضای کاربر که برای قرارداد فراخوانی لینوکس x86_64 نوشته شده میتواند فراخوان سیستمی را به همان شکل صدا بزند — هرچند فقط شمارههای فراخوان سیستمی پشتیبانیشده پیادهسازی شدهاند.
یک برنامهی فضای کاربر پس از بارگذاری رجیسترهای مناسب، با دستور syscall فراخوان سیستمی صادر میکند. جدول ارسال هسته (در kernel/syscall/) فراخوانی را به هندلر صحیح هدایت میکند.