mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 05:57:44 +00:00
Kernel: Reorder the 64-bit GDT a bit
Add a kernel data segment and make the user code segment come after the data segment. We need the GDT to be in a certain order to support the syscall and sysret instruction pair.
This commit is contained in:
parent
33b78915d3
commit
d36c84c331
2 changed files with 6 additions and 4 deletions
|
@ -31,10 +31,11 @@ static_assert(GDT_SELECTOR_CODE0 + 16 == GDT_SELECTOR_CODE3); // CS3 = CS0 + 16
|
|||
static_assert(GDT_SELECTOR_CODE0 + 24 == GDT_SELECTOR_DATA3); // SS3 = CS0 + 32
|
||||
#else
|
||||
# define GDT_SELECTOR_CODE0 0x08
|
||||
# define GDT_SELECTOR_CODE3 0x10
|
||||
# define GDT_SELECTOR_DATA0 0x10
|
||||
# define GDT_SELECTOR_DATA3 0x18
|
||||
# define GDT_SELECTOR_TSS 0x20
|
||||
# define GDT_SELECTOR_TSS_PART2 0x28
|
||||
# define GDT_SELECTOR_CODE3 0x20
|
||||
# define GDT_SELECTOR_TSS 0x28
|
||||
# define GDT_SELECTOR_TSS_PART2 0x30
|
||||
#endif
|
||||
|
||||
namespace Kernel {
|
||||
|
|
|
@ -1156,8 +1156,9 @@ UNMAP_AFTER_INIT void Processor::gdt_init()
|
|||
write_raw_gdt_entry(GDT_SELECTOR_DATA3, 0x0000ffff, 0x00cff200); // data3
|
||||
#else
|
||||
write_raw_gdt_entry(GDT_SELECTOR_CODE0, 0x0000ffff, 0x00af9a00); // code0
|
||||
write_raw_gdt_entry(GDT_SELECTOR_CODE3, 0x0000ffff, 0x00affa00); // code3
|
||||
write_raw_gdt_entry(GDT_SELECTOR_DATA0, 0x0000ffff, 0x00af9200); // data0
|
||||
write_raw_gdt_entry(GDT_SELECTOR_DATA3, 0x0000ffff, 0x008ff200); // data3
|
||||
write_raw_gdt_entry(GDT_SELECTOR_CODE3, 0x0000ffff, 0x00affa00); // code3
|
||||
#endif
|
||||
|
||||
#if ARCH(I386)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue