diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -464,7 +464,7 @@ *addr = 0; *size = 0; } -#elif SANITIZER_LINUX +#elif SANITIZER_GLIBC #if defined(__x86_64__) || defined(__i386__) || defined(__s390__) *addr = ThreadSelf(); *size = GetTlsSize(); @@ -478,6 +478,12 @@ *addr = 0; *size = 0; #endif +#elif SANITIZER_LINUX && defined(__x86_64__) + uptr **tp; + asm("movq %%fs:0,%0" : "=r"(tp)); + uptr *dtv = tp[1]; + *addr = dtv[1]; + *size = (char *)tp - (char *)dtv[1] + 200; #elif SANITIZER_FREEBSD void** segbase = ThreadSelfSegbase(); *addr = 0;