about summary refs log tree commit diff
path: root/src/thread/x32/clone.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/x32/clone.s')
-rw-r--r--src/thread/x32/clone.s27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/thread/x32/clone.s b/src/thread/x32/clone.s
new file mode 100644
index 00000000..ee59903a
--- /dev/null
+++ b/src/thread/x32/clone.s
@@ -0,0 +1,27 @@
+.text
+.global __clone
+.type   __clone,@function
+__clone:
+	xor %eax,%eax
+	mov $56,%al
+	mov %rdi,%r11
+	mov %rdx,%rdi
+	mov %r8,%rdx
+	mov %r9,%r8
+	mov 8(%rsp),%r10
+	mov %r11,%r9
+	and $-16,%rsi
+	sub $8,%rsi
+	mov %rcx,(%rsi)
+	syscall
+	test %eax,%eax
+	jnz 1f
+	xor %ebp,%ebp
+	pop %rdi
+	call *%r9
+	mov %eax,%edi
+	xor %eax,%eax
+	mov $60,%al
+	syscall
+	hlt
+1:	ret