forked from OSchip/llvm-project
[Sanitizer] Drop LibIgnore dependency on SuppressionContext. NFC.
Let each LibIgnore user (for now it's only TSan) manually go through SuppressionContext and pass ignored library templates to LibIgnore. llvm-svn: 229924
This commit is contained in:
parent
d2c20c49f8
commit
1ec3c5bc99
|
@ -19,25 +19,19 @@ namespace __sanitizer {
|
|||
LibIgnore::LibIgnore(LinkerInitialized) {
|
||||
}
|
||||
|
||||
void LibIgnore::Init(const SuppressionContext &supp) {
|
||||
void LibIgnore::AddIgnoredLibrary(const char *name_templ) {
|
||||
BlockingMutexLock lock(&mutex_);
|
||||
CHECK_EQ(count_, 0);
|
||||
const uptr n = supp.SuppressionCount();
|
||||
for (uptr i = 0; i < n; i++) {
|
||||
const Suppression *s = supp.SuppressionAt(i);
|
||||
if (s->type != SuppressionLib)
|
||||
continue;
|
||||
if (count_ >= kMaxLibs) {
|
||||
Report("%s: too many called_from_lib suppressions (max: %d)\n",
|
||||
SanitizerToolName, kMaxLibs);
|
||||
Report("%s: too many ignored libraries (max: %d)\n", SanitizerToolName,
|
||||
kMaxLibs);
|
||||
Die();
|
||||
}
|
||||
Lib *lib = &libs_[count_++];
|
||||
lib->templ = internal_strdup(s->templ);
|
||||
lib->name = 0;
|
||||
lib->templ = internal_strdup(name_templ);
|
||||
lib->name = nullptr;
|
||||
lib->real_name = nullptr;
|
||||
lib->loaded = false;
|
||||
}
|
||||
}
|
||||
|
||||
void LibIgnore::OnLibraryLoaded(const char *name) {
|
||||
BlockingMutexLock lock(&mutex_);
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// LibIgnore allows to ignore all interceptors called from a particular set
|
||||
// of dynamic libraries. LibIgnore remembers all "called_from_lib" suppressions
|
||||
// from the provided SuppressionContext; finds code ranges for the libraries;
|
||||
// of dynamic libraries. LibIgnore can be initialized with several templates
|
||||
// of names of libraries to be ignored. It finds code ranges for the libraries;
|
||||
// and checks whether the provided PC value belongs to the code ranges.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -19,7 +19,6 @@
|
|||
|
||||
#include "sanitizer_internal_defs.h"
|
||||
#include "sanitizer_common.h"
|
||||
#include "sanitizer_suppressions.h"
|
||||
#include "sanitizer_atomic.h"
|
||||
#include "sanitizer_mutex.h"
|
||||
|
||||
|
@ -29,8 +28,8 @@ class LibIgnore {
|
|||
public:
|
||||
explicit LibIgnore(LinkerInitialized);
|
||||
|
||||
// Fetches all "called_from_lib" suppressions from the SuppressionContext.
|
||||
void Init(const SuppressionContext &supp);
|
||||
// Must be called during initialization.
|
||||
void AddIgnoredLibrary(const char *name_templ);
|
||||
|
||||
// Must be called after a new dynamic library is loaded.
|
||||
void OnLibraryLoaded(const char *name);
|
||||
|
|
|
@ -157,7 +157,13 @@ static LibIgnore *libignore() {
|
|||
}
|
||||
|
||||
void InitializeLibIgnore() {
|
||||
libignore()->Init(*SuppressionContext::Get());
|
||||
const SuppressionContext &supp = *SuppressionContext::Get();
|
||||
const uptr n = supp.SuppressionCount();
|
||||
for (uptr i = 0; i < n; i++) {
|
||||
const Suppression *s = supp.SuppressionAt(i);
|
||||
if (s->type == SuppressionLib)
|
||||
libignore()->AddIgnoredLibrary(s->templ);
|
||||
}
|
||||
libignore()->OnLibraryLoaded(0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue