From: Rich Felker Date: Sat, 13 Jul 2013 18:54:34 +0000 (-0400) Subject: fix omission of dtv setup in static linked programs on TLS variant I archs X-Git-Tag: v0.9.12~71 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f1292e3d28309bbc81f61671164843cec4319bfa;p=oweals%2Fmusl.git fix omission of dtv setup in static linked programs on TLS variant I archs apparently this was never noticed before because the linker normally optimizes dynamic TLS models to non-dynamic ones when static linking, thus eliminating the calls to __tls_get_addr which crash when the dtv is missing. however, some libsupc++ code on ARM was calling __tls_get_addr when static linked and crashing. the reason is unclear to me, but with this issue fixed it should work now anyway. --- diff --git a/src/env/__init_tls.c b/src/env/__init_tls.c index eb2a6e4a..a4704f06 100644 --- a/src/env/__init_tls.c +++ b/src/env/__init_tls.c @@ -26,9 +26,9 @@ void *__copy_tls(unsigned char *mem) mem += libc.tls_size - sizeof(struct pthread); mem -= (uintptr_t)mem & (align-1); td = (pthread_t)mem; - td->dtv = dtv; mem -= size; #endif + td->dtv = dtv; dtv[1] = mem; memcpy(mem, image, len); return td;