diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-07 12:37:39 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-07 12:37:39 -0400 |
commit | a4464d3a71d6eefc44dd7bce0737b709498def27 (patch) | |
tree | 7ddabd0e962b4dbd241d5a355cdb5970d05ec48f | |
parent | remove tty_init fn (diff) | |
download | comus-a4464d3a71d6eefc44dd7bce0737b709498def27.tar.gz comus-a4464d3a71d6eefc44dd7bce0737b709498def27.tar.bz2 comus-a4464d3a71d6eefc44dd7bce0737b709498def27.zip |
modify gdt
-rw-r--r-- | kernel/entry.S | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/kernel/entry.S b/kernel/entry.S index f17f817..201af6b 100644 --- a/kernel/entry.S +++ b/kernel/entry.S @@ -47,7 +47,7 @@ kern_stack_start: .skip 8192 kern_stack_end: - .section .rodata + .section .data .align 16 # access bits @@ -58,6 +58,12 @@ kern_stack_end: .set RW, 1 << 1 .set ACCESSED, 1 << 0 + # privlage level (access bit) + .set RING0, 0 << 5 + .set RING1, 1 << 5 + .set RING2, 2 << 5 + .set RING3, 3 << 5 + # flag bits .set GRAN_4K, 1 << 7 .set SZ_32, 1 << 6 @@ -65,30 +71,45 @@ kern_stack_end: # kernel gdt (long mode) GDT: - # Null Segment + # Null Segment (0x00) .equ GDT.Null, . - GDT .quad 0 - # Code segment + # Kernel Code segment (0x08) .equ GDT.Code, . - GDT .long 0xFFFF .byte 0 - .byte PRESENT | NOT_SYS | EXEC | RW + .byte PRESENT | NOT_SYS | EXEC | RW | RING0 .byte GRAN_4K | LONG_MODE | 0xF .byte 0 - # Data segment + # Kernel Data segment (0x10) .equ GDT.Data, . - GDT .long 0xFFFF .byte 0 - .byte PRESENT | NOT_SYS | RW + .byte PRESENT | NOT_SYS | RW | RING0 + .byte GRAN_4K | SZ_32 | 0xF + .byte 0 + + # User Code Segment (0x18) + .equ GDT.UserCode, . - GDT + .long 0xFFFF + .byte 0 + .byte PRESENT | NOT_SYS | EXEC | RW | RING3 + .byte GRAN_4K | LONG_MODE | 0xF + .byte 0 + + # User Data Segment (0x20) + .equ GDT.UserData, . - GDT + .long 0xFFFF + .byte 0 + .byte PRESENT | NOT_SYS | RW | RING3 .byte GRAN_4K | SZ_32 | 0xF .byte 0 - # TSS segment + # TSS segment (0x28) .equ GDT.TSS, . - GDT - .long 0x00000068 - .long 0x00CF8900 + .quad 0 # to be modified in kernel # GDT Pointer .equ GDT.Pointer, . |