diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2014-08-15 19:53:51 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-08-15 19:53:51 +0000 |
commit | cbaa006aa2428a35c050c28fd5891a409e9c2b5e (patch) | |
tree | 72bde85ce8c8db13480592809f964fdc5f6794ad | |
parent | b9cdf18e6ad52e7d4c1193a4222fb6d9fa7272a2 (diff) |
[TSan] Initialize flags as early as possible. Disables back coredump, accidentally enabled in r215479. Add a test.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@215763 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/tsan/rtl/tsan_platform.h | 2 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_platform_linux.cc | 3 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_platform_mac.cc | 3 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_platform_windows.cc | 3 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_rtl.cc | 8 | ||||
-rw-r--r-- | test/sanitizer_common/TestCases/corelimit.cc | 16 |
6 files changed, 24 insertions, 11 deletions
diff --git a/lib/tsan/rtl/tsan_platform.h b/lib/tsan/rtl/tsan_platform.h index b1632640a..35f4a9195 100644 --- a/lib/tsan/rtl/tsan_platform.h +++ b/lib/tsan/rtl/tsan_platform.h @@ -128,7 +128,7 @@ void FlushShadowMemory(); void WriteMemoryProfile(char *buf, uptr buf_size, uptr nthread, uptr nlive); uptr GetRSS(); -const char *InitializePlatform(); +void InitializePlatform(); void FinalizePlatform(); // The additional page is to catch shadow stack overflow as paging fault. diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc index fbb1733de..60036f130 100644 --- a/lib/tsan/rtl/tsan_platform_linux.cc +++ b/lib/tsan/rtl/tsan_platform_linux.cc @@ -332,7 +332,7 @@ static void InitDataSeg() { #endif // #ifndef TSAN_GO -const char *InitializePlatform() { +void InitializePlatform() { DisableCoreDumperIfNecessary(); // Go maps shadow memory lazily and works fine with limited address space. @@ -369,7 +369,6 @@ const char *InitializePlatform() { InitTlsSize(); InitDataSeg(); #endif - return GetEnv(kTsanOptionsEnv); } bool IsGlobalVar(uptr addr) { diff --git a/lib/tsan/rtl/tsan_platform_mac.cc b/lib/tsan/rtl/tsan_platform_mac.cc index 262a505a5..ae1e8aa28 100644 --- a/lib/tsan/rtl/tsan_platform_mac.cc +++ b/lib/tsan/rtl/tsan_platform_mac.cc @@ -73,9 +73,8 @@ void InitializeShadowMemory() { } #endif -const char *InitializePlatform() { +void InitializePlatform() { DisableCoreDumperIfNecessary(); - return GetEnv(kTsanOptionsEnv); } void FinalizePlatform() { diff --git a/lib/tsan/rtl/tsan_platform_windows.cc b/lib/tsan/rtl/tsan_platform_windows.cc index 8b9d20e2b..5326ec379 100644 --- a/lib/tsan/rtl/tsan_platform_windows.cc +++ b/lib/tsan/rtl/tsan_platform_windows.cc @@ -35,8 +35,7 @@ uptr GetRSS() { return 0; } -const char *InitializePlatform() { - return GetEnv(kTsanOptionsEnv); +void InitializePlatform() { } void FinalizePlatform() { diff --git a/lib/tsan/rtl/tsan_rtl.cc b/lib/tsan/rtl/tsan_rtl.cc index 118e413ad..0d00630d0 100644 --- a/lib/tsan/rtl/tsan_rtl.cc +++ b/lib/tsan/rtl/tsan_rtl.cc @@ -289,18 +289,19 @@ void Initialize(ThreadState *thr) { // Install tool-specific callbacks in sanitizer_common. SetCheckFailedCallback(TsanCheckFailed); + ctx = new(ctx_placeholder) Context; + const char *options = GetEnv(kTsanOptionsEnv); + InitializeFlags(&ctx->flags, options); #ifndef TSAN_GO InitializeAllocator(); #endif InitializeInterceptors(); - const char *env = InitializePlatform(); + InitializePlatform(); InitializeMutex(); InitializeDynamicAnnotations(); - ctx = new(ctx_placeholder) Context; #ifndef TSAN_GO InitializeShadowMemory(); #endif - InitializeFlags(&ctx->flags, env); // Setup correct file descriptor for error reports. __sanitizer_set_report_path(flags()->log_path); InitializeSuppressions(); @@ -336,7 +337,6 @@ void Initialize(ThreadState *thr) { } int Finalize(ThreadState *thr) { - Context *ctx = __tsan::ctx; bool failed = false; if (flags()->atexit_sleep_ms > 0 && ThreadCount(thr) > 1) diff --git a/test/sanitizer_common/TestCases/corelimit.cc b/test/sanitizer_common/TestCases/corelimit.cc new file mode 100644 index 000000000..8f54940d0 --- /dev/null +++ b/test/sanitizer_common/TestCases/corelimit.cc @@ -0,0 +1,16 @@ +// RUN: %clangxx -O0 %s -o %t && %run %t +// XFAIL: lsan + +#include <assert.h> +#include <sys/time.h> +#include <sys/resource.h> + +int main() { + struct rlimit lim_core; + getrlimit(RLIMIT_CORE, &lim_core); + void *p; + if (sizeof(p) == 8) { + assert(0 == lim_core.rlim_max); + } + return 0; +} |