mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
[msan] Raise alignment of origin stores/loads when possible.
Origin alignment is as high as the alignment of the corresponding application location, but never less than 4. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171110 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -100,7 +100,8 @@ static const uint64_t kShadowMask32 = 1ULL << 31;
|
||||
static const uint64_t kShadowMask64 = 1ULL << 46;
|
||||
static const uint64_t kOriginOffset32 = 1ULL << 30;
|
||||
static const uint64_t kOriginOffset64 = 1ULL << 45;
|
||||
static const uint64_t kShadowTLSAlignment = 8;
|
||||
static const unsigned kMinOriginAlignment = 4;
|
||||
static const unsigned kShadowTLSAlignment = 8;
|
||||
|
||||
/// \brief Track origins of uninitialized values.
|
||||
///
|
||||
@@ -451,8 +452,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
insertCheck(Addr, &I);
|
||||
|
||||
if (MS.TrackOrigins) {
|
||||
unsigned Alignment = std::max(kMinOriginAlignment, I.getAlignment());
|
||||
if (ClStoreCleanOrigin || isa<StructType>(Shadow->getType())) {
|
||||
IRB.CreateStore(getOrigin(Val), getOriginPtr(Addr, IRB));
|
||||
IRB.CreateAlignedStore(getOrigin(Val), getOriginPtr(Addr, IRB),
|
||||
Alignment);
|
||||
} else {
|
||||
Value *ConvertedShadow = convertToShadowTyNoVec(Shadow, IRB);
|
||||
|
||||
@@ -469,7 +472,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
SplitBlockAndInsertIfThen(cast<Instruction>(Cmp), false,
|
||||
MS.OriginStoreWeights);
|
||||
IRBuilder<> IRBNew(CheckTerm);
|
||||
IRBNew.CreateStore(getOrigin(Val), getOriginPtr(Addr, IRBNew));
|
||||
IRBNew.CreateAlignedStore(getOrigin(Val), getOriginPtr(Addr, IRBNew),
|
||||
Alignment);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -827,8 +831,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
if (ClCheckAccessAddress)
|
||||
insertCheck(I.getPointerOperand(), &I);
|
||||
|
||||
if (MS.TrackOrigins)
|
||||
setOrigin(&I, IRB.CreateLoad(getOriginPtr(Addr, IRB)));
|
||||
if (MS.TrackOrigins) {
|
||||
unsigned Alignment = std::max(kMinOriginAlignment, I.getAlignment());
|
||||
setOrigin(&I, IRB.CreateAlignedLoad(getOriginPtr(Addr, IRB), Alignment));
|
||||
}
|
||||
}
|
||||
|
||||
/// \brief Instrument StoreInst
|
||||
|
||||
Reference in New Issue
Block a user