<div dir="ltr">Right, see logic regarding MAP_NORESERVE in sanitizer_posix.cc </div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 3, 2015 at 5:33 PM, Galina Kistanova <span dir="ltr"><<a href="mailto:gkistanova@gmail.com" target="_blank">gkistanova@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Hello Evgeniy,<br><br></div>This patch has broken the FreeBSD sanitizer buildbot.<br></div>Looks like an issue with the missing system header.<br><br></div>Could you take a look, please?<br><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lab.llvm.org-3A8011_builders_sanitizer-5Fx86-5F64-2Dfreebsd_builds_5381_steps_compile_logs_stdio&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=RY42wAxqL6rIuAHeI1twdE1xcznCOTZHvPg-JZYKivE&e=" target="_blank">http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/5381/steps/compile/logs/stdio</a><br><br></div>Thanks<span class="HOEnZb"><font color="#888888"><br><br></font></span></div><span class="HOEnZb"><font color="#888888">Galina<br></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 29, 2015 at 3:31 PM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: eugenis<br>
Date: Fri May 29 17:31:28 2015<br>
New Revision: 238621<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D238621-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=Jq54UZEHNqH8xfNrlsBRWtzej4PTdHf3cBAiMLuaADk&e=" target="_blank">http://llvm.org/viewvc/llvm-project?rev=238621&view=rev</a><br>
Log:<br>
Add descriptive names to sanitizer entries in /proc/self/maps. Helps debugging.<br>
<br>
This is done by creating a named shared memory region, unlinking it<br>
and setting up a private (i.e. copy-on-write) mapping of that instead<br>
of a regular anonymous mapping. I've experimented with regular<br>
(sparse) files, but they can not be scaled to the size of MSan shadow<br>
mapping, at least on Linux/X86_64 and ext3 fs.<br>
<br>
Controlled by a common flag, decorate_proc_maps, disabled by default.<br>
<br>
This patch has a few shortcomings:<br>
* not all mappings are annotated, especially in TSan.<br>
* our handling of memset() of shadow via mmap() puts small anonymous<br>
  mappings inside larger named mappings, which looks ugly and can, in<br>
  theory, hit the mapping number limit.<br>
<br>
Added:<br>
    compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/<br>
    compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc<br>
    compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg<br>
Modified:<br>
    compiler-rt/trunk/cmake/config-ix.cmake<br>
    compiler-rt/trunk/lib/asan/CMakeLists.txt<br>
    compiler-rt/trunk/lib/asan/asan_internal.h<br>
    compiler-rt/trunk/lib/asan/asan_poisoning.h<br>
    compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
    compiler-rt/trunk/lib/asan/tests/CMakeLists.txt<br>
    compiler-rt/trunk/lib/msan/msan_linux.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt<br>
    compiler-rt/trunk/lib/tsan/go/buildgo.sh<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h<br>
    compiler-rt/trunk/test/sanitizer_common/lit.common.cfg<br>
