پرش به مطلب اصلی

ABI فراخوان سیستمی

Sinux از ABI لینوکس x86_64 برای فراخوان‌های سیستمی پیروی می‌کند. آرگومان‌ها در رجیسترها پاس داده می‌شوند و شماره‌ی فراخوان سیستمی در RAX قرار می‌گیرد.

رجیسترنقش
RAXشماره‌ی فراخوان سیستمی
RDIآرگومان ۱
RSIآرگومان ۲
RDXآرگومان ۳
R10آرگومان ۴
R8آرگومان ۵
R9آرگومان ۶
RAXمقدار بازگشتی
نکته

از آنجا که قرارداد رجیستر با لینوکس مطابقت دارد، کد فضای کاربر که برای قرارداد فراخوانی لینوکس x86_64 نوشته شده می‌تواند فراخوان سیستمی را به همان شکل صدا بزند — هرچند فقط شماره‌های فراخوان سیستمی پشتیبانی‌شده پیاده‌سازی شده‌اند.

یک برنامه‌ی فضای کاربر پس از بارگذاری رجیسترهای مناسب، با دستور syscall فراخوان سیستمی صادر می‌کند. جدول ارسال هسته (در kernel/syscall/) فراخوانی را به هندلر صحیح هدایت می‌کند.