diff options
Diffstat (limited to '')
-rw-r--r-- | kernel/arch/x86/kernel/gdt.c (renamed from arch/i386/kernel/gdt.c) | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/arch/i386/kernel/gdt.c b/kernel/arch/x86/kernel/gdt.c index 0d9e1d2..57424aa 100644 --- a/arch/i386/kernel/gdt.c +++ b/kernel/arch/x86/kernel/gdt.c @@ -18,7 +18,7 @@ void gdt_set_gate(int num, uint32_t base, uint32_t limit, uint8_t access, uint8_ } void write_tss(int num, uint32_t ss0, uint32_t esp0) { - uint32_t base = (uint32_t)&tss_entry; + uint64_t base = (uint64_t)&tss_entry; uint32_t limit = base + sizeof(struct tss_entry); gdt_set_gate(num, base, limit, 0x89, 0x00); @@ -35,13 +35,9 @@ void write_tss(int num, uint32_t ss0, uint32_t esp0) { tss_entry.iomap_base = sizeof(tss_entry); } -void set_kernel_esp(uint32_t esp) { - tss_entry.esp0 = esp; -} - void gdt_install(void) { gp.limit = (sizeof(struct gdt_entry) * 6) - 1; - gp.base = (uint32_t)&desc; + gp.base = (uint64_t)&desc; gdt_set_gate(0, 0, 0, 0, 0); gdt_set_gate(1, 0, 0xFFFFF, 0x9A, 0xCF); @@ -49,9 +45,9 @@ void gdt_install(void) { gdt_set_gate(3, 0, 0xFFFFF, 0xFA, 0xCF); gdt_set_gate(4, 0, 0xFFFFF, 0xF2, 0xCF); - uint32_t esp; - __asm__ volatile("movl %%esp, %0" : "=r"(esp)); - write_tss(5, 0x10, esp); + uint64_t rsp; + __asm__ volatile("movq %%rsp, %0" : "=r"(rsp)); + write_tss(5, 0x10, rsp); flush_gdt(); flush_tss(); |