Browse Source

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 năm trước cách đây
mục cha
commit
f1292e3d28
1 tập tin đã thay đổi với 1 bổ sung1 xóa
  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;