diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-27 01:59:33 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-27 01:59:33 +0100 |
| commit | 15f3911599a8d005edee46247470afe2a7a0b4aa (patch) | |
| tree | 3113b84e1ddddc1f4937ca5596d8e32aacc4f51f /kernel/src/scheduler/switch.S | |
| parent | a164ca67174ba6179170dea573479f23122513cc (diff) | |
almost done multitasking
Diffstat (limited to 'kernel/src/scheduler/switch.S')
| -rw-r--r-- | kernel/src/scheduler/switch.S | 17 |
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: |
