From 9873c153ef4a823f38ac55296523db3a71f4900c Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Sun, 15 Dec 2013 21:28:27 +0100 Subject: [PATCH] Finalize the C++ 16->64 bit transition --- bootloader/stage2.asm | 2 +- kernel/src/boot/boot_16.cpp | 6 +----- kernel/src/boot/boot_32.cpp | 5 ++++- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/bootloader/stage2.asm b/bootloader/stage2.asm index 26890941..1cb7cfcb 100644 --- a/bootloader/stage2.asm +++ b/bootloader/stage2.asm @@ -71,7 +71,7 @@ second_step: ;Run the kernel - jmp dword KERNEL_BASE:0x0 + jmp dword 0x500:0x0 .continue: mov cl, [sector] diff --git a/kernel/src/boot/boot_16.cpp b/kernel/src/boot/boot_16.cpp index 68224ad2..6e225eea 100644 --- a/kernel/src/boot/boot_16.cpp +++ b/kernel/src/boot/boot_16.cpp @@ -118,7 +118,7 @@ constexpr uint16_t code_32_selector(){ constexpr uint16_t code_64_selector(){ return SEG_DESCTYPE(1) | SEG_PRES(1) | SEG_SAVL(0) | - SEG_LONG(1) | SEG_SIZE(1) | SEG_GRAN(1) | + SEG_LONG(1) | SEG_SIZE(0) | SEG_GRAN(1) | SEG_PRIV(0) | SEG_CODE_EXRD; } @@ -136,10 +136,6 @@ void setup_gdt(){ gdt_entry(0, 0xFFFFF, code_32_selector()), gdt_entry(0, 0xFFFFF, data_selector()), gdt_entry(0, 0xFFFFF, code_64_selector()) - - //GDT_ENTRY(B_10011010, B_11001111), //32-bit Code Selector (ring 0) - //GDT_ENTRY(, ), //Data Selector (ring 0) - //GDT_ENTRY(, ) //64-bit Code Selector (ring 0) }; static gdt_ptr gdtr; diff --git a/kernel/src/boot/boot_32.cpp b/kernel/src/boot/boot_32.cpp index 88ed7579..94550318 100644 --- a/kernel/src/boot/boot_32.cpp +++ b/kernel/src/boot/boot_32.cpp @@ -96,7 +96,10 @@ void enable_paging(){ } void __attribute__((noreturn)) lm_jump(){ - asm volatile(".byte 0x66, 0xea; .long kernel_main; .word 0x18;"); + + asm volatile("jmp 0x18:fake_label; fake_label:"); + + kernel_main(); __builtin_unreachable(); }