From 84332707f1df86c25c1f94883044c5e8fe2e20a3 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Tue, 22 Mar 2022 13:43:54 -0500 Subject: arch: i386: refactor the system call API The x86 system call/interrupt handlers should be refactored to be more readable. Signed-off-by: Danny Holman --- arch/i386/boot/isr.s | 5 ++--- arch/i386/include/kernel/isr.h | 2 -- arch/i386/include/kernel/syscall.h | 1 + arch/i386/kernel/syscall.c | 4 ---- arch/i386/kernel/tty.c | 3 +-- 5 files changed, 4 insertions(+), 11 deletions(-) diff --git a/arch/i386/boot/isr.s b/arch/i386/boot/isr.s index 76afa9f..893dd1f 100644 --- a/arch/i386/boot/isr.s +++ b/arch/i386/boot/isr.s @@ -51,8 +51,7 @@ isr_frame_asm: movl %cr4, %eax pushl %eax - lea -8(%esp), %edi - pushl %edi + pushl %esp call interrupt_handler popl %eax @@ -71,7 +70,7 @@ isr_frame_asm: popl %ebx popl %eax - addl $4, %esp + addl $20, %esp iret isr_no_err_stub 0 diff --git a/arch/i386/include/kernel/isr.h b/arch/i386/include/kernel/isr.h index f177ee2..4e21f8f 100644 --- a/arch/i386/include/kernel/isr.h +++ b/arch/i386/include/kernel/isr.h @@ -11,8 +11,6 @@ struct isr_frame { uint32_t edi; uint32_t esi; - uint32_t ebp; - uint32_t esp; uint32_t edx; uint32_t ecx; uint32_t ebx; diff --git a/arch/i386/include/kernel/syscall.h b/arch/i386/include/kernel/syscall.h index cded732..4f74c1f 100644 --- a/arch/i386/include/kernel/syscall.h +++ b/arch/i386/include/kernel/syscall.h @@ -3,6 +3,7 @@ #include +void halt_catch_fire(struct isr_frame *frame); void syscall_dispatch(struct isr_frame *frame); void register_syscall(void *handler(struct isr_frame*), int num); void sys_stop(struct isr_frame *frame); diff --git a/arch/i386/kernel/syscall.c b/arch/i386/kernel/syscall.c index 570f0de..18f36ad 100644 --- a/arch/i386/kernel/syscall.c +++ b/arch/i386/kernel/syscall.c @@ -9,7 +9,6 @@ void syscall_dispatch(struct isr_frame *frame) { syscall_handlers[frame->eax](frame); else kprintf("Error: Invalid system call number: %d\n", frame->eax); - __asm__ volatile("cli;hlt"); } void register_syscall(void *handler(struct isr_frame*), int num) { @@ -34,9 +33,6 @@ void dump_reg(struct isr_frame *frame) { kprintf("\tEDX = %x\n", frame->edx); kprintf("\tESI = %x\n", frame->esi); kprintf("\tEDI = %x\n", frame->edi); - kprintf("\tESP = %x\n", frame->esp); - kprintf("\tEBP = %x\n", frame->ebp); kprintf("\tEIP = %x\n", frame->eip); - kprintf("\tEFLAGS = %x\n", frame->eflags); kprintf("Current code selector: %d\n", frame->cs); } diff --git a/arch/i386/kernel/tty.c b/arch/i386/kernel/tty.c index f929408..1e2e6b5 100644 --- a/arch/i386/kernel/tty.c +++ b/arch/i386/kernel/tty.c @@ -6,8 +6,7 @@ static const size_t VGA_WIDTH = 80; static const size_t VGA_HEIGHT = 25; -//static uint16_t *const VGA_MEMORY = (uint16_t*)0xC03FF000; -static uint16_t *const VGA_MEMORY = (uint16_t*)0xB8000; +static uint16_t *const VGA_MEMORY = (uint16_t*)0xC03FF000; static size_t terminal_row; static size_t terminal_column; -- cgit v1.2.3