diff options
author | Kostya Serebryany <kcc@google.com> | 2014-10-16 20:54:52 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-10-16 20:54:52 +0000 |
commit | 293dc9be6e3660377141b5998ee2987c3104e980 (patch) | |
tree | af584d5d8dde96d893932cd10cefd1ca7f9a75dd /clang/lib/CodeGen/CodeGenFunction.h | |
parent | 899ded9cdf53b3d84c8d0e771851cc256296bfd2 (diff) | |
download | bcm5719-llvm-293dc9be6e3660377141b5998ee2987c3104e980.tar.gz bcm5719-llvm-293dc9be6e3660377141b5998ee2987c3104e980.zip |
Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-object-overflow bugs
Summary:
The general approach is to add extra paddings after every field
in AST/RecordLayoutBuilder.cpp, then add code to CTORs/DTORs that poisons the paddings
(CodeGen/CGClass.cpp).
Everything is done under the flag -fsanitize-address-field-padding.
The blacklist file (-fsanitize-blacklist) allows to avoid the transformation
for given classes or source files.
See also https://code.google.com/p/address-sanitizer/wiki/IntraObjectOverflow
Test Plan: run SPEC2006 and some of the Chromium tests with -fsanitize-address-field-padding
Reviewers: samsonov, rnk, rsmith
Reviewed By: rsmith
Subscribers: majnemer, cfe-commits
Differential Revision: http://reviews.llvm.org/D5687
llvm-svn: 219961
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 09b12713a84..49810a8700e 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -1267,6 +1267,7 @@ public: void EmitLambdaBlockInvokeBody(); void EmitLambdaDelegatingInvokeBody(const CXXMethodDecl *MD); void EmitLambdaStaticInvokeFunction(const CXXMethodDecl *MD); + void EmitAsanPrologueOrEpilogue(bool Prologue); /// EmitReturnBlock - Emit the unified return block, trying to avoid its /// emission when possible. |