[compiler-rt] r209815 - [sanitizer] Add coverage_dir flag.
Kostya Serebryany
kcc at google.com
Fri May 30 10:53:49 PDT 2014
please document this flag at
https://code.google.com/p/address-sanitizer/wiki/AsanCoverage
(and also add all coverage-related flags to
https://code.google.com/p/address-sanitizer/wiki/Flags)
On Thu, May 29, 2014 at 6:33 PM, Evgeniy Stepanov <eugeni.stepanov at gmail.com
> wrote:
> Author: eugenis
> Date: Thu May 29 09:33:16 2014
> New Revision: 209815
>
> URL: http://llvm.org/viewvc/llvm-project?rev=209815&view=rev
> Log:
> [sanitizer] Add coverage_dir flag.
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h
> compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc?rev=209815&r1=209814&r2=209815&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
> (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
> Thu May 29 09:33:16 2014
> @@ -91,9 +91,9 @@ class CoverageData {
> static CoverageData coverage_data;
>
> void CoverageData::DirectInit() {
> - InternalScopedString path(64);
> - internal_snprintf((char *)path.data(), path.size(), "%zd.sancov.raw",
> - internal_getpid());
> + InternalScopedString path(1024);
> + internal_snprintf((char *)path.data(), path.size(), "%s/%zd.sancov.raw",
> + common_flags()->coverage_dir, internal_getpid());
> pc_fd = OpenFile(path.data(), true);
> if (internal_iserror(pc_fd)) {
> Report(" Coverage: failed to open %s for writing\n", path.data());
> @@ -221,15 +221,17 @@ static int CovOpenFile(bool packed, cons
> InternalScopedBuffer<char> path(1024);
> if (!packed) {
> CHECK(name);
> - internal_snprintf((char *)path.data(), path.size(), "%s.%zd.sancov",
> - name, internal_getpid());
> + Printf("%s\n", common_flags()->coverage_dir);
> + internal_snprintf((char *)path.data(), path.size(),
> "%s/%s.%zd.sancov",
> + common_flags()->coverage_dir, name,
> internal_getpid());
> } else {
> if (!name)
> - internal_snprintf((char *)path.data(), path.size(),
> "%zd.sancov.packed",
> + internal_snprintf((char *)path.data(), path.size(),
> + "%s/%zd.sancov.packed",
> common_flags()->coverage_dir,
> internal_getpid());
> else
> - internal_snprintf((char *)path.data(), path.size(),
> "%s.sancov.packed",
> - name);
> + internal_snprintf((char *)path.data(), path.size(),
> "%s/%s.sancov.packed",
> + common_flags()->coverage_dir, name);
> }
> uptr fd = OpenFile(path.data(), true);
> if (internal_iserror(fd)) {
> @@ -279,8 +281,9 @@ static void CovDump() {
> }
> } else {
> // One file per module per process.
> - internal_snprintf((char *)path.data(), path.size(),
> "%s.%zd.sancov",
> - module_name, internal_getpid());
> + internal_snprintf((char *)path.data(), path.size(),
> "%s/%s.%zd.sancov",
> + common_flags()->coverage_dir, module_name,
> + internal_getpid());
> int fd = CovOpenFile(false /* packed */, module_name);
> if (fd > 0) {
> internal_write(fd, offsets.data(), offsets.size() *
> sizeof(u32));
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
> URL:
> 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
>
> ==============================================================================
> ---
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
> (original)
> +++
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
> Thu May 29 09:33:16 2014
> @@ -41,9 +41,12 @@ void CovUpdateMapping() {
> if (!common_flags()->coverage || !common_flags()->coverage_direct)
> return;
>
> int err;
> - InternalScopedString tmp_path(64);
> - internal_snprintf((char *)tmp_path.data(), tmp_path.size(),
> - "%zd.sancov.map.tmp", internal_getpid());
> + InternalScopedString tmp_path(64 +
> +
> internal_strlen(common_flags()->coverage_dir));
> + uptr res = internal_snprintf((char *)tmp_path.data(), tmp_path.size(),
> + "%s/%zd.sancov.map.tmp", common_flags()->coverage_dir,
> + internal_getpid());
> + CHECK_LE(res, tmp_path.size());
> uptr map_fd = OpenFile(tmp_path.data(), true);
> if (internal_iserror(map_fd)) {
> Report(" Coverage: failed to open %s for writing\n", tmp_path.data());
> @@ -59,7 +62,7 @@ void CovUpdateMapping() {
>
> InternalScopedString line(4096);
> line.append("%d\n", sizeof(uptr) * 8);
> - uptr res = internal_write(map_fd, line.data(), line.length());
> + res = internal_write(map_fd, line.data(), line.length());
> if (internal_iserror(res, &err)) {
> Printf("sancov.map write failed: %d\n", err);
> Die();
> @@ -84,9 +87,10 @@ void CovUpdateMapping() {
>
> internal_close(map_fd);
>
> - InternalScopedString path(64);
> - internal_snprintf((char *)path.data(), path.size(), "%zd.sancov.map",
> - internal_getpid());
> + InternalScopedString path(64 +
> internal_strlen(common_flags()->coverage_dir));
> + res = internal_snprintf((char *)path.data(), path.size(),
> "%s/%zd.sancov.map",
> + common_flags()->coverage_dir, internal_getpid());
> + CHECK_LE(res, path.size());
> res = internal_rename(tmp_path.data(), path.data());
> if (internal_iserror(res, &err)) {
> Printf("sancov.map rename failed: %d\n", err);
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc?rev=209815&r1=209814&r2=209815&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc Thu May 29
> 09:33:16 2014
> @@ -56,6 +56,7 @@ void SetCommonFlagsDefaults(CommonFlags
> f->intercept_tls_get_addr = false;
> f->coverage = false;
> f->coverage_direct = false;
> + f->coverage_dir = ".";
> f->full_address_space = false;
> }
>
> @@ -132,6 +133,9 @@ void ParseCommonFlagsFromString(CommonFl
> "If set, coverage information will be dumped directly to a
> memory "
> "mapped file. This way data is not lost even if the process
> is "
> "suddenly killed.");
> + ParseFlag(str, &f->coverage_dir, "coverage_dir",
> + "Target directory for coverage dumps. Defaults to the current
> "
> + "directory.");
> ParseFlag(str, &f->full_address_space, "full_address_space",
> "Sanitize complete address space; "
> "by default kernel area on 32-bit platforms will not be
> sanitized");
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h?rev=209815&r1=209814&r2=209815&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h Thu May 29
> 09:33:16 2014
> @@ -55,6 +55,7 @@ struct CommonFlags {
> uptr mmap_limit_mb;
> bool coverage;
> bool coverage_direct;
> + const char *coverage_dir;
> bool full_address_space;
> };
>
>
> Modified: compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc?rev=209815&r1=209814&r2=209815&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc
> (original)
> +++ compiler-rt/trunk/test/asan/TestCases/Linux/coverage-direct.cc Thu May
> 29 09:33:16 2014
> @@ -4,13 +4,13 @@
>
> // RUN: rm -rf %T/coverage-direct
>
> -// RUN: mkdir -p %T/coverage-direct/normal && cd %T/coverage-direct/normal
> -// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=0:verbosity=1 %run %t
> -// RUN: %sancov print *.sancov >out.txt
> -// RUN: cd ../..
> +// RUN: mkdir -p %T/coverage-direct/normal
> +// RUN:
> ASAN_OPTIONS=coverage=1:coverage_direct=0:coverage_dir=%T/coverage-direct/normal:verbosity=1
> %run %t
> +// RUN: %sancov print %T/coverage-direct/normal/*.sancov
> >%T/coverage-direct/normal/out.txt
>
> -// RUN: mkdir -p %T/coverage-direct/direct && cd %T/coverage-direct/direct
> -// RUN: ASAN_OPTIONS=coverage=1:coverage_direct=1:verbosity=1 %run %t
> +// RUN: mkdir -p %T/coverage-direct/direct
> +// RUN:
> ASAN_OPTIONS=coverage=1:coverage_direct=1:coverage_dir=%T/coverage-direct/direct:verbosity=1
> %run %t
> +// RUN: cd %T/coverage-direct/direct
> // RUN: %sancov rawunpack *.sancov.raw
> // RUN: %sancov print *.sancov >out.txt
> // RUN: cd ../..
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140530/55a60078/attachment.html>
More information about the llvm-commits
mailing list