From aeb744f3e5debfa052765d612462af776dd620a2 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Thu, 3 Jun 2010 17:08:50 -0500 Subject: Add stub for syscall. --- src/kernel/cpumgr.C | 3 ++- src/kernel/makefile | 1 + src/kernel/start.S | 11 ++++++++++- src/kernel/syscall.C | 7 +++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/kernel/syscall.C diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C index 3c2c3b907..f20139dd1 100644 --- a/src/kernel/cpumgr.C +++ b/src/kernel/cpumgr.C @@ -46,7 +46,8 @@ void CpuManager::startCPU(ssize_t i) // Initialize CPU. cpu->cpu = i; cpu->scheduler = new Scheduler(); - cpu->kernel_stack = PageManager::allocatePage(4); + cpu->kernel_stack = + (void*) (((uint64_t)PageManager::allocatePage(4)) + 16320); // Create idle task. task_t * idle_task = TaskManager::createIdleTask(); diff --git a/src/kernel/makefile b/src/kernel/makefile index 3ff471de2..d3a586e8d 100644 --- a/src/kernel/makefile +++ b/src/kernel/makefile @@ -2,6 +2,7 @@ OBJDIR = ../../obj include ../../config.mk OBJS = start.o kernel.o console.o pagemgr.o heapmgr.o taskmgr.o cpumgr.o +OBJS += syscall.o OBJECTS = $(addprefix ${OBJDIR}/, ${OBJS}) all: ${OBJECTS} diff --git a/src/kernel/start.S b/src/kernel/start.S index 1ca4fdb62..f78b58c63 100644 --- a/src/kernel/start.S +++ b/src/kernel/start.S @@ -117,7 +117,7 @@ intvect_system_call: ;// Retrieve processing address for interrupt. lis r1,intvect_system_call_finish_save@h - li r1,intvect_system_call_finish_save@l + ori r1,intvect_system_call_finish_save@l ;// Save interrupt address in SPRG0 mtsprg0 r1 @@ -125,6 +125,15 @@ intvect_system_call: b kernel_save_task ;// Save current task. intvect_system_call_finish_save: + ;// Get TOC entry for kernel_execute_systemcall + lis r2, kernel_execute_systemcall@h + ori r2, r2, kernel_execute_systemcall@l + ld r0,0(r2) ;// Load call addr. + mtlr r0 + ld r2,8(r2) ;// Load TOC base. + + blr ;// Call kernel_execute_systemcall + nop b kernel_dispatch_task ;// Return to task. .org _start + 0xD00 diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C new file mode 100644 index 000000000..250c18ae2 --- /dev/null +++ b/src/kernel/syscall.C @@ -0,0 +1,7 @@ +#include + +extern "C" +void kernel_execute_systemcall() +{ + //printk("Syscall.\n"); +} -- cgit v1.2.1