about summary refs log tree commit diff
path: root/src/thread/arm/syscall_cp.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/arm/syscall_cp.s')
-rw-r--r--src/thread/arm/syscall_cp.s18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/thread/arm/syscall_cp.s b/src/thread/arm/syscall_cp.s
index 59924fc5..0cc23b1f 100644
--- a/src/thread/arm/syscall_cp.s
+++ b/src/thread/arm/syscall_cp.s
@@ -3,20 +3,18 @@
 __syscall_cp_asm:
 	mov ip,sp
 	stmfd sp!,{r4,r5,r6,r7,lr}
-	stmfd sp!,{r0}
-	bl 1f
-1:	mov r4,#(1f-.)
-	add r4,r4,lr
-	str r4,[r0,#4]
-	str sp,[r0]
+.global __cp_begin
+__cp_begin:
+	ld r0,[r0]
+	cmp r0,#0
+	blne __cancel
 	mov r7,r1
 	mov r0,r2
 	mov r1,r3
 	ldmfd ip,{r2,r3,r4,r5,r6}
-1:	svc 0
-	ldmfd sp!,{r1}
-	mov r2,#0
-	str r2,[r1]
+	svc 0
+.global __cp_end
+__cp_end:
 	ldmfd sp!,{r4,r5,r6,r7,lr}
 	tst lr,#1
 	moveq pc,lr