summaryrefslogtreecommitdiff
path: root/src/user/lib/syscall.s
diff options
context:
space:
mode:
authordzwdz2022-07-16 19:35:05 +0200
committerdzwdz2022-07-16 19:35:05 +0200
commitb26098268eb443f1ed3dc50d902b2beee40c8342 (patch)
tree1b7bf720cde8e68fe1f446a414f38f4f63175227 /src/user/lib/syscall.s
parentce80ee8d40b0a2b48bfbbceac9a0baee189c5e1b (diff)
amd64: seemingly working syscalls (SYSCALL/SYSRET)
Diffstat (limited to 'src/user/lib/syscall.s')
-rw-r--r--src/user/lib/syscall.s24
1 files changed, 4 insertions, 20 deletions
diff --git a/src/user/lib/syscall.s b/src/user/lib/syscall.s
index 0f9e444..07f5631 100644
--- a/src/user/lib/syscall.s
+++ b/src/user/lib/syscall.s
@@ -2,24 +2,8 @@
.global _syscall
.type _syscall, @function
_syscall:
- push %rbx // preserve registers
- push %rsi
- push %rdi
- push %rbp
-
- // NOT the calling convention TODO you lazy fuck
- mov 20(%rsp), %rax
- mov 24(%rsp), %rbx
- mov %rsp, %rcx
- mov $_syscall_ret, %rdx
- mov 28(%rsp), %rsi
- mov 32(%rsp), %rdi
- mov 36(%rsp), %rbp
- sysenter
-
-_syscall_ret:
- pop %rbp
- pop %rdi
- pop %rsi
- pop %rbx
+ push %r10
+ mov %rcx, %r10
+ syscall
+ pop %r10
ret