diff options
Diffstat (limited to 'src/gdt.cc')
-rw-r--r-- | src/gdt.cc | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -1,12 +1,21 @@ #include "gdt.h" +#include <stdlib.h> using seg = GDT::SegmentDescriptor; GDT::GDT() : segments{seg::make<0>(0, {.present = false}), // null segment + seg::make<0>(0, {.present = false}), // unused segment ??? seg::make<0xffffffff>(0, {.r_w = true, .exe = true, .segment = true}), // code segment seg::make<0xffffffff>(0, {.r_w = true, .segment = true})} // data segment { Pointer gdtr{.limit = sizeof(segments) - 1, .base = reinterpret_cast<uint32_t>(segments)}; asm volatile("lgdt %0" : : "p"(gdtr)); + + printk("GDT installed at ", uhex{gdtr.base}, '\n'); +} + +uint16_t GDT::codeDescriptor() const { + return static_cast<uint16_t>(reinterpret_cast<const uint32_t>(&segments[2]) - + reinterpret_cast<const uint32_t>(&segments)); } |