fix async thread cancellation stack alignment
[musl] / src / thread / sh / syscall_cp.s
index 5677b9c..bb848ef 100644 (file)
@@ -1,32 +1,29 @@
 .text
+.global __cp_begin
+.hidden __cp_begin
+.global __cp_end
+.hidden __cp_end
+.global __cp_cancel
+.hidden __cp_cancel
+.hidden __cancel
 .global __syscall_cp_asm
+.hidden __syscall_cp_asm
 .type   __syscall_cp_asm, @function
 __syscall_cp_asm:
 
-.global __cp_begin
 __cp_begin:
        mov.l @r4, r4
        tst   r4, r4
-       bt    2f
-
-       mov.l L1, r0
-       braf  r0
-        nop
-1:
-
-.align 2
-L1:    .long __cancel@PLT-(1b-.)
-
-2:     mov   r5, r3
+       bf    __cp_cancel
+       mov   r5, r3
        mov   r6, r4
        mov   r7, r5
        mov.l @r15, r6
        mov.l @(4,r15), r7
        mov.l @(8,r15), r0
        mov.l @(12,r15), r1
-       trapa #22
+       trapa #31
 
-.global __cp_end
 __cp_end:
        ! work around hardware bug
        or   r0, r0
@@ -37,3 +34,12 @@ __cp_end:
 
        rts
         nop
+
+__cp_cancel:
+       mov.l 2f, r0
+       braf  r0
+        nop
+1:
+
+.align 2
+2:     .long __cancel@PCREL-(1b-.)