From f573f498743a16eeec4708c5aba89e68b0abc0a8 Mon Sep 17 00:00:00 2001 From: Eric-Paul Ickhorn Date: Fri, 19 Jul 2024 00:12:52 +0200 Subject: [PATCH] Fix GDT error offsetting memory by some bytes The error in the GDT caused the whole memory space to be offset by 128B or 256B (It's not entirely sure which one of those). This was only made visible by later changes, but now it's fixed. --- i386/loader/src-asm/memory/gdt.asm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/i386/loader/src-asm/memory/gdt.asm b/i386/loader/src-asm/memory/gdt.asm index a0b5c99..220c686 100755 --- a/i386/loader/src-asm/memory/gdt.asm +++ b/i386/loader/src-asm/memory/gdt.asm @@ -67,7 +67,7 @@ make_regular_data_segment_in_gdt: .write_base_address: mov [eax + 2], bx - shr bx, 16 + shr ebx, 16 mov [eax + 4], bl mov [eax + 7], bh @@ -282,7 +282,7 @@ make_code_segment_in_gdt: .write_base_address: mov [eax + 2], bx - shr bx, 16 + shr ebx, 16 mov [eax + 4], bl mov [eax + 7], bh @@ -389,6 +389,9 @@ load_flat_gdt: or ebx, 1 mov cr0, ebx + xor bx, bx + mov ds, bx + jmp dword 0x08:.epilog bits 32 @@ -407,7 +410,7 @@ bits 32 align 16 .gdtr: .gdtr.length: - dw 23 + dw 15 .gdtr.pointer: dd GDT_MEMORY_AREA