Index: src/IceASanInstrumentation.cpp |
diff --git a/src/IceASanInstrumentation.cpp b/src/IceASanInstrumentation.cpp |
index e3203b36225ed5b4fa6cdc7799f079dd9ee5c2b6..1aa1730699fa6cb2024526383276a43e400d355e 100644 |
--- a/src/IceASanInstrumentation.cpp |
+++ b/src/IceASanInstrumentation.cpp |
@@ -36,6 +36,7 @@ constexpr SizeT RzSize = 32; |
constexpr const char *RzPrefix = "__$rz"; |
constexpr const char *RzArrayName = "__$rz_array"; |
constexpr const char *RzSizesName = "__$rz_sizes"; |
+constexpr char RzStackPoison = -1; |
const llvm::NaClBitcodeRecord::RecordVector RzContents = |
llvm::NaClBitcodeRecord::RecordVector(RzSize, 'R'); |
@@ -202,15 +203,17 @@ void ASanInstrumentation::instrumentFuncStart(LoweringContext &Context) { |
constexpr SizeT NumArgs = 2; |
constexpr Variable *Void = nullptr; |
constexpr bool NoTailcall = false; |
+ auto *RzSizeConst = ConstantInteger32::create(Ctx, IceType_i32, RzPadding); |
+ auto *RzPoisonConst = |
+ ConstantInteger32::create(Ctx, IceType_i32, RzStackPoison); |
auto *Init = InstCall::create(Func, NumArgs, Void, InitFunc, NoTailcall); |
+ Init->addArg(RzLocVar); |
+ Init->addArg(RzSizeConst); |
+ Init->addArg(RzPoisonConst); |
auto *Destroy = |
InstCall::create(Func, NumArgs, Void, DestroyFunc, NoTailcall); |
- Init->addArg(RzLocVar); |
Destroy->addArg(RzLocVar); |
- auto *RzSizeConst = ConstantInteger32::create(Ctx, IceType_i32, RzPadding); |
- Init->addArg(RzSizeConst); |
Destroy->addArg(RzSizeConst); |
- |
Cur->setDeleted(); |
C.insert(NewVar); |
ICE_TLS_GET_FIELD(LocalDtors)->emplace_back(Destroy); |
@@ -234,14 +237,16 @@ void ASanInstrumentation::instrumentFuncStart(LoweringContext &Context) { |
constexpr SizeT NumArgs = 2; |
constexpr Variable *Void = nullptr; |
constexpr bool NoTailcall = false; |
+ auto *RzPoisonConst = |
+ ConstantInteger32::create(Ctx, IceType_i32, RzStackPoison); |
auto *Init = InstCall::create(Func, NumArgs, Void, InitFunc, NoTailcall); |
+ Init->addArg(LastRz); |
+ Init->addArg(RzAlloca->getSizeInBytes()); |
+ Init->addArg(RzPoisonConst); |
auto *Destroy = |
InstCall::create(Func, NumArgs, Void, DestroyFunc, NoTailcall); |
- Init->addArg(LastRz); |
Destroy->addArg(LastRz); |
- Init->addArg(RzAlloca->getSizeInBytes()); |
Destroy->addArg(RzAlloca->getSizeInBytes()); |
- |
ICE_TLS_GET_FIELD(LocalDtors)->emplace_back(Destroy); |
C.insert(RzAlloca); |
C.insert(Init); |