<br>
Modified: compiler-rt/trunk/cmake/config-ix.cmake<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_cmake_config-2Dix.cmake-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=zbS-27xescuq6zInGY-MO9jHjKWUbd3i_EIjEVOIM7E&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/config-ix.cmake?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/cmake/config-ix.cmake (original)<br>
+++ compiler-rt/trunk/cmake/config-ix.cmake Fri May 29 17:31:28 2015<br>
@@ -62,6 +62,7 @@ check_symbol_exists(__func__ "" COMPILER<br>
 # Libraries.<br>
 check_library_exists(c printf "" COMPILER_RT_HAS_LIBC)<br>
 check_library_exists(dl dlopen "" COMPILER_RT_HAS_LIBDL)<br>
+check_library_exists(rt shm_open "" COMPILER_RT_HAS_LIBRT)<br>
 check_library_exists(m pow "" COMPILER_RT_HAS_LIBM)<br>
 check_library_exists(pthread pthread_create "" COMPILER_RT_HAS_LIBPTHREAD)<br>
 check_library_exists(stdc++ __cxa_throw "" COMPILER_RT_HAS_LIBSTDCXX)<br>
<br>
Modified: compiler-rt/trunk/lib/asan/CMakeLists.txt<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_asan_CMakeLists.txt-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=9luYcmzMVB2K49QsJC5gkHR9-lPtJxyKAyCsBHK7x6Y&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/CMakeLists.txt?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/asan/CMakeLists.txt Fri May 29 17:31:28 2015<br>
@@ -66,6 +66,7 @@ append_list_if(MSVC /DEBUG ASAN_DYNAMIC_<br>
<br>
 append_list_if(COMPILER_RT_HAS_LIBC c ASAN_DYNAMIC_LIBS)<br>
 append_list_if(COMPILER_RT_HAS_LIBDL dl ASAN_DYNAMIC_LIBS)<br>
+append_list_if(COMPILER_RT_HAS_LIBRT rt ASAN_DYNAMIC_LIBS)<br>
 append_list_if(COMPILER_RT_HAS_LIBM m ASAN_DYNAMIC_LIBS)<br>
 append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread ASAN_DYNAMIC_LIBS)<br>
 append_list_if(COMPILER_RT_HAS_LIBSTDCXX stdc++ ASAN_DYNAMIC_LIBS)<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_internal.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_asan_asan-5Finternal.h-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=dBGT5ttjqLTeeQtPY8lNHZh6UVkkSMjLE4-Ds-sme10&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_internal.h?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_internal.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_internal.h Fri May 29 17:31:28 2015<br>
@@ -93,7 +93,7 @@ void AppendToErrorMessageBuffer(const ch<br>
<br>
 void *AsanDlSymNext(const char *sym);<br>
<br>
-void ReserveShadowMemoryRange(uptr beg, uptr end);<br>
+void ReserveShadowMemoryRange(uptr beg, uptr end, const char *name);<br>
<br>
 // Platform-specific options.<br>
 #if SANITIZER_MAC<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_poisoning.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_asan_asan-5Fpoisoning.h-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=q1q-wghMB0JrEqFORfctWiOIUcnyKMO2FCINo2aD24Y&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_poisoning.h?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_poisoning.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_poisoning.h Fri May 29 17:31:28 2015<br>
@@ -64,7 +64,7 @@ ALWAYS_INLINE void FastPoisonShadow(uptr<br>
       if (page_end != shadow_end) {<br>
         REAL(memset)((void *)page_end, 0, shadow_end - page_end);<br>
       }<br>
-      ReserveShadowMemoryRange(page_beg, page_end - 1);<br>
+      ReserveShadowMemoryRange(page_beg, page_end - 1, nullptr);<br>
     }<br>
   }<br>
 }<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_asan_asan-5Frtl.cc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=SWvYPGmH_5-wAYYapq6moC8uPzogDYRErKCOFZn8BRw&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_rtl.cc Fri May 29 17:31:28 2015<br>
