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.
This commit is contained in:
Jean-Baptiste Boric 2021-01-18 20:24:25 +01:00 committed by Andreas Kling
parent cb29dca029
commit 6677ab1ccd

View file

@ -194,10 +194,13 @@ start:
orl $0x80000000, %eax orl $0x80000000, %eax
movl %eax, %cr0 movl %eax, %cr0
/* set up stack */
mov $stack_top, %esp
and $-16, %esp
/* jmp to an address above the 3GB mark */ /* jmp to an address above the 3GB mark */
push %cs movl $1f,%eax
push $1f jmp *%eax
retf
1: 1:
movl %cr3, %eax movl %cr3, %eax
movl %eax, %cr3 movl %eax, %cr3
@ -212,10 +215,7 @@ start:
addl $8, %edi addl $8, %edi
loop 1b loop 1b
/* set up initial stack and jump into C++ land */ /* jump into C++ land */
mov $stack_top, %esp
and $-16, %esp
addl $0xc0000000, %ebx addl $0xc0000000, %ebx
movl %ebx, multiboot_info_ptr movl %ebx, multiboot_info_ptr