Aufgabe 3: Pro-/Epilog
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