<div dir="ltr">please document this flag at <a href="https://code.google.com/p/address-sanitizer/wiki/AsanCoverage">https://code.google.com/p/address-sanitizer/wiki/AsanCoverage</a><div>(and also add all coverage-related flags to <a href="https://code.google.com/p/address-sanitizer/wiki/Flags">https://code.google.com/p/address-sanitizer/wiki/Flags</a>)</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 29, 2014 at 6:33 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: Thu May 29 09:33:16 2014<br>
New Revision: 209815<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=209815&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=209815&view=rev</a><br>
Log:<br>
[sanitizer] Add coverage_dir flag.<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h<br>
    compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc?rev=209815&r1=209814&r2=209815&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc?rev=209815&r1=209814&r2=209815&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc Thu May 29 09:33:16 2014<br>
@@ -91,9 +91,9 @@ class CoverageData {<br>
 static CoverageData coverage_data;<br>
<br>
 void CoverageData::DirectInit() {<br>
-  InternalScopedString path(64);<br>
-  internal_snprintf((char *)path.data(), path.size(), "%zd.sancov.raw",<br>
-                    internal_getpid());<br>
+  InternalScopedString path(1024);<br>
+  internal_snprintf((char *)path.data(), path.size(), "%s/%zd.sancov.raw",<br>
+                    common_flags()->coverage_dir, internal_getpid());<br>
   pc_fd = OpenFile(path.data(), true);<br>
   if (internal_iserror(pc_fd)) {<br>
     Report(" Coverage: failed to open %s for writing\n", path.data());<br>
@@ -221,15 +221,17 @@ static int CovOpenFile(bool packed, cons<br>
   InternalScopedBuffer<char> path(1024);<br>
   if (!packed) {<br>
     CHECK(name);<br>
-    internal_snprintf((char *)path.data(), path.size(), "%s.%zd.sancov",<br>
-                      name, internal_getpid());<br>
+    Printf("%s\n", common_flags()->coverage_dir);<br>
+    internal_snprintf((char *)path.data(), path.size(), "%s/%s.%zd.sancov",<br>
+                      common_flags()->coverage_dir, name, internal_getpid());<br>
   } else {<br>
     if (!name)<br>
-      internal_snprintf((char *)path.data(), path.size(), "%zd.sancov.packed",<br>
+      internal_snprintf((char *)path.data(), path.size(),<br>
+                        "%s/%zd.sancov.packed", common_flags()->coverage_dir,<br>
                         internal_getpid());<br>
     else<br>
-      internal_snprintf((char *)path.data(), path.size(), "%s.sancov.packed",<br>
-                        name);<br>
+      internal_snprintf((char *)path.data(), path.size(), "%s/%s.sancov.packed",<br>
+                        common_flags()->coverage_dir, name);<br>
   }<br>
   uptr fd = OpenFile(path.data(), true);<br>
   if (internal_iserror(fd)) {<br>
@@ -279,8 +281,9 @@ static void CovDump() {<br>
         }<br>
       } else {<br>
         // One file per module per process.<br>
-        internal_snprintf((char *)path.data(), path.size(), "%s.%zd.sancov",<br>
-                          module_name, internal_getpid());<br>
+        internal_snprintf((char *)path.data(), path.size(), "%s/%s.%zd.sancov",<br>
+                          common_flags()->coverage_dir, module_name,<br>
+                          internal_getpid());<br>
         int fd = CovOpenFile(false /* packed */, module_name);<br>
         if (fd > 0) {<br>
           internal_write(fd, offsets.data(), offsets.size() * sizeof(u32));<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc?rev=209815&r1=209814&r2=209815&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc?rev=209815&r1=209814&r2=209815&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc Thu May 29 09:33:16 2014<br>
@@ -41,9 +41,12 @@ void CovUpdateMapping() {<br>
   if (!common_flags()->coverage || !common_flags()->coverage_direct) return;<br>
<br>
   int err;<br>
-  InternalScopedString tmp_path(64);<br>
-  internal_snprintf((char *)tmp_path.data(), tmp_path.size(),<br>
-                    "%zd.sancov.map.tmp", internal_getpid());<br>
+  InternalScopedString tmp_path(64 +<br>
+                                internal_strlen(common_flags()->coverage_dir));<br>
+  uptr res = internal_snprintf((char *)tmp_path.data(), tmp_path.size(),<br>
+                    "%s/%zd.sancov.map.tmp", common_flags()->coverage_dir,<br>
+                    internal_getpid());<br>
+  CHECK_LE(res, tmp_path.size());<br>
   uptr map_fd = OpenFile(tmp_path.data(), true);<br>
   if (internal_iserror(map_fd)) {<br>
     Report(" Coverage: failed to open %s for writing\n", tmp_path.data());<br>
@@ -59,7 +62,7 @@ void CovUpdateMapping() {<br>
<br>
   InternalScopedString line(4096);<br>
   line.append("%d\n", sizeof(uptr) * 8);<br>
-  uptr res = internal_write(map_fd, line.data(), line.length());<br>
+  res = internal_write(map_fd, line.data(), line.length());<br>
   if (internal_iserror(res, &err)) {<br>
     Printf("sancov.map write failed: %d\n", err);<br>
     Die();<br>
@@ -84,9 +87,10 @@ void CovUpdateMapping() {<br>
<br>
   internal_close(map_fd);<br>
<br>
-  InternalScopedString path(64);<br>
-  internal_snprintf((char *)path.data(), path.size(), "%zd.sancov.map",<br>
-                    internal_getpid());<br>
+  InternalScopedString path(64 + internal_strlen(common_flags()->coverage_dir));<br>
+  res = internal_snprintf((char *)path.data(), path.size(), "%s/%zd.sancov.map",<br>
+                    common_flags()->coverage_dir, internal_getpid());<br>
+  CHECK_LE(res, path.size());<br>
   res = internal_rename(tmp_path.data(), path.data());<br>
   if (internal_iserror(res, &err)) {<br>
     Printf("sancov.map rename failed: %d\n", err);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc?rev=209815&r1=209814&r2=209815&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc?rev=209815&r1=209814&r2=209815&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc Thu May 29 09:33:16 2014<br>
@@ -56,6 +56,7 @@ void SetCommonFlagsDefaults(CommonFlags<br>
   f->intercept_tls_get_addr = false;<br>
   f->coverage = false;<br>
   f->coverage_direct = false;<br>
+  f->coverage_dir = ".";<br>
   f->full_address_space = false;<br>
 }<br>
<br>
@@ -132,6 +133,9 @@ void ParseCommonFlagsFromString(CommonFl<br>
             "If set, coverage information will be dumped directly to a memory "<br>
             "mapped file. This way data is not lost even if the process is "<br>
             "suddenly killed.");<br>
+  ParseFlag(str, &f->coverage_dir, "coverage_dir",<br>
+            "Target directory for coverage dumps. Defaults to the current "<br>
+            "directory.");<br>
   ParseFlag(str, &f->full_address_space, "full_address_space",<br>
             "Sanitize complete address space; "<br>
             "by default kernel area on 32-bit platforms will not be sanitized");<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h?rev=209815&r1=209814&r2=209815&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h?rev=209815&r1=209814&r2=209815&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h Thu May 29 09:33:16 2014<br>
@@ -55,6 +55,7 @@ struct CommonFlags {<br>
   uptr mmap_limit_mb;<br>
   bool coverage;<br>
   bool coverage_direct;<br>
+  const char *coverage_dir;<br>
   bool full_address_space;<br>
 };<br>
<br>
<br>
Modified: compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc?rev=209815&r1=209814&r2=209815&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc?rev=209815&r1=209814&r2=209815&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc (original)<br>
+++ compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc Thu May 29 09:33:16 2014<br>
@@ -4,13 +4,13 @@<br>
<br>
 // RUN: rm -rf %T/coverage-direct<br>
<br>
-// RUN: mkdir -p %T/coverage-direct/normal && cd %T/coverage-direct/normal<br>
-// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=0:verbosity=1 %run %t<br>
-// RUN: %sancov print *.sancov >out.txt<br>
-// RUN: cd ../..<br>
+// RUN: mkdir -p %T/coverage-direct/normal<br>
+// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=0:coverage_dir=%T/coverage-direct/normal:verbosity=1 %run %t<br>
+// RUN: %sancov print %T/coverage-direct/normal/*.sancov >%T/coverage-direct/normal/out.txt<br>
<br>
-// RUN: mkdir -p %T/coverage-direct/direct && cd %T/coverage-direct/direct<br>
-// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=1:verbosity=1 %run %t<br>
+// RUN: mkdir -p %T/coverage-direct/direct<br>
+// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=1:coverage_dir=%T/coverage-direct/direct:verbosity=1 %run %t<br>
+// RUN: cd %T/coverage-direct/direct<br>
 // RUN: %sancov rawunpack *.sancov.raw<br>
 // RUN: %sancov print *.sancov >out.txt<br>
 // RUN: cd ../..<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></div>