diff --git a/stage23/entry.s3.c b/stage23/entry.s3.c index f44e3bff..51c0aa77 100644 --- a/stage23/entry.s3.c +++ b/stage23/entry.s3.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,8 @@ void uefi_entry(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { init_memmap(); + init_gdt(); + disk_create_index(); boot_volume = NULL; diff --git a/stage23/sys/gdt.h b/stage23/sys/gdt.h index 06b1f9e7..1c93687e 100644 --- a/stage23/sys/gdt.h +++ b/stage23/sys/gdt.h @@ -24,4 +24,6 @@ struct gdt_desc { extern struct gdtr gdt; +void init_gdt(void); + #endif diff --git a/stage23/sys/gdt.s2.c b/stage23/sys/gdt.s2.c index e28aeece..64d8bf3e 100644 --- a/stage23/sys/gdt.s2.c +++ b/stage23/sys/gdt.s2.c @@ -1,5 +1,7 @@ #include #include +#include +#include static struct gdt_desc gdt_descs[] = { {0}, @@ -69,3 +71,11 @@ struct gdtr gdt = { 0 #endif }; + +#if uefi == 1 +void init_gdt(void) { + struct gdt_desc *gdt_copy = ext_mem_alloc(sizeof(gdt_descs)); + memcpy(gdt_copy, gdt_descs, sizeof(gdt_descs)); + gdt.ptr = (uintptr_t)gdt_copy; +} +#endif