@@ -89,12 +89,12 @@ void ShowStatsAndAbort() {<br>
 // ---------------------- mmap -------------------- {{{1<br>
 // Reserve memory range [beg, end].<br>
 // We need to use inclusive range because end+1 may not be representable.<br>
-void ReserveShadowMemoryRange(uptr beg, uptr end) {<br>
+void ReserveShadowMemoryRange(uptr beg, uptr end, const char *name) {<br>
   CHECK_EQ((beg % GetPageSizeCached()), 0);<br>
   CHECK_EQ(((end + 1) % GetPageSizeCached()), 0);<br>
   uptr size = end - beg + 1;<br>
   DecreaseTotalMmap(size);  // Don't count the shadow against mmap_limit_mb.<br>
-  void *res = MmapFixedNoReserve(beg, size);<br>
+  void *res = MmapFixedNoReserve(beg, size, name);<br>
   if (res != (void*)beg) {<br>
     Report("ReserveShadowMemoryRange failed while trying to map 0x%zx bytes. "<br>
            "Perhaps you're using ulimit -v\n", size);<br>
@@ -298,7 +298,7 @@ static void InitializeHighMemEnd() {<br>
 }<br>
<br>
 static void ProtectGap(uptr addr, uptr size) {<br>
-  void *res = MmapNoAccess(addr, size);<br>
+  void *res = MmapNoAccess(addr, size, "shadow gap");<br>
   if (addr == (uptr)res)<br>
     return;<br>
   Report("ERROR: Failed to protect the shadow gap. "<br>
@@ -422,9 +422,9 @@ static void AsanInitInternal() {<br>
   if (full_shadow_is_available) {<br>
     // mmap the low shadow plus at least one page at the left.<br>
     if (kLowShadowBeg)<br>
-      ReserveShadowMemoryRange(shadow_start, kLowShadowEnd);<br>
+      ReserveShadowMemoryRange(shadow_start, kLowShadowEnd, "low shadow");<br>
     // mmap the high shadow.<br>
-    ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd);<br>
+    ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd, "high shadow");<br>
     // protect the gap.<br>
     ProtectGap(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);<br>
     CHECK_EQ(kShadowGapEnd, kHighShadowBeg - 1);<br>
@@ -433,11 +433,11 @@ static void AsanInitInternal() {<br>
       MemoryRangeIsAvailable(kMidMemEnd + 1, kHighShadowEnd)) {<br>
     CHECK(kLowShadowBeg != kLowShadowEnd);<br>
     // mmap the low shadow plus at least one page at the left.<br>
-    ReserveShadowMemoryRange(shadow_start, kLowShadowEnd);<br>
+    ReserveShadowMemoryRange(shadow_start, kLowShadowEnd, "low shadow");<br>
     // mmap the mid shadow.<br>
-    ReserveShadowMemoryRange(kMidShadowBeg, kMidShadowEnd);<br>
+    ReserveShadowMemoryRange(kMidShadowBeg, kMidShadowEnd, "mid shadow");<br>
     // mmap the high shadow.<br>
-    ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd);<br>
+    ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd, "high shadow");<br>
     // protect the gaps.<br>
     ProtectGap(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);<br>
     ProtectGap(kShadowGap2Beg, kShadowGap2End - kShadowGap2Beg + 1);<br>
<br>
Modified: compiler-rt/trunk/lib/asan/tests/CMakeLists.txt<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_asan_tests_CMakeLists.txt-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=dVBCaM-8XURQ09oV8oFyfzH-6Uh7_EoxswG9TisC3eQ&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/CMakeLists.txt?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/tests/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/asan/tests/CMakeLists.txt Fri May 29 17:31:28 2015<br>
@@ -99,6 +99,7 @@ append_list_if(ANDROID atomic ASAN_UNITT<br>
 set(ASAN_UNITTEST_NOINST_LINKFLAGS ${ASAN_UNITTEST_COMMON_LINKFLAGS})<br>
 append_list_if(COMPILER_RT_HAS_LIBM -lm ASAN_UNITTEST_NOINST_LINKFLAGS)<br>
 append_list_if(COMPILER_RT_HAS_LIBDL -ldl ASAN_UNITTEST_NOINST_LINKFLAGS)<br>
+append_list_if(COMPILER_RT_HAS_LIBRT -lrt ASAN_UNITTEST_NOINST_LINKFLAGS)<br>
 append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread ASAN_UNITTEST_NOINST_LINKFLAGS)<br>
 append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread<br>
           ASAN_DYNAMIC_UNITTEST_INSTRUMENTED_LINKFLAGS)<br>
<br>
Modified: compiler-rt/trunk/lib/msan/msan_linux.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_msan_msan-5Flinux.cc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=oj3jdCwzG02pfAM00fVKpieLyTN6hrJqBBCvmPucNGI&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_linux.cc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/msan/msan_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/msan/msan_linux.cc Fri May 29 17:31:28 2015<br>
@@ -53,16 +53,16 @@ static bool CheckMemoryRangeAvailability<br>
   return true;<br>
 }<br>
<br>
-static bool ProtectMemoryRange(uptr beg, uptr size) {<br>
+static bool ProtectMemoryRange(uptr beg, uptr size, const char *name) {<br>
   if (size > 0) {<br>
-    void *addr = MmapNoAccess(beg, size);<br>
+    void *addr = MmapNoAccess(beg, size, name);<br>
     if (beg == 0 && addr != 0) {<br>
       // Depending on the kernel configuration, we may not be able to protect<br>
       // the page at address zero.<br>
       uptr gap = 16 * GetPageSizeCached();<br>
       beg += gap;<br>
       size -= gap;<br>
-      addr = MmapNoAccess(beg, size);<br>
+      addr = MmapNoAccess(beg, size, name);<br>
     }<br>
     if ((uptr)addr != beg) {<br>
       uptr end = beg + size - 1;<br>
@@ -135,7 +135,7 @@ bool InitShadow(bool init_origins) {<br>
     if (map) {<br>
       if (!CheckMemoryRangeAvailability(start, size))<br>
         return false;<br>
-      if ((uptr)MmapFixedNoReserve(start, size) != start)<br>
+      if ((uptr)MmapFixedNoReserve(start, size, kMemoryLayout[i].name) != start)<br>
         return false;<br>
       if (common_flags()->use_madv_dontdump)<br>
         DontDumpShadowMemory(start, size);<br>
@@ -143,7 +143,7 @@ bool InitShadow(bool init_origins) {<br>
     if (protect) {<br>
       if (!CheckMemoryRangeAvailability(start, size))<br>
         return false;<br>
-      if (!ProtectMemoryRange(start, size))<br>
+      if (!ProtectMemoryRange(start, size, kMemoryLayout[i].name))<br>
         return false;<br>
     }<br>
   }<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fcommon.h-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=4_IYGSTX-QDW8pdv3xo9SsSfyiOPanL2Dv-sBkr9I0c&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Fri May 29 17:31:28 2015<br>
@@ -69,10 +69,11 @@ void GetThreadStackAndTls(bool main, upt<br>
 // Memory management<br>
 void *MmapOrDie(uptr size, const char *mem_type);<br>
 void UnmapOrDie(void *addr, uptr size);<br>
-void *MmapFixedNoReserve(uptr fixed_addr, uptr size);<br>
+void *MmapFixedNoReserve(uptr fixed_addr, uptr size,<br>
+                         const char *name = nullptr);<br>
 void *MmapNoReserveOrDie(uptr size, const char *mem_type);<br>
 void *MmapFixedOrDie(uptr fixed_addr, uptr size);<br>
-void *MmapNoAccess(uptr fixed_addr, uptr size);<br>
+void *MmapNoAccess(uptr fixed_addr, uptr size, const char *name = nullptr);<br>
 // Map aligned chunk of address space; size and alignment are powers of two.<br>
 void *MmapAlignedOrDie(uptr size, uptr alignment, const char *mem_type);<br>
 // Disallow access to a memory range.  Use MmapNoAccess to allocate an<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fflags.inc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=5Z-zq4LOuJAsHrkDUmrw79FtQZkpWWWT-6i9Prnnb54&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc Fri May 29 17:31:28 2015<br>
@@ -163,3 +163,6 @@ COMMON_FLAG(bool, intercept_strspn, true<br>
 COMMON_FLAG(bool, intercept_strpbrk, true,<br>
             "If set, uses custom wrappers for strpbrk function "<br>
             "to find more errors.")<br>
+COMMON_FLAG(bool, decorate_proc_maps, false, "If set, decorate sanitizer "<br>
+                                             "mappings in /proc/self/maps with "<br>
+                                             "user-readable names")<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fposix.cc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=ubESMdbDt2nRe2rT1mOXOIOewAUgpbw3C4q7UgGxApM&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Fri May 29 17:31:28 2015<br>
@@ -165,22 +165,6 @@ void *MmapNoReserveOrDie(uptr size, cons<br>
   return (void *)p;<br>
 }<br>
<br>
-void *MmapFixedNoReserve(uptr fixed_addr, uptr size) {<br>
-  uptr PageSize = GetPageSizeCached();<br>
-  uptr p = internal_mmap((void*)(fixed_addr & ~(PageSize - 1)),<br>
-      RoundUpTo(size, PageSize),<br>
-      PROT_READ | PROT_WRITE,<br>
-      MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,<br>
-      -1, 0);<br>
-  int reserrno;<br>
-  if (internal_iserror(p, &reserrno))<br>
-    Report("ERROR: %s failed to "<br>
-           "allocate 0x%zx (%zd) bytes at address %zx (errno: %d)\n",<br>
-           SanitizerToolName, size, size, fixed_addr, reserrno);<br>
-  IncreaseTotalMmap(size);<br>
-  return (void *)p;<br>
-}<br>
-<br>
 void *MmapFixedOrDie(uptr fixed_addr, uptr size) {<br>
   uptr PageSize = GetPageSizeCached();<br>
   uptr p = internal_mmap((void*)(fixed_addr & ~(PageSize - 1)),<br>
@@ -199,13 +183,6 @@ void *MmapFixedOrDie(uptr fixed_addr, up<br>
   return (void *)p;<br>
 }<br>
<br>
-void *MmapNoAccess(uptr fixed_addr, uptr size) {<br>
-  return (void *)internal_mmap((void*)fixed_addr, size,<br>
-                               PROT_NONE,<br>
-                               MAP_PRIVATE | MAP_ANON | MAP_FIXED |<br>
-                               MAP_NORESERVE, -1, 0);<br>
-}<br>
-<br>
 bool MprotectNoAccess(uptr addr, uptr size) {<br>
   return 0 == internal_mprotect((void*)addr, size, PROT_NONE);<br>
 }<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fposix-5Flibcdep.cc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=FRAAL-i_ZdhuPPtsb6MJ4mMGyEnwFxZgfgG546gFfUw&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc Fri May 29 17:31:28 2015<br>
@@ -24,6 +24,7 @@<br>
 #include "sanitizer_symbolizer.h"<br>
<br>
 #include <errno.h><br>
+#include <fcntl.h><br>
 #include <pthread.h><br>
 #include <signal.h><br>
 #include <stdlib.h><br>
@@ -31,6 +32,7 @@<br>
 #include <sys/resource.h><br>
 #include <sys/time.h><br>
 #include <sys/types.h><br>
+#include <sys/stat.h><br>
 #include <unistd.h><br>
<br>
 namespace __sanitizer {<br>
@@ -217,6 +219,55 @@ void PrepareForSandboxing(__sanitizer_sa<br>
 #endif<br>
 }<br>
<br>
+#if SANITIZER_ANDROID<br>
+int GetNamedMappingFd(const char *name, uptr size) {<br>
+  return -1;<br>
+}<br>
+#else<br>
+int GetNamedMappingFd(const char *name, uptr size) {<br>
+  if (!common_flags()->decorate_proc_maps)<br>
+    return -1;<br>
+  char shmname[200];<br>
+  CHECK(internal_strlen(name) < sizeof(shmname) - 10);<br>
+  internal_snprintf(shmname, sizeof(shmname), "%zu [%s]", internal_getpid(),<br>
+                    name);<br>
+  int fd = shm_open(shmname, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU);<br>
+  CHECK_GE(fd, 0);<br>
+  int res = internal_ftruncate(fd, size);<br>
+  CHECK_EQ(0, res);<br>
+  res = shm_unlink(shmname);<br>
+  CHECK_EQ(0, res);<br>
+  return fd;<br>
+}<br>
+#endif<br>
+<br>
+void *MmapFixedNoReserve(uptr fixed_addr, uptr size, const char *name) {<br>
+  int fd = name ? GetNamedMappingFd(name, size) : -1;<br>
+  unsigned flags = MAP_PRIVATE | MAP_FIXED | MAP_NORESERVE;<br>
+  if (fd == -1) flags |= MAP_ANON;<br>
+<br>
+  uptr PageSize = GetPageSizeCached();<br>
+  uptr p = internal_mmap((void *)(fixed_addr & ~(PageSize - 1)),<br>
+                         RoundUpTo(size, PageSize), PROT_READ | PROT_WRITE,<br>
+                         flags, fd, 0);<br>
+  int reserrno;<br>
+  if (internal_iserror(p, &reserrno))<br>
+    Report("ERROR: %s failed to "<br>
+           "allocate 0x%zx (%zd) bytes at address %zx (errno: %d)\n",<br>
+           SanitizerToolName, size, size, fixed_addr, reserrno);<br>
+  IncreaseTotalMmap(size);<br>
+  return (void *)p;<br>
+}<br>
+<br>
+void *MmapNoAccess(uptr fixed_addr, uptr size, const char *name) {<br>
+  int fd = name ? GetNamedMappingFd(name, size) : -1;<br>
+  unsigned flags = MAP_PRIVATE | MAP_FIXED | MAP_NORESERVE;<br>
+  if (fd == -1) flags |= MAP_ANON;<br>
+<br>
+  return (void *)internal_mmap((void *)fixed_addr, size, PROT_NONE, flags, fd,<br>
+                               0);<br>
+}<br>
+<br>
 }  // namespace __sanitizer<br>
<br>
 #endif  // SANITIZER_POSIX<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_sanitizer-5Fwin.cc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=E464Jwc_jd-Y3d3REnr4eli1FHt3VMeG3KsKKaNWdV8&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Fri May 29 17:31:28 2015<br>
@@ -104,9 +104,10 @@ void UnmapOrDie(void *addr, uptr size) {<br>
   }<br>
 }<br>
<br>
-void *MmapFixedNoReserve(uptr fixed_addr, uptr size) {<br>
+void *MmapFixedNoReserve(uptr fixed_addr, uptr size, const char *name) {<br>
   // FIXME: is this really "NoReserve"? On Win32 this does not matter much,<br>
   // but on Win64 it does.<br>
+  (void)name; // unsupported<br>
   void *p = VirtualAlloc((LPVOID)fixed_addr, size,<br>
       MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);<br>
   if (p == 0)<br>
@@ -125,7 +126,8 @@ void *MmapNoReserveOrDie(uptr size, cons<br>
   return MmapOrDie(size, mem_type);<br>
 }<br>
<br>
-void *MmapNoAccess(uptr fixed_addr, uptr size) {<br>
+void *MmapNoAccess(uptr fixed_addr, uptr size, const char *name) {<br>
+  (void)name; // unsupported<br>
   void *res = VirtualAlloc((LPVOID)fixed_addr, size,<br>
                            MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS);<br>
   if (res == 0)<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_sanitizer-5Fcommon_tests_CMakeLists.txt-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=LsdSsv6Tzm3Pq9agAeiIG-7qL4pPfnFq4Ph8pG3SY6w&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt Fri May 29 17:31:28 2015<br>
@@ -73,6 +73,7 @@ append_list_if(ANDROID log SANITIZER_TES<br>
 append_list_if(ANDROID atomic SANITIZER_TEST_LINK_LIBS)<br>
<br>
 append_list_if(COMPILER_RT_HAS_LIBDL -ldl SANITIZER_TEST_LINK_FLAGS_COMMON)<br>
+append_list_if(COMPILER_RT_HAS_LIBRT -lrt SANITIZER_TEST_LINK_FLAGS_COMMON)<br>
 append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread SANITIZER_TEST_LINK_FLAGS_COMMON)<br>
 # x86_64 FreeBSD 9.2 additionally requires libc++ to build the tests. Also,<br>
 # 'libm' shall be specified explicitly to build i386 tests.<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/go/buildgo.sh<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_tsan_go_buildgo.sh-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=ONVUxZaMJf3hH-IEnnx9TIPCiq-1dHJDylPekN7dimY&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/go/buildgo.sh?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/go/buildgo.sh (original)<br>
+++ compiler-rt/trunk/lib/tsan/go/buildgo.sh Fri May 29 17:31:28 2015<br>
@@ -36,7 +36,7 @@ SRCS="<br>
 if [ "`uname -a | grep Linux`" != "" ]; then<br>
        SUFFIX="linux_amd64"<br>
        OSCFLAGS="-fPIC -ffreestanding -Wno-maybe-uninitialized -Wno-unused-const-variable -Werror -Wno-unknown-warning-option"<br>
-       OSLDFLAGS="-lpthread -fPIC -fpie"<br>
+       OSLDFLAGS="-lpthread -lrt -fPIC -fpie"<br>
        SRCS="<br>
                $SRCS<br>
                ../rtl/tsan_platform_linux.cc<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_tsan_rtl_tsan-5Fplatform-5Flinux.cc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=GqAD_Omb2G4138XM8keGvU8Qk2smg3CLdvsX9t5az7A&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc Fri May 29 17:31:28 2015<br>
@@ -202,8 +202,8 @@ static void MapRodata() {<br>
<br>
 void InitializeShadowMemory() {<br>
   // Map memory shadow.<br>
-  uptr shadow = (uptr)MmapFixedNoReserve(kShadowBeg,<br>
-    kShadowEnd - kShadowBeg);<br>
+  uptr shadow =<br>
+      (uptr)MmapFixedNoReserve(kShadowBeg, kShadowEnd - kShadowBeg, "shadow");<br>
   if (shadow != kShadowBeg) {<br>
     Printf("FATAL: ThreadSanitizer can not mmap the shadow memory\n");<br>
     Printf("FATAL: Make sure to compile with -fPIE and "<br>
@@ -232,7 +232,8 @@ void InitializeShadowMemory() {<br>
<br>
   // Map meta shadow.<br>
   uptr meta_size = kMetaShadowEnd - kMetaShadowBeg;<br>
-  uptr meta = (uptr)MmapFixedNoReserve(kMetaShadowBeg, meta_size);<br>
+  uptr meta =<br>
+      (uptr)MmapFixedNoReserve(kMetaShadowBeg, meta_size, "meta shadow");<br>
   if (meta != kMetaShadowBeg) {<br>
     Printf("FATAL: ThreadSanitizer can not mmap the shadow memory\n");<br>
     Printf("FATAL: Make sure to compile with -fPIE and "<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_tsan_rtl_tsan-5Frtl.cc-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=4SomCrf9zBTHrHRbT0ImmIUPRi0ThfxO7mg5qBLQDt4&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc Fri May 29 17:31:28 2015<br>
@@ -67,9 +67,12 @@ static char thread_registry_placeholder[<br>
<br>
 static ThreadContextBase *CreateThreadContext(u32 tid) {<br>
   // Map thread trace when context is created.<br>
-  MapThreadTrace(GetThreadTrace(tid), TraceSize() * sizeof(Event));<br>
+  char name[50];<br>
+  internal_snprintf(name, sizeof(name), "trace %u", tid);<br>
+  MapThreadTrace(GetThreadTrace(tid), TraceSize() * sizeof(Event), name);<br>
   const uptr hdr = GetThreadTraceHeader(tid);<br>
-  MapThreadTrace(hdr, sizeof(Trace));<br>
+  internal_snprintf(name, sizeof(name), "trace header %u", tid);<br>
+  MapThreadTrace(hdr, sizeof(Trace), name);<br>
   new((void*)hdr) Trace();<br>
   // We are going to use only a small part of the trace with the default<br>
   // value of history_size. However, the constructor writes to the whole trace.<br>
@@ -237,7 +240,7 @@ void MapShadow(uptr addr, uptr size) {<br>
   // Global data is not 64K aligned, but there are no adjacent mappings,<br>
   // so we can get away with unaligned mapping.<br>
   // CHECK_EQ(addr, addr & ~((64 << 10) - 1));  // windows wants 64K alignment<br>
-  MmapFixedNoReserve(MemToShadow(addr), size * kShadowMultiplier);<br>
+  MmapFixedNoReserve(MemToShadow(addr), size * kShadowMultiplier, "shadow");<br>
<br>
   // Meta shadow is 2:1, so tread carefully.<br>
   static bool data_mapped = false;<br>
@@ -249,7 +252,7 @@ void MapShadow(uptr addr, uptr size) {<br>
   if (!data_mapped) {<br>
     // First call maps data+bss.<br>
     data_mapped = true;<br>
-    MmapFixedNoReserve(meta_begin, meta_end - meta_begin);<br>
+    MmapFixedNoReserve(meta_begin, meta_end - meta_begin, "meta shadow");<br>
   } else {<br>
     // Mapping continous heap.<br>
     // Windows wants 64K alignment.<br>
@@ -259,19 +262,19 @@ void MapShadow(uptr addr, uptr size) {<br>
       return;<br>
     if (meta_begin < mapped_meta_end)<br>
       meta_begin = mapped_meta_end;<br>
-    MmapFixedNoReserve(meta_begin, meta_end - meta_begin);<br>
+    MmapFixedNoReserve(meta_begin, meta_end - meta_begin, "meta shadow");<br>
     mapped_meta_end = meta_end;<br>
   }<br>
   VPrintf(2, "mapped meta shadow for (%p-%p) at (%p-%p)\n",<br>
       addr, addr+size, meta_begin, meta_end);<br>
 }<br>
<br>
-void MapThreadTrace(uptr addr, uptr size) {<br>
+void MapThreadTrace(uptr addr, uptr size, const char *name) {<br>
   DPrintf("#0: Mapping trace at %p-%p(0x%zx)\n", addr, addr + size, size);<br>
   CHECK_GE(addr, kTraceMemBeg);<br>
   CHECK_LE(addr + size, kTraceMemEnd);<br>
   CHECK_EQ(addr, addr & ~((64 << 10) - 1));  // windows wants 64K alignment<br>
-  uptr addr1 = (uptr)MmapFixedNoReserve(addr, size);<br>
+  uptr addr1 = (uptr)MmapFixedNoReserve(addr, size, name);<br>
   if (addr1 != addr) {<br>
     Printf("FATAL: ThreadSanitizer can not mmap thread trace (%p/%p->%p)\n",<br>
         addr, size, addr1);<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_lib_tsan_rtl_tsan-5Frtl.h-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=njgawxDIW0s-bz13epJ7xIQn_we2KNiRhyL9c_tOL1A&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h Fri May 29 17:31:28 2015<br>
@@ -574,7 +574,7 @@ void ALWAYS_INLINE StatSet(ThreadState *<br>
 }<br>
<br>
 void MapShadow(uptr addr, uptr size);<br>
-void MapThreadTrace(uptr addr, uptr size);<br>
+void MapThreadTrace(uptr addr, uptr size, const char *name);<br>
 void DontNeedShadowFor(uptr addr, uptr size);<br>
 void InitializeShadowMemory();<br>
 void InitializeInterceptors();<br>
<br>
Added: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_test_sanitizer-5Fcommon_TestCases_Posix_decorate-5Fproc-5Fmaps.cc-3Frev-3D238621-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=KYiHkqOpyvVJ214lk_OPwp6mczt-KmE6AWEqmsZ-s9U&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc?rev=238621&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc (added)<br>
+++ compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc Fri May 29 17:31:28 2015<br>
@@ -0,0 +1,60 @@<br>
+// RUN: %clangxx -g %s -o %t<br>
+// RUN: %tool_options=decorate_proc_maps=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-%tool_name<br>
+#include <errno.h><br>
+#include <fcntl.h><br>
+#include <pthread.h><br>
+#include <stdio.h><br>
+#include <sys/stat.h><br>
+#include <sys/types.h><br>
+#include <unistd.h><br>
+<br>
+bool CopyFdToFd(int in_fd, int out_fd) {<br>
+  const size_t kBufSize = 0x10000;<br>
+  static char buf[kBufSize];<br>
+  while (true) {<br>
+    ssize_t got = read(in_fd, buf, kBufSize);<br>
+    if (got > 0) {<br>
+      write(out_fd, buf, got);<br>
+    } else if (got == 0) {<br>
+      break;<br>
+    } else if (errno != EAGAIN || errno != EWOULDBLOCK || errno != EINTR) {<br>
+      fprintf(stderr, "error reading file, errno %d\n", errno);<br>
+      return false;<br>
+    }<br>
+  }<br>
+  return true;<br>
+}<br>
+<br>
+void *ThreadFn(void *arg) {<br>
+  (void)arg;<br>
+  int fd = open("/proc/self/maps", O_RDONLY);<br>
+  bool res = CopyFdToFd(fd, 2);<br>
+  close(fd);<br>
+  return (void *)!res;<br>
+}<br>
+<br>
+int main(void) {<br>
+  pthread_t t;<br>
+  void *res;<br>
+  pthread_create(&t, 0, ThreadFn, 0);<br>
+  pthread_join(t, &res);<br>
+  return (int)(size_t)res;<br>
+}<br>
+<br>
+// CHECK-asan: rw-p {{.*}} [low shadow]<br>
+// CHECK-asan: ---p {{.*}} [shadow gap]<br>
+// CHECK-asan: rw-p {{.*}} [high shadow]<br>
+<br>
+// CHECK-msan: ---p {{.*}} [invalid]<br>
+// CHECK-msan: rw-p {{.*}} [shadow]<br>
+// CHECK-msan: ---p {{.*}} [origin]<br>
+<br>
+// CHECK-tsan: rw-p {{.*}} [shadow]<br>
+// CHECK-tsan: rw-p {{.*}} [meta shadow]<br>
+// CHECK-tsan: rw-p {{.*}} [trace 0]<br>
+// CHECK-tsan: rw-p {{.*}} [trace header 0]<br>
+// CHECK-tsan: rw-p {{.*}} [trace 1]<br>
+// CHECK-tsan: rw-p {{.*}} [trace header 1]<br>
+<br>
+// Nothing interesting with standalone LSan.<br>
+// CHECK-lsan: decorate_proc_maps<br>
<br>
Added: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_test_sanitizer-5Fcommon_TestCases_Posix_lit.local.cfg-3Frev-3D238621-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=cPBKqksgsqwq9C3InqzVLUBvhcjbwBXg9b2qk3aWGvk&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg?rev=238621&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg (added)<br>
+++ compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg Fri May 29 17:31:28 2015<br>
@@ -0,0 +1,9 @@<br>
+def getRoot(config):<br>
+  if not config.parent:<br>
+    return config<br>
+  return getRoot(config.parent)<br>
+<br>
+root = getRoot(config)<br>
+<br>
+if root.host_os in ['Windows']:<br>
+  config.unsupported = True<br>
<br>
Modified: compiler-rt/trunk/test/sanitizer_common/lit.common.cfg<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_compiler-2Drt_trunk_test_sanitizer-5Fcommon_lit.common.cfg-3Frev-3D238621-26r1-3D238620-26r2-3D238621-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=-pUnf1LZcWMi7bm1XRUdGHsXk_eq4VIkIBnNdZtljzU&s=pNUVTdhEmeoDhhxb2j0JfGsAM1W3d2drtl9gpoXXi8o&e=" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/lit.common.cfg?rev=238621&r1=238620&r2=238621&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/sanitizer_common/lit.common.cfg (original)<br>
+++ compiler-rt/trunk/test/sanitizer_common/lit.common.cfg Fri May 29 17:31:28 2015<br>
@@ -30,6 +30,7 @@ def build_invocation(compile_flags):<br>
<br>
 config.substitutions.append( ("%clang ", build_invocation(clang_cflags)) )<br>
 config.substitutions.append( ("%clangxx ", build_invocation(clang_cxxflags)) )<br>
+config.substitutions.append( ("%tool_name", config.tool_name) )<br>
 config.substitutions.append( ("%tool_options", tool_options) )<br>
<br>
 config.suffixes = ['.c', '.cc', '.cpp']<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div>