]> git.ameliathe1st.gay Git - voyage-au-centre-des-fichiers.git/commitdiff
Changed the order of the info in the GDT, to make it possible to use syscall/sysret
authorAmelia Coutard <eliottulio.coutard@gmail.com>
Sun, 9 Oct 2022 18:30:21 +0000 (20:30 +0200)
committerAmelia Coutard <eliottulio.coutard@gmail.com>
Mon, 10 Oct 2022 13:02:30 +0000 (15:02 +0200)
src/boot.S
src/interrupts.hpp

index ef9fce4a5f194ac87f40c39432e39f9d13f1db5c..d63fb7d2ffcad08f7fd40068e38f19afa743adf7 100644 (file)
@@ -29,13 +29,6 @@ multiboot_header_end:
 GDT:
 .set GDT.NULL, . - GDT
        .quad 0
-.set GDT.KERNEL_CODE, . - GDT
-       .short 0xFFFF # Limit[0:16]
-       .short 0x0000 # Base[0:16]
-       .byte 0x00 # Base[16:24]
-       .byte 0b10011010 # Access: present | readable | ring0
-       .byte 0b10101111 # Flags: page_gran | long_mode, Limit[16:20]
-       .byte 0x00 # Base[24:32]
 .set GDT.KERNEL_DATA, . - GDT
        .short 0xFFFF # Limit[0:16]
        .short 0x0000 # Base[0:16]
@@ -43,11 +36,11 @@ GDT:
        .byte 0b10010010 # Access: present | writeable | ring0
        .byte 0b11001111 # Flags: page_gran | d_b, Limit[16:20]
        .byte 0x00 # Base[24:32]
-.set GDT.USER_CODE, . - GDT
+.set GDT.KERNEL_CODE, . - GDT
        .short 0xFFFF # Limit[0:16]
        .short 0x0000 # Base[0:16]
        .byte 0x00 # Base[16:24]
-       .byte 0b11111010 # Access: present | readable | ring3
+       .byte 0b10011010 # Access: present | readable | ring0
        .byte 0b10101111 # Flags: page_gran | long_mode, Limit[16:20]
        .byte 0x00 # Base[24:32]
 .set GDT.USER_DATA, . - GDT
@@ -57,6 +50,13 @@ GDT:
        .byte 0b11110010 # Access: present | writeable | ring3
        .byte 0b11001111 # Flags: page_gran | d_b, Limit[16:20]
        .byte 0x00 # Base[24:32]
+.set GDT.USER_CODE, . - GDT
+       .short 0xFFFF # Limit[0:16]
+       .short 0x0000 # Base[0:16]
+       .byte 0x00 # Base[16:24]
+       .byte 0b11111010 # Access: present | readable | ring3
+       .byte 0b10101111 # Flags: page_gran | long_mode, Limit[16:20]
+       .byte 0x00 # Base[24:32]
 .set GDT.TSS, . - GDT
        .short TSS_SIZE & 0xFFFF # Limit[0:16]
        .short 0x0000 # Base[0:16] # TSS & 0xFFFF
@@ -68,6 +68,7 @@ GDT.PTR:
        .short . - GDT - 1
        .quad GDT - KERNEL_VMA
 
+.globl TSS
 TSS:
        .skip 4
        RSP0: .quad 0
index 9cbf48e91c5b08276a34e0eea5a526dc84cda501..af4cb6db3f46943dbb8383fc6d7115d8f8d68edb 100644 (file)
@@ -56,7 +56,7 @@ void enable_interrupts(const isr_info (&ISRs)[interrupt_nb], os::idt<interrupt_n
        for (std::size_t i = 0; i < interrupt_nb; i++) {
                idt[i] = {
                        .offset_low  = uint16_t(ISRs[i].addr & 0xFFFF),
-                       .kernel_cs   = 0x08,
+                       .kernel_cs   = 0x10,
                        .ist_offset  = 0,
                        .gate_type   = std::uint8_t(ISRs[i].type), // Trap gate.
                        .dpl         = ISRs[i].dpl,