From f7f616ba66f49ecbac6e0ddf75f4800acc88a82d Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Thu, 27 Sep 2012 13:20:40 +0000 Subject: [PATCH] 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 --- compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc index 3791e7c..eed5062 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) -- 2.7.4