summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/tsan
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-09-17 09:14:11 +0000
committerAlexey Samsonov <samsonov@google.com>2012-09-17 09:14:11 +0000
commitff3f173e87b9f265a70f834b860c37dbe7256965 (patch)
tree956c34ed9a2372fc2b3ce231549378d028e09e1b /compiler-rt/lib/tsan
parent97ca3066410be348997b863d336290a0db959359 (diff)
downloadbcm5719-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.cc11
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();
OpenPOWER on IntegriCloud