25 uint64_t kernel_cs = 0;
26 kernel_cs |= (uint64_t) DescriptorFlags::Write;
27 kernel_cs |= (uint64_t) DescriptorFlags::Execute;
28 kernel_cs |= (uint64_t) DescriptorFlags::CodeOrDataSegment;
29 kernel_cs |= (uint64_t) DescriptorFlags::Present;
30 kernel_cs |= (uint64_t) DescriptorFlags::LongMode;
34 uint64_t kernel_ds = 0;
35 kernel_ds |= (uint64_t) DescriptorFlags::Write;
36 kernel_ds |= (uint64_t) DescriptorFlags::CodeOrDataSegment;
37 kernel_ds |= (uint64_t) DescriptorFlags::Present;
42 user_cs |= (uint64_t) DescriptorFlags::Write;
43 user_cs |= (uint64_t) DescriptorFlags::Execute;
44 user_cs |= (uint64_t) DescriptorFlags::CodeOrDataSegment;
45 user_cs |= (uint64_t) DescriptorFlags::Present;
46 user_cs |= (uint64_t) DescriptorFlags::LongMode;
47 user_cs |= (3ULL << 45);
52 user_ds |= (uint64_t) DescriptorFlags::Write;
53 user_ds |= (uint64_t) DescriptorFlags::CodeOrDataSegment;
54 user_ds |= (uint64_t) DescriptorFlags::Present;
55 user_ds |= (3ULL << 45);
66 asm volatile(
"mov %0, %%ds" : :
"r"(0x10));
67 asm volatile(
"mov %0, %%es" : :
"r"(0x10));
68 asm volatile(
"mov %0, %%fs" : :
"r"(0x10));
69 asm volatile(
"mov %0, %%gs" : :
"r"(0x10));
70 asm volatile(
"mov %0, %%ss" : :
"r"(0x10));