Aufgabe 4: Kontextwechsel
GDT::SegmentDescriptor Union Reference
Describes the structure of segment descriptors. More...
#include <machine/gdt.h>
Public Member Functions | |
constexpr | SegmentDescriptor (uint64_t val=0) |
!< Merged value; useful for debugging More... | |
constexpr | SegmentDescriptor (uintptr_t base, uint32_t limit, bool code, int ring, Size size) |
Constructor for a code/data GDT entry. More... | |
Public Attributes | |
struct { | |
uint64_t | limit_low: 16 |
Least-significant bits of segment size (influenced by granularity!) | |
uint64_t | base_low: 24 |
Least-significant bits of base address. | |
uint64_t | type: 4 |
Meaning of those 4 bits depends on descriptor_type below. | |
DescriptorType | descriptor_type: 1 |
Descriptor type (influences the meaning of the 3 bits above) | |
uint64_t | privilege_level: 2 |
Ring for this segment. | |
bool | present: 1 |
Entry is valid iff set to true | |
uint64_t | limit_high: 4 |
Most-significant bits of segment size. | |
bool | available: 1 |
Bit which can be used for other purposes (in software) | |
uint64_t | custom: 2 |
Meaning of those 2 bits relate to descriptor_type and type. | |
Granularity | granularity: 1 |
Unit used as granularity for the segment limit. | |
uint64_t | base_high: 8 |
most-significant bits of base address | |
}; | |
struct { | |
uint64_t | __pad0__: 40 |
Ignored (set via limit_low and base_low ) | |
bool | code_accessed: 1 |
If set, the code segment was used since the last reset of this value. | |
bool | readable: 1 |
If set, the code is readable (otherwise only executable) | |
bool | conforming: 1 |
If set, the execution of code from this segment is only allowed when running at a privilege of numerically less than or equal to privilege_level (i.e. the executor has the same or higher privileges). However, the executor's privileges remain unchanged. For nonconforming code segments (i.e., conforming is set to 0 ), execution is allowed only if the privileges are equal. Execution will cause a GPF in case of privilege violation. | |
bool | code: 1 |
Has to be set to true | |
uint64_t | __pad1__: 9 |
Ignored (set via privilege_level ... available ) | |
Size | operation_size: 2 |
Default address width (custom field bit) | |
uint64_t | __pad2__: 0 |
Remainder ignored (set via base_high ) | |
}; | |
Fields specific for Code Segment (for debugging purposes) More... | |
struct { | |
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) More... | |
uint64_t | __pad2__: 0 |
Remainder ignored. | |
}; | |
Fields specific for Data Segment (for debugging purposes) More... | |
uint64_t | value |
Detailed Description
Describes the structure of segment descriptors.
A data structure that contains size, position, access rights, and purpose of any segment. Segment descriptors are used in both the GDT, as well as in LDTs.
Constructor & Destructor Documentation
|
inlineconstexpr |
!< Merged value; useful for debugging
Constructor for a specific value
|
inlineconstexpr |
Constructor for a code/data GDT entry.
- Parameters
-
base Base Address of segment limit Size of segment code Code or data segment ring Privilege level size Address width
Member Data Documentation
struct { ... } |
Fields specific for Code Segment (for debugging purposes)
struct { ... } |
Fields specific for Data Segment (for debugging purposes)
The documentation for this union was generated from the following file:
- machine/gdt.h