From 6677ab1ccd2c9f677782ff131889dab890fe53b0 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Boric Date: Mon, 18 Jan 2021 20:24:25 +0100 Subject: Boot: Fix undefined Multiboot behaviors Both ESP and GDTR are left undefined by the Multiboot specification and OS images must not rely on these values to be valid. Fix the undefined behaviors so that booting with PXELINUX does not triple-fault the CPU. --- Kernel/Arch/i386/Boot/boot.S | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'Kernel/Arch/i386/Boot') diff --git a/Kernel/Arch/i386/Boot/boot.S b/Kernel/Arch/i386/Boot/boot.S index 4fce416868..d0ced81de4 100644 --- a/Kernel/Arch/i386/Boot/boot.S +++ b/Kernel/Arch/i386/Boot/boot.S @@ -194,10 +194,13 @@ start: orl $0x80000000, %eax movl %eax, %cr0 + /* set up stack */ + mov $stack_top, %esp + and $-16, %esp + /* jmp to an address above the 3GB mark */ - push %cs - push $1f - retf + movl $1f,%eax + jmp *%eax 1: movl %cr3, %eax movl %eax, %cr3 @@ -212,10 +215,7 @@ start: addl $8, %edi loop 1b - /* set up initial stack and jump into C++ land */ - mov $stack_top, %esp - and $-16, %esp - + /* jump into C++ land */ addl $0xc0000000, %ebx movl %ebx, multiboot_info_ptr -- cgit v1.2.3