From 950de8645c57f50a35f0fd6abdf44ff8a70b0093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Mon, 18 Dec 2017 23:23:08 +0100 Subject: [PATCH] Update GDT pointer after unmapping GDT --- src/kernel/boot/boot.S | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/kernel/boot/boot.S b/src/kernel/boot/boot.S index 48e84aa..95d1f7a 100644 --- a/src/kernel/boot/boot.S +++ b/src/kernel/boot/boot.S @@ -58,7 +58,7 @@ jmp 0x8:V2P(long_mode_start) movabs rax, offset upper_memory jmp rax - upper_memory: +upper_memory: //; Move stack pointer to kernel space mov rax, KERNEL_OFFSET @@ -68,9 +68,27 @@ jmp 0x8:V2P(long_mode_start) mov rax, 0 movabs [BootP4], rax + //; Update page tables mov rax, cr3 mov cr3, rax + //; Reload GDT + movabs rax, offset BootGDTp + lgdt [rax] + mov rax, 0x0 + mov ss, rax + mov ds, rax + mov es, rax + mov fs, rax + mov gs, rax + + //; Reload CS + movabs rax, offset .reload_cs + pushq 0x8 + push rax + retfq +.reload_cs: + //; Jump to kmain() .extern kmain movabs rax, offset kmain