diff options
| author | Matteo Gmür <matteo.gmuer1@ost.ch> | 2025-04-11 14:01:44 +0000 |
|---|---|---|
| committer | Matteo Gmür <matteo.gmuer1@ost.ch> | 2025-04-11 14:01:44 +0000 |
| commit | e5c62b114da77d278afe077b222b2f4feae2b94e (patch) | |
| tree | 47b32eef196e0ea48688743908b9a01bff48d997 /arch/x86_64/src | |
| parent | 3c7250a32033700944ed6f3d2174756245b22e83 (diff) | |
| download | teachos-e5c62b114da77d278afe077b222b2f4feae2b94e.tar.xz teachos-e5c62b114da77d278afe077b222b2f4feae2b94e.zip | |
Add rax clobbered register to all segment register write calls
Diffstat (limited to 'arch/x86_64/src')
| -rw-r--r-- | arch/x86_64/src/kernel/cpu/segment_register.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86_64/src/kernel/cpu/segment_register.cpp b/arch/x86_64/src/kernel/cpu/segment_register.cpp index 891d72c..9933e92 100644 --- a/arch/x86_64/src/kernel/cpu/segment_register.cpp +++ b/arch/x86_64/src/kernel/cpu/segment_register.cpp @@ -14,7 +14,10 @@ namespace teachos::arch::kernel::cpu "mov %rax, %es\n" "mov %rax, %fs\n" "mov %rax, %gs\n" - "ret"); + "ret" + : /* No output from call */ + : /* No input to call */ + : "rax"); } [[gnu::naked]] @@ -28,7 +31,8 @@ namespace teachos::arch::kernel::cpu "mov %%rax, %%gs\n" "ret" : /* No output from call */ - : [input] "m"(data_segment)); + : [input] "m"(data_segment) + : "rax"); } auto read_code_segment_register() -> context_switching::interrupt_descriptor_table::segment_selector @@ -90,7 +94,6 @@ namespace teachos::arch::kernel::cpu "push %[code_segment]\n" "mov %[return_function], %%rax\n" "push %%rax\n" - "iretq\n" : : [data_segment] "m"(data_segment), [code_segment] "m"(code_segment), [return_function] "r"(address) |
