about summary refs log tree commit diff
path: root/src/thread/x86_64/syscall_cp.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/x86_64/syscall_cp.s')
-rw-r--r--src/thread/x86_64/syscall_cp.s18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/thread/x86_64/syscall_cp.s b/src/thread/x86_64/syscall_cp.s
index b0363547..788c53cc 100644
--- a/src/thread/x86_64/syscall_cp.s
+++ b/src/thread/x86_64/syscall_cp.s
@@ -2,12 +2,12 @@
 .global __syscall_cp_asm
 .type   __syscall_cp_asm,@function
 __syscall_cp_asm:
-	lea 1f(%rip),%rax
-	mov %rax,8(%rdi)
-	mov %rsp,(%rdi)
-	mov 16(%rdi),%eax
+
+.global __cp_begin
+__cp_begin:
+	mov (%rdi),%eax
 	test %eax,%eax
-	jnz 2f
+	jnz __cancel
 	mov %rdi,%r11
 	mov %rsi,%rax
 	mov %rdx,%rdi
@@ -17,9 +17,7 @@ __syscall_cp_asm:
 	mov 8(%rsp),%r8
 	mov 16(%rsp),%r9
 	mov %r11,8(%rsp)
-1:	syscall
-	xor %ecx,%ecx
-	mov 8(%rsp),%rdi
-	mov %rcx,(%rdi)
+	syscall
+.global __cp_end
+__cp_end:
 	ret
-2:	call __cancel