diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2013-07-09 22:03:17 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2013-07-09 22:03:17 +0000 |
commit | 49062a97cf8b94aed9ffe8f54605719a3c51f63c (patch) | |
tree | cc0b25b946dc984ff43c7e49b14bd0f5039bcea2 /llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp | |
parent | fea30e56d8b1036900e66f6c45018d427a51ec32 (diff) | |
download | bcm5719-llvm-49062a97cf8b94aed9ffe8f54605719a3c51f63c.tar.gz bcm5719-llvm-49062a97cf8b94aed9ffe8f54605719a3c51f63c.zip |
Implement categories for special case lists.
A special case list can now specify categories for specific globals,
which can be used to instruct an instrumentation pass to treat certain
functions or global variables in a specific way, such as by omitting
certain aspects of instrumentation while keeping others, or informing
the instrumentation pass that a specific uninstrumentable function
has certain semantics, thus allowing the pass to instrument callers
according to those semantics.
For example, AddressSanitizer now uses the "init" category instead of
global-init prefixes for globals whose initializers should not be
instrumented, but which in all other respects should be instrumented.
The motivating use case is DataFlowSanitizer, which will have a
number of different categories for uninstrumentable functions, such
as "functional" which specifies that a function has pure functional
semantics, or "discard" which indicates that a function's return
value should not be labelled.
Differential Revision: http://llvm-reviews.chandlerc.com/D1092
llvm-svn: 185978
Diffstat (limited to 'llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp')
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index 28c5622863b..db0a28519cd 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -948,7 +948,7 @@ bool AddressSanitizerModule::runOnModule(Module &M) { bool GlobalHasDynamicInitializer = DynamicallyInitializedGlobals.Contains(G); // Don't check initialization order if this global is blacklisted. - GlobalHasDynamicInitializer &= !BL->isInInit(*G); + GlobalHasDynamicInitializer &= !BL->isIn(*G, "init"); StructType *NewTy = StructType::get(Ty, RightRedZoneTy, NULL); Constant *NewInitializer = ConstantStruct::get( |