git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Modules/PS2KbMouse - Fixing PL050 bugs
[tpg/acess2.git]
/
Kernel
/
arch
/
x86_64
/
proc.asm
diff --git
a/Kernel/arch/x86_64/proc.asm
b/Kernel/arch/x86_64/proc.asm
index
4771e1b
..
90eb3dc
100644
(file)
--- a/
Kernel/arch/x86_64/proc.asm
+++ b/
Kernel/arch/x86_64/proc.asm
@@
-98,21
+98,28
@@
SaveState:
SwitchTasks:
PUSH_GPR
SwitchTasks:
PUSH_GPR
+ ; Save state RIP and RSP
lea rax, [rel .restore]
lea rax, [rel .restore]
- mov
QWORD
[rcx], rax
+ mov [rcx], rax
mov [rsi], rsp
mov [rsi], rsp
+ ; Change CR3 if requested
test r8, r8
jz .setState
mov cr3, r8
test r8, r8
jz .setState
mov cr3, r8
+
+ ; Make sure the stack is valid before jumping
invlpg [rdi]
invlpg [rdi+0x1000]
invlpg [rdi]
invlpg [rdi+0x1000]
+
+ ; Go to new state
.setState:
mov rsp, rdi
jmp rdx
.setState:
mov rsp, rdi
jmp rdx
+ ; Restore point for saved state
.restore:
POP_GPR
.restore:
POP_GPR
- xor eax, eax
+ xor eax, eax
; Return zero
ret
ret
UCC
git Repository :: git.ucc.asn.au