summaryrefslogtreecommitdiff
path: root/kernel/src/scheduler/switch.S
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/scheduler/switch.S')
-rw-r--r--kernel/src/scheduler/switch.S17
1 files changed, 13 insertions, 4 deletions
diff --git a/kernel/src/scheduler/switch.S b/kernel/src/scheduler/switch.S
index 4d5dfb6..12593ec 100644
--- a/kernel/src/scheduler/switch.S
+++ b/kernel/src/scheduler/switch.S
@@ -1,10 +1,13 @@
#include "x86_64_regs.S"
/* %rdi - irq's rsp */
-/* %rsi - task's rsp */
-.global save_context_to_rsp
-save_context_to_rsp:
- mov %rsi, %rsp
+.global save_context_from_rsp
+save_context_from_rsp:
+ push %rbp
+ mov %rsp, %rbp
+
+ mov RSP_OFF(%rdi), %rsp
+
push SS_OFF(%rdi)
push RSP_OFF(%rdi)
push RFLAGS_OFF(%rdi)
@@ -28,6 +31,12 @@ save_context_to_rsp:
push R14_OFF(%rdi)
push R15_OFF(%rdi)
+ mov %rsp, %rax
+
+ mov %rbp, %rsp
+ pop %rbp
+ ret
+
/* %rdi - task's rsp */
.global restore_context_from_rsp
restore_context_from_rsp: