aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2025-04-11 14:01:44 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2025-04-11 14:01:44 +0000
commite5c62b114da77d278afe077b222b2f4feae2b94e (patch)
tree47b32eef196e0ea48688743908b9a01bff48d997 /arch/x86_64
parent3c7250a32033700944ed6f3d2174756245b22e83 (diff)
downloadteachos-e5c62b114da77d278afe077b222b2f4feae2b94e.tar.xz
teachos-e5c62b114da77d278afe077b222b2f4feae2b94e.zip
Add rax clobbered register to all segment register write calls
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/src/kernel/cpu/segment_register.cpp9
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)