summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-09-27 13:20:40 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-09-27 13:20:40 +0000
commitf7f616ba66f49ecbac6e0ddf75f4800acc88a82d (patch)
tree82c94e9f4954d785a8cf0f2d670480fcd035907b
parent9aabaa39d674334971713b9a1491a652f18b6a1e (diff)
downloadbcm5719-llvm-f7f616ba66f49ecbac6e0ddf75f4800acc88a82d.tar.gz
bcm5719-llvm-f7f616ba66f49ecbac6e0ddf75f4800acc88a82d.zip
Quick fix data/bss detection in TSan.
The old way breaks when a module's bss is adjacent to the [heap] vm area. Both ways are not very reliable, though. llvm-svn: 164772
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc
index 3791e7c1c21..eed5062ffda 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc
@@ -153,7 +153,10 @@ static void InitDataSeg() {
while (proc_maps.Next(&start, &end, &offset, name, ARRAY_SIZE(name))) {
DPrintf("%p-%p %p %s\n", start, end, offset, name);
bool is_data = offset != 0 && name[0] != 0;
- bool is_bss = offset == 0 && name[0] == 0 && prev_is_data;
+ // BSS may get merged with [heap] in /proc/self/maps. This is not very
+ // reliable.
+ bool is_bss = offset == 0 &&
+ (name[0] == 0 || internal_strcmp(name, "[heap]") == 0) && prev_is_data;
if (g_data_start == 0 && is_data)
g_data_start = start;
if (is_bss)
OpenPOWER on IntegriCloud