From 2e12cc0a401e9bd3465dbfe1999e62d57f357775 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Wed, 17 Mar 2021 19:12:31 +0100 Subject: [PATCH] protos: Make sure Linux and chainload protocols use the proper real mode IVT when spun up --- .gitignore | 1 + limine-install/limine-install | Bin 36328 -> 0 bytes stage23/protos/chainload.c | 11 +++++++++-- stage23/protos/linux.c | 11 +++++++++-- 4 files changed, 19 insertions(+), 4 deletions(-) delete mode 100755 limine-install/limine-install diff --git a/.gitignore b/.gitignore index 3f12c304..fabd02f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/limine-install/limine-install /bin /build /toolchain diff --git a/limine-install/limine-install b/limine-install/limine-install deleted file mode 100755 index ba6be7cfb3f86271973e294de8604bd5f72a7999..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36328 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 Tmu-KG{}r(B!G0* #include #include +#include -__attribute__((section(".realmode"), used)) +__attribute__((noinline)) +__attribute__((section(".realmode"))) static void spinup(uint8_t drive) { + struct idtr real_mode_idt = { 0x3ff, 0x0 }; + asm volatile ( + "cli\n\t" "cld\n\t" + "lidt [eax]\n\t" + "jmp 0x08:1f\n\t" "1: .code16\n\t" "mov ax, 0x10\n\t" @@ -46,7 +53,7 @@ static void spinup(uint8_t drive) { ".code32\n\t" : - : "d" (drive) + : "a" (&real_mode_idt), "d" (drive) : "memory" ); } diff --git a/stage23/protos/linux.c b/stage23/protos/linux.c index a54a7672..01dff929 100644 --- a/stage23/protos/linux.c +++ b/stage23/protos/linux.c @@ -13,16 +13,23 @@ #include #include #include +#include #define KERNEL_LOAD_ADDR ((size_t)0x100000) #define KERNEL_HEAP_SIZE ((size_t)0x6000) -__attribute__((section(".realmode"), used)) +__attribute__((noinline)) +__attribute__((section(".realmode"))) static void spinup(uint16_t real_mode_code_seg, uint16_t kernel_entry_seg, uint16_t stack_pointer) { + struct idtr real_mode_idt = { 0x3ff, 0x0 }; + asm volatile ( + "cli\n\t" "cld\n\t" + "lidt [eax]\n\t" + "jmp 0x08:1f\n\t" "1: .code16\n\t" "mov ax, 0x10\n\t" @@ -53,7 +60,7 @@ static void spinup(uint16_t real_mode_code_seg, uint16_t kernel_entry_seg, ".code32\n\t" : - : "b" (real_mode_code_seg), "c" (kernel_entry_seg), + : "a" (&real_mode_idt), "b" (real_mode_code_seg), "c" (kernel_entry_seg), "d" (stack_pointer) : "memory" );