aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/kernel/cpu/segment_register.cpp36
1 files changed, 16 insertions, 20 deletions
diff --git a/arch/x86_64/src/kernel/cpu/segment_register.cpp b/arch/x86_64/src/kernel/cpu/segment_register.cpp
index 9933e92..b59cd1b 100644
--- a/arch/x86_64/src/kernel/cpu/segment_register.cpp
+++ b/arch/x86_64/src/kernel/cpu/segment_register.cpp
@@ -5,22 +5,19 @@
namespace teachos::arch::kernel::cpu
{
- [[gnu::naked]]
auto reload_data_segment_registers() -> void
{
- asm volatile("xor %rax, %rax\n"
- "mov %rax, %ss\n"
- "mov %rax, %ds\n"
- "mov %rax, %es\n"
- "mov %rax, %fs\n"
- "mov %rax, %gs\n"
- "ret"
- : /* No output from call */
- : /* No input to call */
+ asm volatile("xor %%rax, %%rax\n"
+ "mov %%rax, %%ss\n"
+ "mov %%rax, %%ds\n"
+ "mov %%rax, %%es\n"
+ "mov %%rax, %%fs\n"
+ "mov %%rax, %%gs\n"
+ : /* no output from call */
+ : /* no input to call */
: "rax");
}
- [[gnu::naked]]
auto set_data_segment_registers(context_switching::interrupt_descriptor_table::segment_selector data_segment) -> void
{
asm volatile("xor %%rax, %%rax\n"
@@ -29,15 +26,14 @@ namespace teachos::arch::kernel::cpu
"mov %%rax, %%es\n"
"mov %%rax, %%fs\n"
"mov %%rax, %%gs\n"
- "ret"
- : /* No output from call */
+ : /* no output from call */
: [input] "m"(data_segment)
: "rax");
}
auto read_code_segment_register() -> context_switching::interrupt_descriptor_table::segment_selector
{
- context_switching::interrupt_descriptor_table::segment_selector current_value;
+ context_switching::interrupt_descriptor_table::segment_selector current_value{};
asm volatile("mov %%cs, %[output]" : [output] "=r"(current_value));
return current_value;
}
@@ -45,11 +41,11 @@ namespace teachos::arch::kernel::cpu
auto validate_data_segment_registers(context_switching::interrupt_descriptor_table::segment_selector data_segment)
-> void
{
- context_switching::interrupt_descriptor_table::segment_selector ss;
- context_switching::interrupt_descriptor_table::segment_selector ds;
- context_switching::interrupt_descriptor_table::segment_selector es;
- context_switching::interrupt_descriptor_table::segment_selector fs;
- context_switching::interrupt_descriptor_table::segment_selector gs;
+ context_switching::interrupt_descriptor_table::segment_selector ss{};
+ context_switching::interrupt_descriptor_table::segment_selector ds{};
+ context_switching::interrupt_descriptor_table::segment_selector es{};
+ context_switching::interrupt_descriptor_table::segment_selector fs{};
+ context_switching::interrupt_descriptor_table::segment_selector gs{};
asm volatile(
"mov %%ss, %[ss_output]\n"
@@ -95,7 +91,7 @@ namespace teachos::arch::kernel::cpu
"mov %[return_function], %%rax\n"
"push %%rax\n"
"iretq\n"
- :
+ : /* no output from call */
: [data_segment] "m"(data_segment), [code_segment] "m"(code_segment), [return_function] "r"(address)
: "rax");
}