mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-25 16:29:20 +00:00
[ASan]: Add minimalistic support for turning off initialization-order checking for globals of specified types. Tests for this behavior will go to ASan test suite in compiler-rt.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167725 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d54393153a
commit
9cc45d2d7e
@ -20,6 +20,7 @@
|
||||
#include "llvm/ADT/OwningPtr.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/Function.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/Module.h"
|
||||
@ -92,12 +93,24 @@ bool BlackList::isIn(const Module &M) {
|
||||
return inSection("src", M.getModuleIdentifier());
|
||||
}
|
||||
|
||||
static StringRef GetGVTypeString(const GlobalVariable &G) {
|
||||
// Types of GlobalVariables are always pointer types.
|
||||
Type *GType = G.getType()->getElementType();
|
||||
// For now we support blacklisting struct types only.
|
||||
if (GType->isStructTy()) {
|
||||
return GType->getStructName();
|
||||
}
|
||||
return "<unknown type>";
|
||||
}
|
||||
|
||||
bool BlackList::isInInit(const GlobalVariable &G) {
|
||||
return isIn(*G.getParent()) || inSection("global-init", G.getName());
|
||||
return (isIn(*G.getParent()) ||
|
||||
inSection("global-init", G.getName()) ||
|
||||
inSection("global-init-type", GetGVTypeString(G)));
|
||||
}
|
||||
|
||||
bool BlackList::inSection(const StringRef Section,
|
||||
const StringRef Query) {
|
||||
const StringRef Query) {
|
||||
Regex *FunctionRegex = Entries[Section];
|
||||
return FunctionRegex ? FunctionRegex->match(Query) : false;
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
// fun:*_ZN4base6subtle*
|
||||
// global:*global_with_bad_access_or_initialization*
|
||||
// global-init:*global_with_initialization_issues*
|
||||
// global-init-type:*Namespace::ClassName*
|
||||
// src:file_with_tricky_code.cc
|
||||
// ---
|
||||
// Note that the wild card is in fact an llvm::Regex, but * is automatically
|
||||
|
Loading…
Reference in New Issue
Block a user