summaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-11-29 14:05:53 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2012-11-29 14:05:53 +0000
commit3a10b49781afcf0ea445d69dfc6949335269f231 (patch)
tree61fc37b56598d9a1f0a522983471255584ecb050 /lib/Transforms
parentaf4451b37e381c643144dc00614e63eef8db6082 (diff)
downloadllvm-3a10b49781afcf0ea445d69dfc6949335269f231.tar.gz
llvm-3a10b49781afcf0ea445d69dfc6949335269f231.tar.bz2
llvm-3a10b49781afcf0ea445d69dfc6949335269f231.tar.xz
[msan] Fix shadow & origin store & load alignment.
This change ensures that shadow memory accesses have the same alignment as corresponding app memory accesses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168880 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Instrumentation/MemorySanitizer.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/lib/Transforms/Instrumentation/MemorySanitizer.cpp
index 8cc0084db5..30652378bf 100644
--- a/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ b/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -710,13 +710,13 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
Type *ShadowTy = getShadowTy(&I);
Value *Addr = I.getPointerOperand();
Value *ShadowPtr = getShadowPtr(Addr, ShadowTy, IRB);
- setShadow(&I, IRB.CreateLoad(ShadowPtr, "_msld"));
+ setShadow(&I, IRB.CreateAlignedLoad(ShadowPtr, I.getAlignment(), "_msld"));
if (ClCheckAccessAddress)
insertCheck(I.getPointerOperand(), &I);
if (ClTrackOrigins)
- setOrigin(&I, IRB.CreateLoad(getOriginPtr(Addr, IRB)));
+ setOrigin(&I, IRB.CreateAlignedLoad(getOriginPtr(Addr, IRB), I.getAlignment()));
}
/// \brief Instrument StoreInst
@@ -731,7 +731,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
Value *Shadow = getShadow(Val);
Value *ShadowPtr = getShadowPtr(Addr, Shadow->getType(), IRB);
- StoreInst *NewSI = IRB.CreateStore(Shadow, ShadowPtr);
+ StoreInst *NewSI = IRB.CreateAlignedStore(Shadow, ShadowPtr, I.getAlignment());
DEBUG(dbgs() << " STORE: " << *NewSI << "\n");
// If the store is volatile, add a check.
if (I.isVolatile())
@@ -740,7 +740,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
insertCheck(Addr, &I);
if (ClTrackOrigins)
- IRB.CreateStore(getOrigin(Val), getOriginPtr(Addr, IRB));
+ IRB.CreateAlignedStore(getOrigin(Val), getOriginPtr(Addr, IRB), I.getAlignment());
}
// Casts.