[Sanitizer] Hoist the code parsing suppressions file into sanitizer_common.
authorAlexey Samsonov <vonosmas@gmail.com>
Wed, 30 Jul 2014 21:53:30 +0000 (21:53 +0000)
committerAlexey Samsonov <vonosmas@gmail.com>
Wed, 30 Jul 2014 21:53:30 +0000 (21:53 +0000)
Remove corresponding bits from LSan and TSan runtimes. No functionality change.

llvm-svn: 214344

compiler-rt/lib/lsan/lsan_common.cc
compiler-rt/lib/sanitizer_common/sanitizer_suppressions.cc
compiler-rt/lib/tsan/rtl/tsan_suppressions.cc

index 35a6364..39c08a7 100644 (file)
@@ -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());
 }
index aa04ec6..b564b42 100644 (file)
@@ -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,
index 3861854..82a8264 100644 (file)
@@ -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<char> 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
 }