From cf3f61e37371745c0eaf4af2c5ba3f59b03cbcb1 Mon Sep 17 00:00:00 2001 From: apio Date: Wed, 12 Oct 2022 13:12:46 +0200 Subject: [PATCH] Kernel: More GDT refactoring --- kernel/src/gdt/GDT.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel/src/gdt/GDT.cpp b/kernel/src/gdt/GDT.cpp index f634d226..5c94154e 100644 --- a/kernel/src/gdt/GDT.cpp +++ b/kernel/src/gdt/GDT.cpp @@ -78,14 +78,19 @@ static void set_limit(GDTEntry* entry, uint32_t limit) entry->limit1_flags = (entry->limit1_flags & 0xF0) | ((limit >> 16) & 0xF); } +static void set_tss_base(GDTEntry* tss1, HighGDTEntry* tss2, uint64_t addr) +{ + set_base(tss1, addr & 0xffffffff); + tss2->base_high = (uint32_t)(addr >> 32); +} + static void setup_tss() { memset(&main_tss, 0, sizeof(TSS)); main_tss.rsp[0] = (uint64_t)MemoryManager::get_pages(4) + (PAGE_SIZE * 4) - 8; // allocate 16KB for the syscall stack main_tss.iomap_base = sizeof(TSS); - set_base(&internal_gdt.tss, (uint64_t)&main_tss & 0xffffffff); - internal_gdt.tss2.base_high = (uint32_t)(((uint64_t)&main_tss >> 32) & 0xffffffff); + set_tss_base(&internal_gdt.tss, &internal_gdt.tss2, (uint64_t)&main_tss); set_limit(&internal_gdt.tss, sizeof(TSS) - 1); }