From 8e268df60bde6b5548b849cc9b83a224a74b3e43 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Wed, 17 Sep 2025 19:21:57 -0400 Subject: kern: Add syscall entry and SYS_exit syscall Signed-off-by: Ian Moffett --- src/sys/arch/amd64/cpu/cpu_conf.c | 3 +++ src/sys/arch/amd64/cpu/trap.S | 6 ++++++ src/sys/arch/amd64/cpu/trap.c | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+) (limited to 'src/sys/arch') diff --git a/src/sys/arch/amd64/cpu/cpu_conf.c b/src/sys/arch/amd64/cpu/cpu_conf.c index e462ef3..531f53b 100644 --- a/src/sys/arch/amd64/cpu/cpu_conf.c +++ b/src/sys/arch/amd64/cpu/cpu_conf.c @@ -36,6 +36,8 @@ #include #include +extern void syscall_isr(void); + /* * Initialize interrupt vectors */ @@ -54,6 +56,7 @@ init_vectors(void) idt_set_desc(0xC, IDT_TRAP_GATE, ISR(ss_fault), 0); idt_set_desc(0xD, IDT_TRAP_GATE, ISR(general_prot), 0); idt_set_desc(0xE, IDT_TRAP_GATE, ISR(page_fault), 0); + idt_set_desc(0x80, IDT_USER_GATE, ISR(syscall_isr), 0); } void diff --git a/src/sys/arch/amd64/cpu/trap.S b/src/sys/arch/amd64/cpu/trap.S index ef5c14f..6e4d58c 100644 --- a/src/sys/arch/amd64/cpu/trap.S +++ b/src/sys/arch/amd64/cpu/trap.S @@ -107,3 +107,9 @@ INTR_ENTRY(lapic_tmr_isr) mov %rsp, %rdi call md_sched_switch INTR_EXIT(lapic_tmr_isr) + + .global syscall_isr +INTR_ENTRY(syscall_isr) + mov %rsp, %rdi + call trap_syscall +INTR_EXIT(syscall_isr) diff --git a/src/sys/arch/amd64/cpu/trap.c b/src/sys/arch/amd64/cpu/trap.c index 046263b..6ddc079 100644 --- a/src/sys/arch/amd64/cpu/trap.c +++ b/src/sys/arch/amd64/cpu/trap.c @@ -36,6 +36,7 @@ #include #include #include +#include #include /* @@ -145,6 +146,24 @@ trapframe_dump(struct trapframe *tf) tf->rbp, tf->rsp, tf->rip); } +void +trap_syscall(struct trapframe *tf) +{ + struct syscall_args scargs = { + .arg[0] = tf->rdi, + .arg[1] = tf->rsi, + .arg[2] = tf->rdx, + .arg[3] = tf->r10, + .arg[4] = tf->r9, + .arg[5] = tf->r8, + .tf = tf + }; + + if (tf->rax < MAX_SYSCALLS && tf->rax > 0) { + tf->rax = g_sctab[tf->rax](&scargs); + } +} + void trap_handler(struct trapframe *tf) { -- cgit v1.2.3