12813126eSlogin #include "syscall.h" 2*c3dc6f2fSLoGin #include <arch/arch.h> 32813126eSlogin #include <common/errno.h> 42813126eSlogin #include <common/fcntl.h> 52813126eSlogin #include <common/string.h> 62813126eSlogin #include <mm/slab.h> 72813126eSlogin #include <process/process.h> 82813126eSlogin #include <time/sleep.h> 94fda81ceSLoGin 104fda81ceSLoGin #if ARCH(I386) || ARCH(X86_64) 112813126eSlogin // 导出系统调用入口函数,定义在entry.S中 122813126eSlogin extern void syscall_int(void); 132813126eSlogin 142813126eSlogin /** 152813126eSlogin * @brief 通过中断进入系统调用 162813126eSlogin * 172813126eSlogin * @param syscall_id 182813126eSlogin * @param arg0 192813126eSlogin * @param arg1 202813126eSlogin * @param arg2 212813126eSlogin * @param arg3 222813126eSlogin * @param arg4 232813126eSlogin * @param arg5 242813126eSlogin * @param arg6 252813126eSlogin * @param arg7 262813126eSlogin * @return long 272813126eSlogin */ 282813126eSlogin 29*c3dc6f2fSLoGin long enter_syscall_int(ul syscall_id, ul arg0, ul arg1, ul arg2, ul arg3, 30*c3dc6f2fSLoGin ul arg4, ul arg5) { 312813126eSlogin long err_code; 32f2022a8aSLoGin __asm__ __volatile__("movq %2, %%rdi \n\t" 33f2022a8aSLoGin "movq %3, %%rsi \n\t" 34f2022a8aSLoGin "movq %4, %%rdx \n\t" 35f2022a8aSLoGin "movq %5, %%r10 \n\t" 36f2022a8aSLoGin "movq %6, %%r8 \n\t" 37f2022a8aSLoGin "movq %7, %%r9 \n\t" 382813126eSlogin "int $0x80 \n\t" 392813126eSlogin : "=a"(err_code) 40*c3dc6f2fSLoGin : "a"(syscall_id), "m"(arg0), "m"(arg1), "m"(arg2), 41*c3dc6f2fSLoGin "m"(arg3), "m"(arg4), "m"(arg5) 42f2022a8aSLoGin : "memory", "r8", "r9", "r10", "rdi", "rsi", "rdx"); 432813126eSlogin 442813126eSlogin return err_code; 452813126eSlogin } 462813126eSlogin 474fda81ceSLoGin #else 48*c3dc6f2fSLoGin long enter_syscall_int(ul syscall_id, ul arg0, ul arg1, ul arg2, ul arg3, 49*c3dc6f2fSLoGin ul arg4, ul arg5) { 50*c3dc6f2fSLoGin while (1) { 514fda81ceSLoGin /* code */ 524fda81ceSLoGin } 534fda81ceSLoGin } 544fda81ceSLoGin 554fda81ceSLoGin #endif 56