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, Mode mode)
 Constructor for a 16/32 bit code/memory 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: 3
 Meaning of those 3 bits depends on segment_type below.
 
enum Type segment_type: 2
 Segment 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 1.
 
uint64_t limit_high: 4
 Most-significant bits of segment size.
 
bool available: 1
 One bit to use for other purposes.
 
uint64_t custom: 2
 Meaning of those 2 bits depends on segment_type below.
 
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.
 
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.
 
uint64_t __pad1__: 10
 Ignored.
 
bool is64bit: 1
 64bit code segment More...
 
Size operation_size: 1
 Default address width.
 
uint64_t __pad2__: 0
 Remainder ignored.
 
}; 
 Fields specific for Code Segment. More...
 
struct {
uint64_t __pad0__: 40
 Ignored.
 
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.
 
uint64_t __pad1__: 10
 Ignored.
 
uint64_t reserved: 1
 Reserved, always set to 0!
 
Size big: 1
 Size of the stack pointer. More...
 
uint64_t __pad2__: 0
 Remainder ignored.
 
}; 
 Fields specific for Data Segment. More...
 
struct {
uint64_t __pad0__: 40
 Ignored.
 
enum Gate gate: 3
 TSS or LDT entry.
 
uint64_t __pad1__: 0
 Remainder ignored.
 
}; 
 Fields specific to the Task State Segment. More...
 
struct {
uint64_t base64_high: 32
 Most-significant part of 64bit TSS entries.
 
uint64_t __pad0__: 8
 Reserved.
 
uint64_t zero: 5
 Zero.
 
uint64_t __pad1__: 0
 Remainder ignored.
 
}; 
 Fields specific to the second part of the Task State Segment on x64. 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

Constructor & Destructor Documentation

◆ SegmentDescriptor() [1/2]

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

!< 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,
Mode  mode 
)
inline

Constructor for a 16/32 bit code/memory GDT entry.

Parameters
baseBase Address
limitSize
codeCode or data segment
ringPrivilege level
modeOperation mode (real/protected/long)

Member Data Documentation

◆ @32

struct { ... }

Fields specific for Code Segment.

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

◆ @34

struct { ... }

Fields specific for Data Segment.

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

◆ @38

struct { ... }

Fields specific to the second part of the Task State Segment on x64.

See also
ISDMv3, 7.2.3; TSS Descriptor in 64bit mode

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