https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81493
wangzhijun2005 at hotmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |VERIFIED --- Comment #5 from wangzhijun2005 at hotmail dot com --- I also tried to link my library with static Thread sanitizer libtsan.a, then loaded it without setting LD_PRELOAD , still got error "libfoo.so: cannot allocate memory in static TLS block". But it works for Address Sanitizer in this way. $ cat foo.c #include <stdint.h> #include <stdio.h> __thread uint64_t foo = 1; void bar(void) { printf("address of foo: %p\n", &foo); return; } $ gcc -O1 -fsanitize=thread -g -v -fno-omit-frame-pointer -L/home/gmdb/lib -Wall -shared -fPIC -lpthread -o libfoo.so foo.c $ ./try.py Traceback (most recent call last): File "./try.py", line 3, in <module> CDLL("/home/gmdb/tls_bug/libfoo.so") File "/usr/lib/python2.7/ctypes/__init__.py", line 362, in __init__ self._handle = _dlopen(self._name, mode) OSError: /home/gmdb/tls_bug/libfoo.so: cannot allocate memory in static TLS block $ ldd libfoo.so linux-vdso.so.1 => (0x00007fff83c74000) libachk.so => /lib/libachk.so (0x00007f4fc62df000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4fc60db000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4fc5ebe000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4fc5bb5000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4fc599e000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4fc55d5000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4fc53cd000) /lib64/ld-linux-x86-64.so.2 (0x000055f5f5b35000)