[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