فهرست منبع

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.
Rich Felker 11 سال پیش
والد
کامیت
f1292e3d28
1فایلهای تغییر یافته به همراه1 افزوده شده و 1 حذف شده
  1. 1 1
      src/env/__init_tls.c

+ 1 - 1
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;