X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/1fe5f5eb5378a47bf0f3451762743c162e40faad..c166bd62fbb907f95f79f621e2a2fb4fdde08e01:/lunaix-os/arch/i386/boot/prologue.S?ds=sidebyside diff --git a/lunaix-os/arch/i386/boot/prologue.S b/lunaix-os/arch/i386/boot/prologue.S index ff77ef5..dc17242 100644 --- a/lunaix-os/arch/i386/boot/prologue.S +++ b/lunaix-os/arch/i386/boot/prologue.S @@ -2,6 +2,21 @@ #define __ASM__ #include +#include + +.section .bss.kstack + .global __kinit_stack_end + + .align 16 + __kinit_stack_end: + .skip 2048, 0 + __kinit_stack_top: + # TODO + # This stack was too small that corrupt the ambient kernel structures. + # (took me days to figure this out!) + # We should spent more time to implement a good strategy to detect such + # run-over (we can check these invariants when we trapped in some non-recoverable + # state and provide good feedback to user) .section .text .global hhk_entry_ @@ -9,12 +24,17 @@ /* 欢迎来到虚拟内存的世界! :D */ + movl $__kinit_stack_top, %esp andl $stack_alignment, %esp + + movl $__kinit_stack_end, %eax + movl $STACK_SANITY, (%eax) + movl $STACK_SANITY, 4(%eax) + movl $STACK_SANITY, 8(%eax) + movl $STACK_SANITY, 12(%eax) + subl $16, %esp - /* - 最终还是决定将IDT&GDT的初始化和安装放在这里 - 注意:由于已开启分页,GDTR与IDTR里面放的不是物理地址,是线性地址! - */ + /* 加载 GDT P.s. 虽然GDT在分页后已变得不重要,甚至可以忽略不作。但为了保持完整性,还是选择加载他