diff options
| author | Matteo Gmür <matteo.gmuer1@ost.ch> | 2025-03-15 11:29:26 +0000 |
|---|---|---|
| committer | Fabian Imhof <fabian.imhof@ost.ch> | 2025-03-15 12:03:23 +0000 |
| commit | 2b8e6e7e10f084a9a9ba5c0b79a041f4d1ac459b (patch) | |
| tree | 04f77a457517c8c36e22dead8261191e560eae6d /arch/x86_64/src/kernel/cpu/lgdt.cpp | |
| parent | f2b9ac8f0f22354241e9b78e47aa7cb94e5ef511 (diff) | |
| download | teachos-2b8e6e7e10f084a9a9ba5c0b79a041f4d1ac459b.tar.xz teachos-2b8e6e7e10f084a9a9ba5c0b79a041f4d1ac459b.zip | |
implement loading of gdtr register
Diffstat (limited to 'arch/x86_64/src/kernel/cpu/lgdt.cpp')
| -rw-r--r-- | arch/x86_64/src/kernel/cpu/lgdt.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/x86_64/src/kernel/cpu/lgdt.cpp b/arch/x86_64/src/kernel/cpu/lgdt.cpp index 70a48dd..386914f 100644 --- a/arch/x86_64/src/kernel/cpu/lgdt.cpp +++ b/arch/x86_64/src/kernel/cpu/lgdt.cpp @@ -4,14 +4,17 @@ namespace teachos::arch::kernel::cpu { + auto store_global_descriptor_table() -> context_switching::descriptor_table::global_descriptor_table_pointer + { + context_switching::descriptor_table::global_descriptor_table_pointer current_value{}; + asm("sgdt %[output]" : [output] "=m"(current_value)); + return current_value; + } + auto load_global_descriptor_table(context_switching::descriptor_table::global_descriptor_table_pointer const & gdt_pointer) -> void { - // TODO: build lgdt argument from global_descriptor_table_pointer (don't know how yet) - // asm volatile("lgdt (%0)" : : "r"(gdt_pointer)); - if (gdt_pointer.table_length) - { - } + asm volatile("lgdt %[input]" : /* no output from call */ : [input] "m"(gdt_pointer)); } } // namespace teachos::arch::kernel::cpu |
