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.
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;