[compiler-rt] r209815 - [sanitizer] Add coverage_dir flag.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Mon Jun 2 02:14:59 PDT 2014


done

On Fri, May 30, 2014 at 9:53 PM, Kostya Serebryany <kcc at google.com> wrote:
> 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
>
>



More information about the llvm-commits mailing list