fix code path where child function returns in arm __clone built as thumb
[musl] / src / ldso / aarch64 / tlsdesc.s
index c91baa4..04d97e7 100644 (file)
@@ -23,16 +23,13 @@ __tlsdesc_static:
 .hidden __tlsdesc_dynamic
 .type __tlsdesc_dynamic,@function
 __tlsdesc_dynamic:
-       stp x1,x2,[sp,#-32]!
-       stp x3,x4,[sp,#16]
+       stp x1,x2,[sp,#-16]!
        mrs x1,tpidr_el0      // tp
        ldr x0,[x0,#8]        // p
-       ldr x2,[x0]           // p->modidx
-       ldr x3,[x1,#-8]       // dtv
-       ldr x2,[x3,x2,lsl #3] // dtv[p->modidx]
-       ldr x0,[x0,#8]        // p->off
-       add x0,x0,x2
-       sub x0,x0,x1
-       ldp x3,x4,[sp,#16]
-       ldp x1,x2,[sp],#32
+       ldp x0,x2,[x0]        // p->modidx, p->off
+       sub x2,x2,x1          // p->off - tp
+       ldr x1,[x1,#-8]       // dtv
+       ldr x1,[x1,x0,lsl #3] // dtv[p->modidx]
+       add x0,x1,x2          // dtv[p->modidx] + p->off - tp
+       ldp x1,x2,[sp],#16
        ret