diff options
author | Alexey Samsonov <samsonov@google.com> | 2012-09-17 09:14:11 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2012-09-17 09:14:11 +0000 |
commit | ff3f173e87b9f265a70f834b860c37dbe7256965 (patch) | |
tree | 956c34ed9a2372fc2b3ce231549378d028e09e1b /compiler-rt/lib/tsan | |
parent | 97ca3066410be348997b863d336290a0db959359 (diff) | |
download | bcm5719-llvm-ff3f173e87b9f265a70f834b860c37dbe7256965.tar.gz bcm5719-llvm-ff3f173e87b9f265a70f834b860c37dbe7256965.zip |
[TSan] If we detect an unlimited stack, try to re-exec with limited stack
llvm-svn: 164021
Diffstat (limited to 'compiler-rt/lib/tsan')
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc index 4a9172d8497..eaaf96e2190 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc @@ -202,6 +202,17 @@ const char *InitializePlatform() { lim.rlim_max = 0; setrlimit(RLIMIT_CORE, (rlimit*)&lim); } + // TSan doesn't play well with unlimited stack size (as stack + // overlaps with shadow memory). If we detect unlimited stack size, + // we re-exec the program with limited stack size as a best effort. + if (StackSizeIsUnlimited()) { + const uptr kMaxStackSize = 32 * 1024 * 1024; // 32 Mb + Report("WARNING: Program is run with unlimited stack size, which " + "wouldn't work with ThreadSanitizer.\n"); + Report("Re-execing with stack size limited to %zd bytes.\n", kMaxStackSize); + SetStackSizeLimitInBytes(kMaxStackSize); + ReExec(); + } #ifndef TSAN_GO CheckPIE(); |