From 24323de08fa8850712d56621bff29dbbbd0285a9 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 7 May 2013 14:41:43 +0000 Subject: [sanitizer] Move GetThreadStackAndTls from TSan to sanitizer_common. Move this function to sanitizer_common because LSan uses it too. Also, fix a bug where the TLS range reported for main thread was off by the size of the thread descriptor from libc (TSan doesn't care much, but for LSan it's critical). git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@181322 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/tsan/rtl/tsan_platform_linux.cc | 31 ------------------------------- 1 file changed, 31 deletions(-) (limited to 'lib/tsan/rtl/tsan_platform_linux.cc') diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc index 00b862104..df07ac638 100644 --- a/lib/tsan/rtl/tsan_platform_linux.cc +++ b/lib/tsan/rtl/tsan_platform_linux.cc @@ -23,7 +23,6 @@ #include "tsan_rtl.h" #include "tsan_flags.h" -#include #include #include #include @@ -46,7 +45,6 @@ #include #include -extern "C" int arch_prctl(int code, __sanitizer::uptr *addr); extern "C" struct mallinfo __libc_mallinfo(); namespace __tsan { @@ -358,35 +356,6 @@ const char *InitializePlatform() { return GetEnv(kTsanOptionsEnv); } -void GetThreadStackAndTls(bool main, uptr *stk_addr, uptr *stk_size, - uptr *tls_addr, uptr *tls_size) { -#ifndef TSAN_GO - arch_prctl(ARCH_GET_FS, tls_addr); - *tls_size = GetTlsSize(); - *tls_addr -= *tls_size; - - uptr stack_top, stack_bottom; - GetThreadStackTopAndBottom(main, &stack_top, &stack_bottom); - *stk_addr = stack_bottom; - *stk_size = stack_top - stack_bottom; - - if (!main) { - // If stack and tls intersect, make them non-intersecting. - if (*tls_addr > *stk_addr && *tls_addr < *stk_addr + *stk_size) { - CHECK_GT(*tls_addr + *tls_size, *stk_addr); - CHECK_LE(*tls_addr + *tls_size, *stk_addr + *stk_size); - *stk_size -= *tls_size; - *tls_addr = *stk_addr + *stk_size; - } - } -#else - *stk_addr = 0; - *stk_size = 0; - *tls_addr = 0; - *tls_size = 0; -#endif -} - bool IsGlobalVar(uptr addr) { return g_data_start && addr >= g_data_start && addr < g_data_end; } -- cgit v1.2.1