<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>