--- a/sysdeps/unix/sysv/linux/arm/clone.S.orig 2019-11-15 17:43:11.976849647 +0100 +++ b/sysdeps/unix/sysv/linux/arm/clone.S 2019-11-15 17:47:46.142558283 +0100 @@ -56,7 +56,7 @@ swi 0x0 cfi_endproc cmp r0, #0 - beq 1f + beq __thread_start pop {r4, r7} blt PLTJMP(C_SYMBOL_NAME(__syscall_error)) RETINSTR(, lr) @@ -64,9 +64,11 @@ cfi_startproc PSEUDO_END (__clone) -1: +__thread_start: .fnstart .cantunwind + .globl __thread_start + .type __thread_start,%function @ pick the function arg and call address off the stack and execute ldr r0, [sp, #4] ldr ip, [sp], #8 @@ -75,6 +77,7 @@ @ and we are done, passing the return value through r0 ldr r7, =SYS_ify(exit) swi 0x0 + .size __thread_start,.-__thread_start .fnend --- a/sysdeps/unix/sysv/linux/arm/Versions.orig 2019-11-18 13:29:26.241669703 +0100 +++ b/sysdeps/unix/sysv/linux/arm/Versions 2019-11-18 13:29:36.205720723 +0100 @@ -15,5 +15,6 @@ __default_sa_restorer; __default_rt_sa_restorer; # nptl/pthread_cond_timedwait.c uses INTERNAL_VSYSCALL(clock_gettime). __vdso_clock_gettime; + __thread_start; } } --- a/sysdeps/unix/sysv/linux/i386/clone.S.orig 2019-11-18 15:44:25.224216637 +0100 +++ b/sysdeps/unix/sysv/linux/i386/clone.S 2019-11-18 16:24:14.199998035 +0100 @@ -95,11 +95,13 @@ test %eax,%eax jl SYSCALL_ERROR_LABEL - jz L(thread_start) + jz __thread_start ret -L(thread_start): +__thread_start: + .global __thread_start + .type __thread_start,%function cfi_startproc; /* Clearing frame pointer is insufficient, use CFI. */ cfi_undefined (eip); @@ -115,6 +117,7 @@ movl %eax, %ebx movl $SYS_ify(exit), %eax ENTER_KERNEL + .size __thread_start,.-__thread_start PSEUDO_END (__clone) --- a/sysdeps/unix/sysv/linux/i386/Versions.orig 2019-11-18 15:44:51.544333126 +0100 +++ b/sysdeps/unix/sysv/linux/i386/Versions 2019-11-18 15:49:25.829497793 +0100 @@ -47,5 +47,6 @@ } GLIBC_PRIVATE { __modify_ldt; __uname; + __thread_start; } }