diff --git a/kernel/boot/k_bootstrap.cc b/kernel/boot/k_bootstrap.cc index 75f35b8..a405229 100644 --- a/kernel/boot/k_bootstrap.cc +++ b/kernel/boot/k_bootstrap.cc @@ -4,6 +4,7 @@ #include "hos_types.h" #include "hos_defines.h" #include "multiboot.h" +#include "sys/cpu.h" #include "k_early_panic.h" #include "mm/mm.h" #include "lang/kio.h" @@ -63,10 +64,8 @@ void k_bootstrap(mb_info_t * mb_info, u32_t mb_magic) kio_bootstrap(); DEBUG_LETTER(5, 'f'); - __asm__ __volatile__ ("mov $0xF0000000, %%esp;" - : /* no outputs */ - : /* no inputs */ - : /* no clobbers */); + /* begin using the permanent stack */ + write_esp(KERNEL_STACK_TOP); k_main(); idle_loop(); diff --git a/kernel/include/hos_defines.h b/kernel/include/hos_defines.h index d1231b8..5cd9ea4 100644 --- a/kernel/include/hos_defines.h +++ b/kernel/include/hos_defines.h @@ -31,7 +31,7 @@ extern u8_t _end; #define KERNEL_VIRTUAL_ADDRESS ((u32_t)KERNEL_CODE) #define KERNEL_SIZE ((u32_t)(KERNEL_END - KERNEL_CODE)) -#define KERNEL_STACK_TOP 0xF0000000 +#define KERNEL_STACK_TOP 0x40000000 #define KERNEL_TIMER_FREQ 1000 diff --git a/kernel/sys/cpu.h b/kernel/sys/cpu.h index d30f3a7..1f9ff4b 100644 --- a/kernel/sys/cpu.h +++ b/kernel/sys/cpu.h @@ -34,4 +34,7 @@ static u32_t read_cr3() #define write_cr3(val) \ __asm__ __volatile__ ("movl %0, %%cr3" : : "r" (val)); +#define write_esp(val) \ + __asm__ __volatile__ ("movl %0, %%esp" : : "r" (val)); + #endif