From 89b17bb7bc9d1c9df673ed5b9a6b6a5e15e4b3fd Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Wed, 30 Jul 2014 21:53:30 +0000 Subject: [PATCH] [Sanitizer] Hoist the code parsing suppressions file into sanitizer_common. Remove corresponding bits from LSan and TSan runtimes. No functionality change. llvm-svn: 214344 --- compiler-rt/lib/lsan/lsan_common.cc | 10 ------ .../lib/sanitizer_common/sanitizer_suppressions.cc | 12 +++++++ compiler-rt/lib/tsan/rtl/tsan_suppressions.cc | 37 +--------------------- 3 files changed, 13 insertions(+), 46 deletions(-) diff --git a/compiler-rt/lib/lsan/lsan_common.cc b/compiler-rt/lib/lsan/lsan_common.cc index 35a6364..39c08a7 100644 --- a/compiler-rt/lib/lsan/lsan_common.cc +++ b/compiler-rt/lib/lsan/lsan_common.cc @@ -85,16 +85,6 @@ static void InitializeFlags() { void InitializeSuppressions() { SuppressionContext::Init(); - char *suppressions_from_file; - uptr buffer_size; - if (ReadFileToBuffer(common_flags()->suppressions, &suppressions_from_file, - &buffer_size, 1 << 26 /* max_len */)) - SuppressionContext::Get()->Parse(suppressions_from_file); - if (common_flags()->suppressions[0] && !buffer_size) { - Printf("LeakSanitizer: failed to read suppressions file '%s'\n", - common_flags()->suppressions); - Die(); - } if (&__lsan_default_suppressions) SuppressionContext::Get()->Parse(__lsan_default_suppressions()); } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_suppressions.cc b/compiler-rt/lib/sanitizer_common/sanitizer_suppressions.cc index aa04ec6..b564b42 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_suppressions.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_suppressions.cc @@ -15,6 +15,7 @@ #include "sanitizer_allocator_internal.h" #include "sanitizer_common.h" +#include "sanitizer_flags.h" #include "sanitizer_libc.h" #include "sanitizer_placement_new.h" @@ -77,6 +78,17 @@ SuppressionContext *SuppressionContext::Get() { void SuppressionContext::Init() { CHECK(!suppression_ctx); suppression_ctx = new(placeholder) SuppressionContext; + char *suppressions_from_file; + uptr buffer_size; + uptr contents_size = + ReadFileToBuffer(common_flags()->suppressions, &suppressions_from_file, + &buffer_size, 1 << 26 /* max_len */); + if (common_flags()->suppressions[0] && contents_size == 0) { + Printf("%s: failed to read suppressions file '%s'\n", SanitizerToolName, + common_flags()->suppressions); + Die(); + } + suppression_ctx->Parse(suppressions_from_file); } bool SuppressionContext::Match(const char *str, SuppressionType type, diff --git a/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc b/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc index 3861854..82a8264 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc @@ -41,45 +41,10 @@ extern "C" const char *WEAK __tsan_default_suppressions() { namespace __tsan { -static char *ReadFile(const char *filename) { - if (filename == 0 || filename[0] == 0) - return 0; - InternalScopedBuffer tmp(4*1024); - if (filename[0] == '/' || GetPwd() == 0) - internal_snprintf(tmp.data(), tmp.size(), "%s", filename); - else - internal_snprintf(tmp.data(), tmp.size(), "%s/%s", GetPwd(), filename); - uptr openrv = OpenFile(tmp.data(), false); - if (internal_iserror(openrv)) { - Printf("ThreadSanitizer: failed to open suppressions file '%s'\n", - tmp.data()); - Die(); - } - fd_t fd = openrv; - const uptr fsize = internal_filesize(fd); - if (fsize == (uptr)-1) { - Printf("ThreadSanitizer: failed to stat suppressions file '%s'\n", - tmp.data()); - Die(); - } - char *buf = (char*)internal_alloc(MBlockSuppression, fsize + 1); - if (fsize != internal_read(fd, buf, fsize)) { - Printf("ThreadSanitizer: failed to read suppressions file '%s'\n", - tmp.data()); - Die(); - } - internal_close(fd); - buf[fsize] = 0; - return buf; -} - void InitializeSuppressions() { SuppressionContext::Init(); - const char *supp = ReadFile(flags()->suppressions); - SuppressionContext::Get()->Parse(supp); #ifndef TSAN_GO - supp = __tsan_default_suppressions(); - SuppressionContext::Get()->Parse(supp); + SuppressionContext::Get()->Parse(__tsan_default_suppressions()); SuppressionContext::Get()->Parse(std_suppressions); #endif } -- 2.7.4