Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik
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...
 
struct {
uint64_t __pad0__: 40
 Ignored (set voa limit_low and base_low)
 
enum Gate gate: 3
 TSS or LDT entry.
 
bool not16bit: 1
 false for 16-bit, true for 32-bit/64-bit
 
uint64_t __pad1__: 0
 Remainder ignored.
 
}; 
 Fields specific to the Task State Segment. 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.

See also
ISDMv3, 3.4.5; Segment Descriptors
AAPMv2, 4.7 Legacy Segment Descriptors
AAPMv2, 4.8 Long-Mode Segment Descriptors

Constructor & Destructor Documentation

◆ SegmentDescriptor() [1/2]

constexpr GDT::SegmentDescriptor::SegmentDescriptor ( uint64_t  val = 0)
inlineconstexpr

!< Merged value; useful for debugging

Constructor for a specific value

◆ SegmentDescriptor() [2/2]

constexpr GDT::SegmentDescriptor::SegmentDescriptor ( uintptr_t  base,
uint32_t  limit,
bool  code,
int  ring,
Size  size 
)
inlineconstexpr

Constructor for a code/data GDT entry.

Parameters
baseBase Address of segment
limitSize of segment
codeCode or data segment
ringPrivilege level
sizeAddress width

Member Data Documentation

◆ @32

struct { ... }

Fields specific for Code Segment (for debugging purposes)

See also
ISDMv3, 3.4.5.1; Code- and Data-Segment Descriptor Types

◆ @34

struct { ... }

Fields specific for Data Segment (for debugging purposes)

See also
ISDMv3, 3.4.5.1; Code- and Data-Segment Descriptor Types

◆ @36

struct { ... }

Fields specific to the Task State Segment.

See also
ISDMv3, 7.2.2; TSS Descriptor

The documentation for this union was generated from the following file: