summaryrefslogtreecommitdiff
path: root/src/thread/arm/clone.s
blob: e16b13260e60c9699aa084b1c98471b919d00e8d (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
26
27
28
29
30
31
32
.syntax unified
.text
.global __clone
.hidden __clone
.type   __clone,%function
__clone:
	stmfd sp!,{r4,r5,r6,r7}
	mov r7,#120
	mov r6,r3
	mov r5,r0
	mov r0,r2
	and r1,r1,#-16
	ldr r2,[sp,#16]
	ldr r3,[sp,#20]
	ldr r4,[sp,#24]
	svc 0
	tst r0,r0
	beq 1f
	ldmfd sp!,{r4,r5,r6,r7}
	bx lr

1:	mov r0,r6
	tst r5,#1
	bne 1f
	mov lr,pc
	mov pc,r5
2:	mov r7,#1
	svc 0

1:	mov lr,pc
	bx r5
	b 2b