2.3 KiB
2.3 KiB
gdt.h
Definitions to handle segments (Global Descriptor Table).
Segmentation is deprecated and is only needed for backwards compatibility.
OSDev Wiki: Global Descriptor Table
gdt_selector_E
- enum
- Null
- Kernel Code - Readable
- Kernel Data - Readable + Writable
- User Null
- User Code - Readable
- User Data - Readable + Writable
gdt_descriptor_T
- struct [packed]
Name | Type | Description |
---|---|---|
size | uint16_t | The tables size in bytes (-1) |
offset | uint64_t | The virtual address, where the table lies in memory |
gdt_entry_T
- struct [packed]
Name | Type | Description |
---|---|---|
limit0 | uint16_t | Can be ignored in long mode |
base0 | uint16_t | Can be ignored in long mode |
base1 | uint8_t | Can be ignored in long mode |
access | uint8_t | Specifies permissions (details in osdev wiki) |
limit1_flags | uint8_t | The first 4 bits can be ignored and the last 4 specify flags |
base2 | uint8_t | Can be ignored in long mode |
gdt_T
- struct [packed / page aligned]
Name | Type | Description |
---|---|---|
null | gdt_entry_T | The entry for GDT_SELECTOR_NULL |
kernel_code | gdt_entry_T | The entry for GDT_SELECTOR_KERNEL_CODE |
kernel_data | gdt_entry_T | The entry for GDT_SELECTOR_KERNEL_DATA |
user_null | gdt_entry_T | The entry for GDT_SELECTOR_USER_NULL |
user_code | gdt_entry_T | The entry for GDT_SELECTOR_USER_CODE |
user_data | gdt_entry_T | The entry for GDT_SELECTOR_USER_DATA |
g_default_gdt
- global variable
The systems GDT.
gdt_init
- function (void)
Populates and loads g_default_gdt.
This will also set all the data segment registers to 0x10 (Kernel Data) and cs
to 0x08 (Kernel Code).