[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