diff options
author | dzwdz | 2022-07-16 19:35:05 +0200 |
---|---|---|
committer | dzwdz | 2022-07-16 19:35:05 +0200 |
commit | b26098268eb443f1ed3dc50d902b2beee40c8342 (patch) | |
tree | 1b7bf720cde8e68fe1f446a414f38f4f63175227 /src/user/lib | |
parent | ce80ee8d40b0a2b48bfbbceac9a0baee189c5e1b (diff) |
amd64: seemingly working syscalls (SYSCALL/SYSRET)
Diffstat (limited to 'src/user/lib')
-rw-r--r-- | src/user/lib/syscall.s | 24 |
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 |