summaryrefslogtreecommitdiff
path: root/src/thread/x32/clone.s
blob: eed461510baa9b1499996ab3c773268261c4ac07 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.text
.global __clone
.type   __clone,@function
__clone:
	movl $0x40000038,%eax /* SYS_clone */
	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
	movl $0x4000003c,%eax /* SYS_exit */
	syscall
	hlt
1:	ret