diff --git a/kernel/include/hos_defines.h b/kernel/include/hos_defines.h index 5cd9ea4..073e029 100644 --- a/kernel/include/hos_defines.h +++ b/kernel/include/hos_defines.h @@ -4,10 +4,6 @@ #include "hos_types.h" -#ifdef __cplusplus -extern "C" { -#endif - #define KERNEL_OFFSET 0x00000000 #define PAGE_LOG_SIZE 12 @@ -17,24 +13,31 @@ extern "C" { #define CONSOLE_MEMORY 0xB8000 -extern u8_t _code; -extern u8_t _data; -extern u8_t _bss; -extern u8_t _end; - -#define KERNEL_CODE (&_code) -#define KERNEL_DATA (&_data) -#define KERNEL_BSS (&_bss) -#define KERNEL_END (&_end) +#define KERNEL_CODE (&_code) +#define KERNEL_DATA (&_data) +#define KERNEL_BSS (&_bss) +#define KERNEL_END (&_end) #define KERNEL_PHYSICAL_ADDRESS ((u32_t)(KERNEL_CODE - KERNEL_OFFSET)) #define KERNEL_VIRTUAL_ADDRESS ((u32_t)KERNEL_CODE) #define KERNEL_SIZE ((u32_t)(KERNEL_END - KERNEL_CODE)) -#define KERNEL_STACK_TOP 0x40000000 +#define KERNEL_STACK_TOP 0x20000000 #define KERNEL_TIMER_FREQ 1000 +#define BUILD_BUG_ON(condition) \ + ((void) sizeof(struct { int : -!!(condition); })) + +#ifdef __cplusplus +extern "C" { +#endif + +extern u8_t _code; +extern u8_t _data; +extern u8_t _bss; +extern u8_t _end; + #ifdef __cplusplus } #endif diff --git a/kernel/mm/stack.cc b/kernel/mm/stack.cc index 30ebdf4..af413bb 100644 --- a/kernel/mm/stack.cc +++ b/kernel/mm/stack.cc @@ -9,6 +9,11 @@ void stack_bootstrap() * running from our temporary stack while segmentation is enabled, * set up the "permanent" stack for use while paging */ - u32_t first_stack_page_base = mm_early_page_alloc(); - mm_early_map(KERNEL_STACK_TOP - PAGE_SIZE, first_stack_page_base, 0, 1); + u32_t stack_page_virt = KERNEL_STACK_TOP - PAGE_SIZE; + for (int i = 0; i < STACK_INITIAL_SIZE; i++) + { + u32_t stack_page_phys = mm_early_page_alloc(); + mm_early_map(stack_page_virt, stack_page_phys, 0, 1); + stack_page_virt -= PAGE_SIZE; + } } diff --git a/kernel/mm/stack.h b/kernel/mm/stack.h index d649e80..d704079 100644 --- a/kernel/mm/stack.h +++ b/kernel/mm/stack.h @@ -2,6 +2,8 @@ #ifndef STACK_H #define STACK_H +#define STACK_INITIAL_SIZE 2 /* number of initial stack pages */ + void stack_bootstrap(); #endif