summaryrefslogtreecommitdiff
path: root/src/thread/arm/clone.s
blob: 65cd3f5a8d9a71130fb1720b4ea3463b1abf4b53 (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
33
34
35
.text
.global __clone
.weak clone
.type   __clone,%function
.type   clone,%function
__clone:
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}
	tst lr,#1
	moveq pc,lr
	bx lr

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

1:	blx r5
	b 2b