fix issue with longjmp out of signal handlers and cancellation
[musl] / src / thread / arm / syscall_cp.s
index 59924fc..0cc23b1 100644 (file)
@@ -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