summaryrefslogtreecommitdiff
path: root/arch/i386/kernel/gdt.c
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2025-01-12 01:17:36 -0600
committerDanny Holman <dholman@gymli.org>2025-01-12 01:19:11 -0600
commit95cd78840f0891e60f5ebecc8a8eb4fbaf3c2ebf (patch)
treec8c35347b50477929727fa5be9f5d0f55cbe18fd /arch/i386/kernel/gdt.c
parentarch: i386: kmalloc: fix last element being ignored (diff)
downloadbox-95cd78840f0891e60f5ebecc8a8eb4fbaf3c2ebf.tar.gz
box-95cd78840f0891e60f5ebecc8a8eb4fbaf3c2ebf.tar.zst
box-95cd78840f0891e60f5ebecc8a8eb4fbaf3c2ebf.zip
PROJECT RESTRUCTURING
Move the entire kernel into its own directory. Create new directories for system commands, libraries and other required essentials for a complete Unix-like operating system. Signed-off-by: Danny Holman <dholman@gymli.org>
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();