From 4431ab7354fbadd8d1f4325034317afda37a7bfe Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 20 May 2015 13:55:03 +0200 Subject: [PATCH] hw_x86_64: fix kernel stack initialization Fix #1533 --- repos/base-hw/src/core/kernel/kernel.cc | 7 ++++++- repos/base-hw/src/core/spec/x86_64/kernel/thread_base.cc | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/repos/base-hw/src/core/kernel/kernel.cc b/repos/base-hw/src/core/kernel/kernel.cc index 4cfa7602c..c8171ba7b 100644 --- a/repos/base-hw/src/core/kernel/kernel.cc +++ b/repos/base-hw/src/core/kernel/kernel.cc @@ -234,8 +234,13 @@ extern "C" void kernel() Kernel::Cpu_context::Cpu_context(Genode::Translation_table * const table) { - _init(STACK_SIZE, (addr_t)table); sp = (addr_t)kernel_stack; ip = (addr_t)kernel; core_pd()->admit(this); + + /* + * platform specific initialization, has to be done after + * setting the registers by now + */ + _init(STACK_SIZE, (addr_t)table); } diff --git a/repos/base-hw/src/core/spec/x86_64/kernel/thread_base.cc b/repos/base-hw/src/core/spec/x86_64/kernel/thread_base.cc index 585302055..36116ab82 100644 --- a/repos/base-hw/src/core/spec/x86_64/kernel/thread_base.cc +++ b/repos/base-hw/src/core/spec/x86_64/kernel/thread_base.cc @@ -87,7 +87,14 @@ void Thread::_mmu_exception() *************************/ void Kernel::Cpu_context::_init(size_t const stack_size, addr_t const table) -{ } +{ + /* + * the stack pointer already contains the stack base address + * of all CPU's kernel stacks, on this uni-processor platform + * it is sufficient to increase it by the stack's size + */ + sp = sp + stack_size; +} /*************************