StuBS
|
Abstracts the GDT that, primarily, contains descriptors to memory segments. More...
Classes | |
struct | SegmentDescriptor.__unnamed32__ |
Fields specific for Data Segment (for debugging purposes) More... | |
Enumerations | |
enum | Segments { SEGMENT_NULL = 0 , SEGMENT_KERNEL_CODE , SEGMENT_KERNEL_DATA } |
enum | Granularity { GRANULARITY_BYTES = 0 , GRANULARITY_4KBLOCK = 1 } |
Unit of the segment limit. More... | |
enum | DescriptorType { DESCRIPTOR_SYSTEM = 0 , DESCRIPTOR_CODEDATA = 1 } |
Descriptor type. More... | |
enum | Size { SIZE_16BIT = 0 , SIZE_32BIT = 2 , SIZE_64BIT_CODE = 1 , SIZE_64BIT_DATA = 0 } |
Address width. More... | |
Functions | |
constexpr Pointer | gdt_protected_mode_pointer (protected_mode) |
constexpr Pointer | gdt_long_mode_pointer (long_mode) |
Constants | |
static SegmentDescriptor | protected_mode [] |
static SegmentDescriptor | long_mode [] |
Abstracts the GDT that, primarily, contains descriptors to memory segments.
The GDT is a table that primarily contains segment descriptors. Segment descriptors has a size of 8 Bytes and contains the size, position, access rights, and purpose of such a segment. Unlike the LDT, the GDT is shared between all processes and may contain TSS and LDT descriptors. For the kernel, the first entry is required to be a null descriptor and the code and data segments. To support user-mode processes, additional TSS, code, and data segments for ring 3 must be added.
The base address and size of the GDT are written to the GDTR register during boot (via. lgdt
).
struct GDT::SegmentDescriptor.__unnamed32__ |
Fields specific for Data Segment (for debugging purposes)
Class Members | ||
---|---|---|
uint64_t | __pad0__: 40 |
Ignored (set via limit_low and base_low ) |
bool | data_accessed: 1 | If set, the data segment was used since the last reset of this value. |
bool | writeable: 1 | If set, data is writable (otherwise read only) |
bool | expand_down: 1 | Growing direction for dynamically growing segments. |
bool | notData: 1 |
Has to be cleared (false ) |
uint64_t | __pad1__: 9 |
Ignored (set via privilege_level ... available ) |
uint64_t | reserved: 1 |
Reserved, always set to 0 ! |
bool | big: 1 |
Size of the stack pointer (false = 16 bit, true = 32 bit)
|
uint64_t | __pad2__: 0 | Remainder ignored. |
enum GDT::Segments |
enum GDT::Granularity |
enum GDT::DescriptorType |
enum GDT::Size |
|
constexpr |
|
static |
|
static |