mirror of
git://git.musl-libc.org/musl
synced 2025-01-16 11:51:34 +00:00
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.
This commit is contained in:
parent
c07da2e970
commit
f1292e3d28
2
src/env/__init_tls.c
vendored
2
src/env/__init_tls.c
vendored
@ -26,9 +26,9 @@ void *__copy_tls(unsigned char *mem)
|
|||||||
mem += libc.tls_size - sizeof(struct pthread);
|
mem += libc.tls_size - sizeof(struct pthread);
|
||||||
mem -= (uintptr_t)mem & (align-1);
|
mem -= (uintptr_t)mem & (align-1);
|
||||||
td = (pthread_t)mem;
|
td = (pthread_t)mem;
|
||||||
td->dtv = dtv;
|
|
||||||
mem -= size;
|
mem -= size;
|
||||||
#endif
|
#endif
|
||||||
|
td->dtv = dtv;
|
||||||
dtv[1] = mem;
|
dtv[1] = mem;
|
||||||
memcpy(mem, image, len);
|
memcpy(mem, image, len);
|
||||||
return td;
|
return td;
|
||||||
|
Loading…
Reference in New Issue
Block a user