[compiler-rt] r194779 - Speculatively revert asan coverage changes 194702-194704.

Kostya Serebryany kcc at google.com
Thu Nov 14 21:18:03 PST 2013


Do you have any logs or other information to help me understand what's wrong?
The option is off by default in asan, which is itself off by default
-- how it could possibly affect LTO builds?


On Fri, Nov 15, 2013 at 7:26 AM, Bob Wilson <bob.wilson at apple.com> wrote:
> Author: bwilson
> Date: Thu Nov 14 21:26:28 2013
> New Revision: 194779
>
> URL: http://llvm.org/viewvc/llvm-project?rev=194779&view=rev
> Log:
> Speculatively revert asan coverage changes 194702-194704.
>
> Apple's bootstrapped LTO builds have been failing, and these changes (along
> with llvm 194701) are the only things on the blamelist.  I will either reapply
> these changes or help debug the problem, depending on whether this fixes the
> buildbots.
>
> Removed:
>     compiler-rt/trunk/lib/asan/lit_tests/TestCases/Linux/coverage.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage.cc
> Modified:
>     compiler-rt/trunk/include/sanitizer/common_interface_defs.h
>     compiler-rt/trunk/lib/asan/asan_flags.h
>     compiler-rt/trunk/lib/asan/asan_rtl.cc
>     compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
>     compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc
>
> Modified: compiler-rt/trunk/include/sanitizer/common_interface_defs.h
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/common_interface_defs.h?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/include/sanitizer/common_interface_defs.h (original)
> +++ compiler-rt/trunk/include/sanitizer/common_interface_defs.h Thu Nov 14 21:26:28 2013
> @@ -47,9 +47,6 @@ extern "C" {
>    void __sanitizer_unaligned_store32(void *p, uint32_t x);
>    void __sanitizer_unaligned_store64(void *p, uint64_t x);
>
> -  // Record and dump coverage info.
> -  void __sanitizer_cov_dump();
> -
>  #ifdef __cplusplus
>  }  // extern "C"
>  #endif
>
> Modified: compiler-rt/trunk/lib/asan/asan_flags.h
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_flags.h?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_flags.h (original)
> +++ compiler-rt/trunk/lib/asan/asan_flags.h Thu Nov 14 21:26:28 2013
> @@ -83,9 +83,6 @@ struct Flags {
>    bool print_legend;
>    // If set, prints ASan exit stats even after program terminates successfully.
>    bool atexit;
> -  // If set, coverage information will be dumped at shutdown time if the
> -  // appropriate instrumentation was enabled.
> -  bool coverage;
>    // By default, disable core dumper on 64-bit - it makes little sense
>    // to dump 16T+ core.
>    bool disable_core;
>
> Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_rtl.cc Thu Nov 14 21:26:28 2013
> @@ -120,7 +120,6 @@ static void ParseFlagsFromString(Flags *
>    ParseFlag(str, &f->print_stats, "print_stats");
>    ParseFlag(str, &f->print_legend, "print_legend");
>    ParseFlag(str, &f->atexit, "atexit");
> -  ParseFlag(str, &f->coverage, "coverage");
>    ParseFlag(str, &f->disable_core, "disable_core");
>    ParseFlag(str, &f->allow_reexec, "allow_reexec");
>    ParseFlag(str, &f->print_full_thread_history, "print_full_thread_history");
> @@ -162,7 +161,6 @@ void InitializeFlags(Flags *f, const cha
>    f->print_stats = false;
>    f->print_legend = true;
>    f->atexit = false;
> -  f->coverage = false;
>    f->disable_core = (SANITIZER_WORDSIZE == 64);
>    f->allow_reexec = true;
>    f->print_full_thread_history = true;
> @@ -543,9 +541,6 @@ void __asan_init() {
>    if (flags()->atexit)
>      Atexit(asan_atexit);
>
> -  if (flags()->coverage)
> -    Atexit(__sanitizer_cov_dump);
> -
>    // interceptors
>    InitTlsSize();
>
>
> Removed: compiler-rt/trunk/lib/asan/lit_tests/TestCases/Linux/coverage.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/lit_tests/TestCases/Linux/coverage.cc?rev=194778&view=auto
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/lit_tests/TestCases/Linux/coverage.cc (original)
> +++ compiler-rt/trunk/lib/asan/lit_tests/TestCases/Linux/coverage.cc (removed)
> @@ -1,45 +0,0 @@
> -// RUN: %clangxx_asan -mllvm -asan-coverage=1 -DSHARED %s -shared -o %t.so -fPIC
> -// RUN: %clangxx_asan -mllvm -asan-coverage=1 %s   -o %t -Wl,-R. %t.so
> -// RUN: export ASAN_OPTIONS=coverage=1:verbosity=1
> -// RUN: %t 2>&1         | FileCheck %s --check-prefix=CHECK-main
> -// RUN: %t foo 2>&1     | FileCheck %s --check-prefix=CHECK-foo
> -// RUN: %t bar 2>&1     | FileCheck %s --check-prefix=CHECK-bar
> -// RUN: %t foo bar 2>&1 | FileCheck %s --check-prefix=CHECK-foo-bar
> -
> -#include <stdio.h>
> -#include <string.h>
> -#include <unistd.h>
> -
> -#ifdef SHARED
> -void bar() { printf("bar\n"); }
> -#else
> -__attribute__((noinline))
> -void foo() { printf("foo\n"); }
> -extern void bar();
> -
> -int main(int argc, char **argv) {
> -  fprintf(stderr, "PID: %d\n", getpid());
> -  for (int i = 1; i < argc; i++) {
> -    if (!strcmp(argv[i], "foo"))
> -      foo();
> -    if (!strcmp(argv[i], "bar"))
> -      bar();
> -  }
> -}
> -#endif
> -
> -// CHECK-main: PID: [[PID:[0-9]+]]
> -// CHECK-main: [[PID]].sancov: 1 PCs written
> -// CHECK-main-NOT: .so.[[PID]]
> -//
> -// CHECK-foo: PID: [[PID:[0-9]+]]
> -// CHECK-foo: [[PID]].sancov: 2 PCs written
> -// CHECK-foo-NOT: .so.[[PID]]
> -//
> -// CHECK-bar: PID: [[PID:[0-9]+]]
> -// CHECK-bar: [[PID]].sancov: 1 PCs written
> -// CHECK-bar: .so.[[PID]].sancov: 1 PCs written
> -//
> -// CHECK-foo-bar: PID: [[PID:[0-9]+]]
> -// CHECK-foo-bar: [[PID]].sancov: 2 PCs written
> -// CHECK-foo-bar: so.[[PID]].sancov: 1 PCs written
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt Thu Nov 14 21:26:28 2013
> @@ -4,7 +4,6 @@
>  set(SANITIZER_SOURCES
>    sanitizer_allocator.cc
>    sanitizer_common.cc
> -  sanitizer_coverage.cc
>    sanitizer_flags.cc
>    sanitizer_libc.cc
>    sanitizer_libignore.cc
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Thu Nov 14 21:26:28 2013
> @@ -226,17 +226,6 @@ bool LoadedModule::containsAddress(uptr
>    return false;
>  }
>
> -char *StripModuleName(const char *module) {
> -  if (module == 0)
> -    return 0;
> -  const char *short_module_name = internal_strrchr(module, '/');
> -  if (short_module_name)
> -    short_module_name += 1;
> -  else
> -    short_module_name = module;
> -  return internal_strdup(short_module_name);
> -}
> -
>  }  // namespace __sanitizer
>
>  using namespace __sanitizer;  // NOLINT
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Thu Nov 14 21:26:28 2013
> @@ -180,9 +180,6 @@ void SleepForMillis(int millis);
>  u64 NanoTime();
>  int Atexit(void (*function)(void));
>  void SortArray(uptr *array, uptr size);
> -// Strip the directories from the module name, return a new string allocated
> -// with internal_strdup.
> -char *StripModuleName(const char *module);
>
>  // Exit
>  void NORETURN Abort();
> @@ -362,8 +359,6 @@ class InternalMmapVector {
>      return capacity_;
>    }
>
> -  void clear() { size_ = 0; }
> -
>   private:
>    void Resize(uptr new_capacity) {
>      CHECK_GT(new_capacity, 0);
>
> Removed: compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage.cc?rev=194778&view=auto
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage.cc (removed)
> @@ -1,113 +0,0 @@
> -//===-- sanitizer_coverage.cc ---------------------------------------------===//
> -//
> -//                     The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
> -//===----------------------------------------------------------------------===//
> -//
> -// Sanitizer Coverage.
> -// This file implements run-time support for a poor man's coverage tool.
> -//
> -// Compiler instrumentation:
> -// For every function F the compiler injects the following code:
> -// if (*Guard) {
> -//    __sanitizer_cov(&F);
> -//    *Guard = 1;
> -// }
> -// It's fine to call __sanitizer_cov more than once for a given function.
> -//
> -// Run-time:
> -//  - __sanitizer_cov(pc): record that we've executed a given PC.
> -//  - __sanitizer_cov_dump: dump the coverage data to disk.
> -//  For every module of the current process that has coverage data
> -//  this will create a file module_name.PID.sancov. The file format is simple:
> -//  it's just a sorted sequence of 4-byte offsets in the module.
> -//
> -// Eventually, this coverage implementation should be obsoleted by a more
> -// powerful general purpose Clang/LLVM coverage instrumentation.
> -// Consider this implementation as prototype.
> -//
> -// FIXME: support (or at least test with) dlclose.
> -//===----------------------------------------------------------------------===//
> -
> -#include "sanitizer_allocator_internal.h"
> -#include "sanitizer_common.h"
> -#include "sanitizer_libc.h"
> -#include "sanitizer_mutex.h"
> -#include "sanitizer_procmaps.h"
> -#include "sanitizer_flags.h"
> -
> -struct CovData {
> -  BlockingMutex mu;
> -  InternalMmapVector<uptr> v;
> -};
> -
> -static uptr cov_data_placeholder[sizeof(CovData) / sizeof(uptr)];
> -COMPILER_CHECK(sizeof(cov_data_placeholder) >= sizeof(CovData));
> -static CovData *cov_data = reinterpret_cast<CovData*>(cov_data_placeholder);
> -
> -namespace __sanitizer {
> -
> -// Simply add the pc into the vector under lock. If the function is called more
> -// than once for a given PC it will be inserted multiple times, which is fine.
> -static void CovAdd(uptr pc) {
> -  BlockingMutexLock lock(&cov_data->mu);
> -  cov_data->v.push_back(pc);
> -}
> -
> -static inline bool CompareLess(const uptr &a, const uptr &b) {
> -  return a < b;
> -}
> -
> -// Dump the coverage on disk.
> -void CovDump() {
> -#if !SANITIZER_WINDOWS
> -  BlockingMutexLock lock(&cov_data->mu);
> -  InternalMmapVector<uptr> &v = cov_data->v;
> -  InternalSort(&v, v.size(), CompareLess);
> -  InternalMmapVector<u32> offsets(v.size());
> -  const uptr *vb = v.data();
> -  const uptr *ve = vb + v.size();
> -  MemoryMappingLayout proc_maps(/*cache_enabled*/false);
> -  uptr mb, me, off, prot;
> -  InternalScopedBuffer<char> module(4096);
> -  InternalScopedBuffer<char> path(4096 * 2);
> -  for (int i = 0;
> -       proc_maps.Next(&mb, &me, &off, module.data(), module.size(), &prot);
> -       i++) {
> -    if ((prot & MemoryMappingLayout::kProtectionExecute) == 0)
> -      continue;
> -    if (vb >= ve) break;
> -    if (mb <= *vb && *vb < me) {
> -      offsets.clear();
> -      const uptr *old_vb = vb;
> -      CHECK_LE(off, *vb);
> -      for (; vb < ve && *vb < me; vb++) {
> -        uptr diff = *vb - (i ? mb : 0) + off;
> -        CHECK_LE(diff, 0xffffffffU);
> -        offsets.push_back(static_cast<u32>(diff));
> -      }
> -      char *module_name = StripModuleName(module.data());
> -      internal_snprintf((char *)path.data(), path.size(), "%s.%zd.sancov",
> -                        module_name, internal_getpid());
> -      InternalFree(module_name);
> -      uptr fd = OpenFile(path.data(), true);
> -      internal_write(fd, offsets.data(), offsets.size() * sizeof(u32));
> -      internal_close(fd);
> -      if (common_flags()->verbosity)
> -        Report(" CovDump: %s: %zd PCs written\n", path.data(), vb - old_vb);
> -    }
> -  }
> -#endif  // !SANITIZER_WINDOWS
> -}
> -
> -}  // namespace __sanitizer
> -
> -extern "C" {
> -SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(void *pc) {
> -  CovAdd(reinterpret_cast<uptr>(pc));
> -}
> -SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump() { CovDump(); }
> -}  // extern "C"
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h Thu Nov 14 21:26:28 2013
> @@ -110,9 +110,6 @@ extern "C" {
>    // the error message. This function can be overridden by the client.
>    SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
>    void __sanitizer_report_error_summary(const char *error_summary);
> -
> -  SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump();
> -  SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(void *pc);
>  }  // extern "C"
>
>
>
> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc?rev=194779&r1=194778&r2=194779&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc (original)
> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize.cc Thu Nov 14 21:26:28 2013
> @@ -42,6 +42,18 @@ ReportStack *NewReportStackEntry(uptr ad
>    return ent;
>  }
>
> +// Strip module path to make output shorter.
> +static char *StripModuleName(const char *module) {
> +  if (module == 0)
> +    return 0;
> +  const char *short_module_name = internal_strrchr(module, '/');
> +  if (short_module_name)
> +    short_module_name += 1;
> +  else
> +    short_module_name = module;
> +  return internal_strdup(short_module_name);
> +}
> +
>  static ReportStack *NewReportStackEntry(const AddressInfo &info) {
>    ReportStack *ent = NewReportStackEntry(info.address);
>    ent->module = StripModuleName(info.module);
>
>
> _______________________________________________
> 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