[compiler-rt] r204595 - A fix for sanitizers' TLS support on FreeBSD

Viktor Kutuzov vkutuzov at accesssoftek.com
Mon Mar 24 03:01:55 PDT 2014


Author: vkutuzov
Date: Mon Mar 24 05:01:54 2014
New Revision: 204595

URL: http://llvm.org/viewvc/llvm-project?rev=204595&view=rev
Log:
A fix for sanitizers' TLS support on FreeBSD

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc?rev=204595&r1=204594&r2=204595&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc Mon Mar 24 05:01:54 2014
@@ -105,6 +105,7 @@ void GetThreadStackTopAndBottom(bool at_
     return;
   }
   pthread_attr_t attr;
+  pthread_attr_init(&attr);
   CHECK_EQ(pthread_getattr_np(pthread_self(), &attr), 0);
   uptr stacksize = 0;
   void *stackaddr = 0;
@@ -269,7 +270,9 @@ void StackTrace::SlowUnwindStackWithCont
     trace[size++] = frames[i].absolute_pc + 2;
 }
 
+#if !SANITIZER_FREEBSD
 static uptr g_tls_size;
+#endif
 
 #ifdef __i386__
 # define DL_INTERNAL_FUNCTION __attribute__((regparm(3), stdcall))
@@ -278,7 +281,7 @@ static uptr g_tls_size;
 #endif
 
 void InitTlsSize() {
-#if !SANITIZER_ANDROID
+#if !SANITIZER_FREEBSD && !SANITIZER_ANDROID
   typedef void (*get_tls_func)(size_t*, size_t*) DL_INTERNAL_FUNCTION;
   get_tls_func get_tls;
   void *get_tls_static_info_ptr = dlsym(RTLD_NEXT, "_dl_get_tls_static_info");
@@ -290,11 +293,7 @@ void InitTlsSize() {
   size_t tls_align = 0;
   IndirectExternCall(get_tls)(&tls_size, &tls_align);
   g_tls_size = tls_size;
-#endif
-}
-
-uptr GetTlsSize() {
-  return g_tls_size;
+#endif  // !SANITIZER_FREEBSD && !SANITIZER_ANDROID
 }
 
 #if (defined(__x86_64__) || defined(__i386__)) && SANITIZER_LINUX
@@ -405,6 +404,16 @@ static void GetTls(uptr *addr, uptr *siz
 #endif
 }
 
+uptr GetTlsSize() {
+#if SANITIZER_FREEBSD
+  uptr addr, size;
+  GetTls(&addr, &size);
+  return size;
+#else
+  return g_tls_size;
+#endif
+}
+
 void GetThreadStackAndTls(bool main, uptr *stk_addr, uptr *stk_size,
                           uptr *tls_addr, uptr *tls_size) {
   GetTls(tls_addr, tls_size);





More information about the llvm-commits mailing list