summaryrefslogtreecommitdiff
path: root/kernel/src/scheduler/switch.S
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-27 01:59:33 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-27 01:59:33 +0100
commit15f3911599a8d005edee46247470afe2a7a0b4aa (patch)
tree3113b84e1ddddc1f4937ca5596d8e32aacc4f51f /kernel/src/scheduler/switch.S
parenta164ca67174ba6179170dea573479f23122513cc (diff)
almost done multitasking
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: