From acba87c1e946118f0ba4308a7211199cf9b7cbb2 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Sun, 24 Jun 2018 01:49:05 +1000 Subject: Modified makefiles to use the more appropriate variable $(MAKE) when invoking the tool recursively. Disabled GCC's position-independent-code generation in makefiles. Modified makefile for kernel/usrbin so that it now compiles and links C code into the userspace test. Created errno.h and populated it with standard error definitions. Replaced the va_list based system call handlers with a system call table defined in the header kernel/sys.h. NOTE: This header is included in kmain.c and should ONLY be included there! Do NOT include this header in sys.c. Rather than fetching the user's stack pointer and using it to initialize a va_list, parameters are now passed to the call handlers via the general purpose registers EAX, EBX, ECX and EDX where EAX contains the requested call number and conveys the return value. Setup macros in unistd.h to aid to making system calls from userspace. Implemented two basic system calls; sys_print and sys_dummy. The former takes a single char* argument and displays it on screen whilst the latter is used to populate otherwise empty entries of the system call table. sys_dummy returns the error ENOSYS whenever it is called. --- kernel/traps.s | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'kernel/traps.s') diff --git a/kernel/traps.s b/kernel/traps.s index 7b7446b..ba9814c 100644 --- a/kernel/traps.s +++ b/kernel/traps.s @@ -5,9 +5,9 @@ global syscall_init global traps_init +extern call_table extern idt extern register_isr -extern syscall %macro SAVE 0 pusha @@ -20,6 +20,8 @@ extern syscall mov es, ax mov fs, ax mov gs, ax + ; restore EAX (needed for syscalls) + mov eax, [esp+44] %endmacro %macro SAVE_ERR 0 @@ -206,11 +208,14 @@ exc_reserved: syscall_handler: SAVE - ; pass the saved ESP value to the REAL handler - mov eax, [esp+46] - push eax - call syscall - add esp, 4 + push edx + push ecx + push ebx + and eax, 0xFF + shl eax, 2 + add eax, call_table + call [eax] + add esp, 12 RESTORE -- cgit v1.3