mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-13 19:24:21 +00:00
Modify Store interface: GetSVal/SetSVal => Retrieve/Bind.
llvm-svn: 57896
This commit is contained in:
parent
0aee1cd5a3
commit
8f6855e642
@ -422,7 +422,7 @@ public:
|
||||
|
||||
|
||||
SVal GetSVal(const GRState* St, Loc LV, QualType T = QualType()) {
|
||||
return StoreMgr->GetSVal(St->getStore(), LV, T);
|
||||
return StoreMgr->Retrieve(St->getStore(), LV, T);
|
||||
}
|
||||
|
||||
SVal GetSVal(const GRState* St, const MemRegion* R) {
|
||||
@ -430,7 +430,7 @@ public:
|
||||
}
|
||||
|
||||
void SetSVal(GRState& St, Loc LV, SVal V) {
|
||||
St.St = StoreMgr->SetSVal(St.St, LV, V);
|
||||
St.St = StoreMgr->Bind(St.St, LV, V);
|
||||
}
|
||||
|
||||
const GRState* SetSVal(const GRState* St, Loc LV, SVal V);
|
||||
|
@ -39,13 +39,13 @@ public:
|
||||
typedef llvm::DenseSet<SymbolID> DeadSymbolsTy;
|
||||
|
||||
virtual ~StoreManager() {}
|
||||
virtual SVal GetSVal(Store St, Loc LV, QualType T = QualType()) = 0;
|
||||
virtual SVal Retrieve(Store St, Loc LV, QualType T = QualType()) = 0;
|
||||
|
||||
virtual SVal GetRegionSVal(Store St, const MemRegion* R) {
|
||||
return GetSVal(St, loc::MemRegionVal(R));
|
||||
return Retrieve(St, loc::MemRegionVal(R));
|
||||
}
|
||||
|
||||
virtual Store SetSVal(Store St, Loc LV, SVal V) = 0;
|
||||
virtual Store Bind(Store St, Loc LV, SVal V) = 0;
|
||||
virtual Store Remove(Store St, Loc LV) = 0;
|
||||
virtual Store getInitialStore() = 0;
|
||||
virtual MemRegionManager& getRegionManager() = 0;
|
||||
|
@ -34,8 +34,8 @@ public:
|
||||
|
||||
virtual ~BasicStoreManager() {}
|
||||
|
||||
virtual SVal GetSVal(Store St, Loc LV, QualType T);
|
||||
virtual Store SetSVal(Store St, Loc LV, SVal V);
|
||||
virtual SVal Retrieve(Store St, Loc LV, QualType T);
|
||||
virtual Store Bind(Store St, Loc LV, SVal V);
|
||||
virtual Store Remove(Store St, Loc LV);
|
||||
|
||||
virtual Store getInitialStore();
|
||||
@ -133,7 +133,7 @@ SVal BasicStoreManager::getLValueElement(const GRState* St, SVal Base,
|
||||
return Base;
|
||||
}
|
||||
|
||||
SVal BasicStoreManager::GetSVal(Store St, Loc LV, QualType T) {
|
||||
SVal BasicStoreManager::Retrieve(Store St, Loc LV, QualType T) {
|
||||
|
||||
if (isa<UnknownVal>(LV))
|
||||
return UnknownVal();
|
||||
@ -177,7 +177,7 @@ SVal BasicStoreManager::GetSVal(Store St, Loc LV, QualType T) {
|
||||
return UnknownVal();
|
||||
}
|
||||
|
||||
Store BasicStoreManager::SetSVal(Store store, Loc LV, SVal V) {
|
||||
Store BasicStoreManager::Bind(Store store, Loc LV, SVal V) {
|
||||
switch (LV.getSubKind()) {
|
||||
case loc::MemRegionKind: {
|
||||
const VarRegion* R =
|
||||
@ -315,7 +315,7 @@ Store BasicStoreManager::getInitialStore() {
|
||||
? SVal::GetSymbolValue(StateMgr.getSymbolManager(), VD)
|
||||
: UndefinedVal();
|
||||
|
||||
St = SetSVal(St, loc::MemRegionVal(MRMgr.getVarRegion(VD)), X);
|
||||
St = Bind(St, loc::MemRegionVal(MRMgr.getVarRegion(VD)), X);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -355,16 +355,16 @@ Store BasicStoreManager::AddDecl(Store store,
|
||||
if (!Ex) {
|
||||
QualType T = VD->getType();
|
||||
if (Loc::IsLocType(T))
|
||||
store = SetSVal(store, getLoc(VD),
|
||||
loc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
store = Bind(store, getLoc(VD),
|
||||
loc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
else if (T->isIntegerType())
|
||||
store = SetSVal(store, getLoc(VD),
|
||||
nonloc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
store = Bind(store, getLoc(VD),
|
||||
nonloc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
else {
|
||||
// assert(0 && "ignore other types of variables");
|
||||
}
|
||||
} else {
|
||||
store = SetSVal(store, getLoc(VD), InitVal);
|
||||
store = Bind(store, getLoc(VD), InitVal);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -382,7 +382,7 @@ Store BasicStoreManager::AddDecl(Store store,
|
||||
: cast<SVal>(nonloc::SymbolVal(Sym));
|
||||
}
|
||||
|
||||
store = SetSVal(store, getLoc(VD), V);
|
||||
store = Bind(store, getLoc(VD), V);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ const GRState* GRStateManager::SetSVal(const GRState* St, Loc LV,
|
||||
SVal V) {
|
||||
|
||||
Store OldStore = St->getStore();
|
||||
Store NewStore = StoreMgr->SetSVal(OldStore, LV, V);
|
||||
Store NewStore = StoreMgr->Bind(OldStore, LV, V);
|
||||
|
||||
if (NewStore == OldStore)
|
||||
return St;
|
||||
|
@ -38,8 +38,8 @@ public:
|
||||
|
||||
virtual ~RegionStoreManager() {}
|
||||
|
||||
SVal GetSVal(Store S, Loc L, QualType T);
|
||||
Store SetSVal(Store St, Loc LV, SVal V);
|
||||
SVal Retrieve(Store S, Loc L, QualType T);
|
||||
Store Bind(Store St, Loc LV, SVal V);
|
||||
|
||||
Store getInitialStore();
|
||||
|
||||
@ -65,7 +65,7 @@ Loc RegionStoreManager::getElementLoc(const VarDecl* VD, SVal Idx) {
|
||||
return loc::MemRegionVal(ER);
|
||||
}
|
||||
|
||||
SVal RegionStoreManager::GetSVal(Store S, Loc L, QualType T) {
|
||||
SVal RegionStoreManager::Retrieve(Store S, Loc L, QualType T) {
|
||||
assert(!isa<UnknownVal>(L) && "location unknown");
|
||||
assert(!isa<UndefinedVal>(L) && "location undefined");
|
||||
|
||||
@ -97,7 +97,7 @@ SVal RegionStoreManager::GetSVal(Store S, Loc L, QualType T) {
|
||||
}
|
||||
}
|
||||
|
||||
Store RegionStoreManager::SetSVal(Store store, Loc LV, SVal V) {
|
||||
Store RegionStoreManager::Bind(Store store, Loc LV, SVal V) {
|
||||
assert(LV.getSubKind() == loc::MemRegionKind);
|
||||
|
||||
const MemRegion* R = cast<loc::MemRegionVal>(LV).getRegion();
|
||||
@ -135,7 +135,7 @@ Store RegionStoreManager::getInitialStore() {
|
||||
? SVal::GetSymbolValue(StateMgr.getSymbolManager(), VD)
|
||||
: UndefinedVal();
|
||||
|
||||
St = SetSVal(St, getVarLoc(VD), X);
|
||||
St = Bind(St, getVarLoc(VD), X);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -160,16 +160,16 @@ Store RegionStoreManager::AddDecl(Store store,
|
||||
QualType T = VD->getType();
|
||||
|
||||
if (Loc::IsLocType(T))
|
||||
store = SetSVal(store, getVarLoc(VD),
|
||||
loc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
store = Bind(store, getVarLoc(VD),
|
||||
loc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
|
||||
else if (T->isIntegerType())
|
||||
store = SetSVal(store, getVarLoc(VD),
|
||||
loc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
store = Bind(store, getVarLoc(VD),
|
||||
loc::ConcreteInt(BasicVals.getValue(0, T)));
|
||||
else
|
||||
assert("ignore other types of variables");
|
||||
} else {
|
||||
store = SetSVal(store, getVarLoc(VD), InitVal);
|
||||
store = Bind(store, getVarLoc(VD), InitVal);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -186,7 +186,7 @@ Store RegionStoreManager::AddDecl(Store store,
|
||||
? cast<SVal>(loc::SymbolVal(Sym))
|
||||
: cast<SVal>(nonloc::SymbolVal(Sym));
|
||||
}
|
||||
store = SetSVal(store, getVarLoc(VD), V);
|
||||
store = Bind(store, getVarLoc(VD), V);
|
||||
|
||||
} else if (T->isArrayType()) {
|
||||
// Only handle constant size array.
|
||||
@ -197,7 +197,7 @@ Store RegionStoreManager::AddDecl(Store store,
|
||||
for (llvm::APInt i = llvm::APInt::getNullValue(Size.getBitWidth());
|
||||
i != Size; ++i) {
|
||||
nonloc::ConcreteInt Idx(BasicVals.getValue(llvm::APSInt(i)));
|
||||
store = SetSVal(store, getElementLoc(VD, Idx), UndefinedVal());
|
||||
store = Bind(store, getElementLoc(VD, Idx), UndefinedVal());
|
||||
}
|
||||
}
|
||||
} else if (T->isStructureType()) {
|
||||
|
Loading…
Reference in New Issue
Block a user