<div dir="ltr">Did you forget to "svn add" the new test case?</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Mar 27, 2014 at 11:36 AM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kcc<br>
Date: Thu Mar 27 02:36:26 2014<br>
New Revision: 204897<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=204897&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=204897&view=rev</a><br>
Log:<br>
[asan] Do not sanitize kernel area on 32-bit targets, patch by Yuri Gribov<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/asan_mapping.h<br>
    compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc<br>
    compiler-rt/trunk/test/asan/lit.cfg<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_mapping.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mapping.h?rev=204897&r1=204896&r2=204897&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mapping.h?rev=204897&r1=204896&r2=204897&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_mapping.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_mapping.h Thu Mar 27 02:36:26 2014<br>
@@ -43,13 +43,22 @@<br>
 // || `[0x00007fff8000, 0x00008fff6fff]` || LowShadow  ||<br>
 // || `[0x000000000000, 0x00007fff7fff]` || LowMem     ||<br>
 //<br>
-// Default Linux/i386 mapping:<br>
+// Default Linux/i386 mapping on x86_64 machine:<br>
 // || `[0x40000000, 0xffffffff]` || HighMem    ||<br>
 // || `[0x28000000, 0x3fffffff]` || HighShadow ||<br>
 // || `[0x24000000, 0x27ffffff]` || ShadowGap  ||<br>
 // || `[0x20000000, 0x23ffffff]` || LowShadow  ||<br>
 // || `[0x00000000, 0x1fffffff]` || LowMem     ||<br>
 //<br>
+// Default Linux/i386 mapping on i386 machine<br>
+// (addresses starting with 0xc0000000 are reserved<br>
+// for kernel and thus not sanitized):<br>
+// || `[0x38000000, 0xbfffffff]` || HighMem    ||<br>
+// || `[0x27000000, 0x37ffffff]` || HighShadow ||<br>
+// || `[0x24000000, 0x26ffffff]` || ShadowGap  ||<br>
+// || `[0x20000000, 0x23ffffff]` || LowShadow  ||<br>
+// || `[0x00000000, 0x1fffffff]` || LowMem     ||<br>
+//<br>
 // Default Linux/MIPS mapping:<br>
 // || `[0x2aaa8000, 0xffffffff]` || HighMem    ||<br>
 // || `[0x0fffd000, 0x2aaa7fff]` || HighShadow ||<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=204897&r1=204896&r2=204897&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=204897&r1=204896&r2=204897&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_rtl.cc Thu Mar 27 02:36:26 2014<br>
@@ -565,6 +565,7 @@ static void AsanInitInternal() {<br>
     ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd);<br>
     // protect the gap.<br>
     ProtectGap(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);<br>
+    CHECK_EQ(kShadowGapEnd, kHighShadowBeg - 1);<br>
   } else if (kMidMemBeg &&<br>
       MemoryRangeIsAvailable(shadow_start, kMidMemBeg - 1) &&<br>
       MemoryRangeIsAvailable(kMidMemEnd + 1, kHighShadowEnd)) {<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=204897&r1=204896&r2=204897&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=204897&r1=204896&r2=204897&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 Thu Mar 27 02:36:26 2014<br>
@@ -22,6 +22,10 @@<br>
<br>
 #include <sys/mman.h><br>
<br>
+#if SANITIZER_LINUX<br>
+#include <sys/utsname.h><br>
+#endif<br>
+<br>
 namespace __sanitizer {<br>
<br>
 // ------------- sanitizer_common.h<br>
@@ -29,6 +33,21 @@ uptr GetMmapGranularity() {<br>
   return GetPageSize();<br>
 }<br>
<br>
+#if SANITIZER_WORDSIZE == 32<br>
+// Take care of unusable kernel area in top gigabyte<br>
+static uptr GetKernelStartAddress() {<br>
+#if SANITIZER_LINUX<br>
+  // 64-bit Linux provides 32-bit apps with full address space<br>
+  struct utsname uname_info;<br>
+  return 0 == uname(&uname_info) && !internal_strstr(uname_info.machine, "64")<br>
+    ? 1ULL << 30<br>
+    : 0;<br>
+#else<br>
+  return 0;<br>
+#endif  // SANITIZER_LINUX<br>
+}<br>
+#endif  // SANITIZER_WORDSIZE == 32<br>
+<br>
 uptr GetMaxVirtualAddress() {<br>
 #if SANITIZER_WORDSIZE == 64<br>
 # if defined(__powerpc64__)<br>
@@ -44,8 +63,10 @@ uptr GetMaxVirtualAddress() {<br>
   return (1ULL << 47) - 1;  // 0x00007fffffffffffUL;<br>
 # endif<br>
 #else  // SANITIZER_WORDSIZE == 32<br>
-  // FIXME: We can probably lower this on Android?<br>
-  return (1ULL << 32) - 1;  // 0xffffffff;<br>
+  uptr res = (1ULL << 32) - 1;  // 0xffffffff;<br>
+  res -= GetKernelStartAddress();<br>
+  CHECK_LT(reinterpret_cast<uptr>(&res), res);<br>
+  return res;<br>
 #endif  // SANITIZER_WORDSIZE<br>
 }<br>
<br>
<br>
Modified: compiler-rt/trunk/test/asan/lit.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/lit.cfg?rev=204897&r1=204896&r2=204897&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/lit.cfg?rev=204897&r1=204896&r2=204897&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/test/asan/lit.cfg (original)<br>
+++ compiler-rt/trunk/test/asan/lit.cfg Thu Mar 27 02:36:26 2014<br>
@@ -60,8 +60,15 @@ if not os.path.exists(asan_symbolize):<br>
 python_exec = get_required_attr(config, "python_executable")<br>
 config.substitutions.append( ("%asan_symbolize", python_exec + " " + asan_symbolize + " ") )<br>
<br>
+# Determine kernel bitness<br>
+if config.host_arch.find('64') != -1 and config.android != "TRUE":<br>
+  kernel_bits = '64'<br>
+else:<br>
+  kernel_bits = '32'<br>
+<br>
 # Define CHECK-%os to check for OS-dependent output.<br>
 config.substitutions.append( ('CHECK-%os', ("CHECK-" + config.host_os)))<br>
+config.substitutions.append( ('CHECK-%kernel_bits', ("CHECK-kernel-" + kernel_bits + "-bits")))<br>
<br>
 config.available_features.add("asan-" + config.bits + "-bits")<br>
<br>
<br>
<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>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div>