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) {
|
LibIgnore::LibIgnore(LinkerInitialized) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LibIgnore::Init(const SuppressionContext &supp) {
|
void LibIgnore::AddIgnoredLibrary(const char *name_templ) {
|
||||||
BlockingMutexLock lock(&mutex_);
|
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) {
|
if (count_ >= kMaxLibs) {
|
||||||
Report("%s: too many called_from_lib suppressions (max: %d)\n",
|
Report("%s: too many ignored libraries (max: %d)\n", SanitizerToolName,
|
||||||
SanitizerToolName, kMaxLibs);
|
kMaxLibs);
|
||||||
Die();
|
Die();
|
||||||
}
|
}
|
||||||
Lib *lib = &libs_[count_++];
|
Lib *lib = &libs_[count_++];
|
||||||
lib->templ = internal_strdup(s->templ);
|
lib->templ = internal_strdup(name_templ);
|
||||||
lib->name = 0;
|
lib->name = nullptr;
|
||||||
|
lib->real_name = nullptr;
|
||||||
lib->loaded = false;
|
lib->loaded = false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void LibIgnore::OnLibraryLoaded(const char *name) {
|
void LibIgnore::OnLibraryLoaded(const char *name) {
|
||||||
BlockingMutexLock lock(&mutex_);
|
BlockingMutexLock lock(&mutex_);
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// LibIgnore allows to ignore all interceptors called from a particular set
|
// LibIgnore allows to ignore all interceptors called from a particular set
|
||||||
// of dynamic libraries. LibIgnore remembers all "called_from_lib" suppressions
|
// of dynamic libraries. LibIgnore can be initialized with several templates
|
||||||
// from the provided SuppressionContext; finds code ranges for the libraries;
|
// 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.
|
// and checks whether the provided PC value belongs to the code ranges.
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -19,7 +19,6 @@
|
||||||
|
|
||||||
#include "sanitizer_internal_defs.h"
|
#include "sanitizer_internal_defs.h"
|
||||||
#include "sanitizer_common.h"
|
#include "sanitizer_common.h"
|
||||||
#include "sanitizer_suppressions.h"
|
|
||||||
#include "sanitizer_atomic.h"
|
#include "sanitizer_atomic.h"
|
||||||
#include "sanitizer_mutex.h"
|
#include "sanitizer_mutex.h"
|
||||||
|
|
||||||
|
@ -29,8 +28,8 @@ class LibIgnore {
|
||||||
public:
|
public:
|
||||||
explicit LibIgnore(LinkerInitialized);
|
explicit LibIgnore(LinkerInitialized);
|
||||||
|
|
||||||
// Fetches all "called_from_lib" suppressions from the SuppressionContext.
|
// Must be called during initialization.
|
||||||
void Init(const SuppressionContext &supp);
|
void AddIgnoredLibrary(const char *name_templ);
|
||||||
|
|
||||||
// Must be called after a new dynamic library is loaded.
|
// Must be called after a new dynamic library is loaded.
|
||||||
void OnLibraryLoaded(const char *name);
|
void OnLibraryLoaded(const char *name);
|
||||||
|
|
|
@ -157,7 +157,13 @@ static LibIgnore *libignore() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeLibIgnore() {
|
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);
|
libignore()->OnLibraryLoaded(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue