Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 10 additions & 13 deletions svf-llvm/lib/SVFIRBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ void SVFIRBuilder::createFunObjVars()
DBOUT(DPAGBuild, outs() << "add obj node " << id << "\n");

// Check if the value is a function and add a function object node
pag->addFunObjNode(id, pag->getObjTypeInfo(id), llvmModuleSet()->getSVFType(fun->getType()), nullptr);
pag->addFunObjNode(id, pag->getObjTypeInfo(id), nullptr);
llvmModuleSet()->LLVMFun2FunObjVar[fun] = cast<FunObjVar>(pag->getGNode(id));

FunObjVar *funObjVar = SVFUtil::cast<FunObjVar>(pag->getGNode(id));
Expand Down Expand Up @@ -403,52 +403,49 @@ void SVFIRBuilder::initialiseBaseObjVars()
else if (LLVMUtil::isHeapObj(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addHeapObjNode(iter->second, pag->getObjTypeInfo(id), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addHeapObjNode(iter->second, pag->getObjTypeInfo(id), icfgNode);
}
// Check if the value is an alloca instruction and add a stack object node
else if (LLVMUtil::isStackObj(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addStackObjNode(iter->second, pag->getObjTypeInfo(id), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addStackObjNode(iter->second, pag->getObjTypeInfo(id), icfgNode);
}
else if (auto fpValue = SVFUtil::dyn_cast<ConstantFP>(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addConstantFPObjNode(iter->second, pag->getObjTypeInfo(id), LLVMUtil::getDoubleValue(fpValue), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addConstantFPObjNode(iter->second, pag->getObjTypeInfo(id), LLVMUtil::getDoubleValue(fpValue), icfgNode);
}
else if (auto intValue = SVFUtil::dyn_cast<ConstantInt>(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addConstantIntObjNode(iter->second, pag->getObjTypeInfo(id), LLVMUtil::getIntegerValue(intValue), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addConstantIntObjNode(iter->second, pag->getObjTypeInfo(id), LLVMUtil::getIntegerValue(intValue), icfgNode);
}
else if (SVFUtil::isa<ConstantPointerNull>(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addConstantNullPtrObjNode(iter->second, pag->getObjTypeInfo(id), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addConstantNullPtrObjNode(iter->second, pag->getObjTypeInfo(id), icfgNode);
}
else if (SVFUtil::isa<GlobalValue>(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addGlobalObjNode(iter->second,
pag->getObjTypeInfo(id),
llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addGlobalObjNode(iter->second, pag->getObjTypeInfo(id), icfgNode);
}
else if (SVFUtil::isa<ConstantData, MetadataAsValue, BlockAddress>(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addConstantDataObjNode(iter->second, pag->getObjTypeInfo(id), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addConstantDataObjNode(iter->second, pag->getObjTypeInfo(id), icfgNode);
}
else if (SVFUtil::isa<ConstantAggregate>(llvmValue))
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addConstantAggObjNode(iter->second, pag->getObjTypeInfo(id), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addConstantAggObjNode(iter->second, pag->getObjTypeInfo(id), icfgNode);
}
// Add a generic object node for other types of values
else
{
NodeID id = llvmModuleSet()->getObjectNode(iter->first);
pag->addObjNode(iter->second,
pag->getObjTypeInfo(id), llvmModuleSet()->getSVFType(llvmValue->getType()), icfgNode);
pag->addObjNode(iter->second, pag->getObjTypeInfo(id), icfgNode);
}
llvmModuleSet()->addToSVFVar2LLVMValueMap(llvmValue, pag->getGNode(iter->second));
}
Expand Down
48 changes: 24 additions & 24 deletions svf/include/SVFIR/SVFIR.h
Original file line number Diff line number Diff line change
Expand Up @@ -614,79 +614,79 @@ class SVFIR : public IRGraph


/// Add a memory obj node
inline NodeID addObjNode(NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
inline NodeID addObjNode(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
return addFIObjNode( i, ti, type, node);
return addFIObjNode( i, ti, node);
}

/**
* Creates and adds a heap object node to the SVFIR
*/
inline NodeID addHeapObjNode(NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
inline NodeID addHeapObjNode(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
HeapObjVar *heapObj = new HeapObjVar(i, ti, type, node);
HeapObjVar *heapObj = new HeapObjVar(i, ti, node);
return addObjNode(heapObj);
}

/**
* Creates and adds a stack object node to the SVFIR
*/
inline NodeID addStackObjNode(NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
inline NodeID addStackObjNode(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
StackObjVar *stackObj = new StackObjVar(i, ti, type, node);
StackObjVar *stackObj = new StackObjVar(i, ti, node);
return addObjNode(stackObj);
}

NodeID addFunObjNode(NodeID id, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
NodeID addFunObjNode(NodeID id, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[id].set(id);
FunObjVar* funObj = new FunObjVar(id, ti, type, node);
FunObjVar* funObj = new FunObjVar(id, ti, node);
return addObjNode(funObj);
}


inline NodeID addConstantFPObjNode(NodeID i, ObjTypeInfo* ti, double dval, const SVFType* type, const ICFGNode* node)
inline NodeID addConstantFPObjNode(NodeID i, ObjTypeInfo* ti, double dval, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
ConstFPObjVar* conObj = new ConstFPObjVar(i, dval, ti, type, node);
ConstFPObjVar* conObj = new ConstFPObjVar(i, dval, ti, node);
return addObjNode(conObj);
}


inline NodeID addConstantIntObjNode(NodeID i, ObjTypeInfo* ti, const std::pair<s64_t, u64_t>& intValue, const SVFType* type, const ICFGNode* node)
inline NodeID addConstantIntObjNode(NodeID i, ObjTypeInfo* ti, const std::pair<s64_t, u64_t>& intValue, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
ConstIntObjVar* conObj =
new ConstIntObjVar(i, intValue.first, intValue.second, ti, type, node);
new ConstIntObjVar(i, intValue.first, intValue.second, ti, node);
return addObjNode(conObj);
}


inline NodeID addConstantNullPtrObjNode(const NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
inline NodeID addConstantNullPtrObjNode(const NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
ConstNullPtrObjVar* conObj = new ConstNullPtrObjVar(i, ti, type, node);
ConstNullPtrObjVar* conObj = new ConstNullPtrObjVar(i, ti, node);
return addObjNode(conObj);
}

inline NodeID addGlobalObjNode(const NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
inline NodeID addGlobalObjNode(const NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
GlobalObjVar* gObj = new GlobalObjVar(i, ti, type, node);
GlobalObjVar* gObj = new GlobalObjVar(i, ti, node);
return addObjNode(gObj);
}
inline NodeID addConstantAggObjNode(const NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
inline NodeID addConstantAggObjNode(const NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
ConstAggObjVar* conObj = new ConstAggObjVar(i, ti, type, node);
ConstAggObjVar* conObj = new ConstAggObjVar(i, ti, node);
return addObjNode(conObj);
}
inline NodeID addConstantDataObjNode(const NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
inline NodeID addConstantDataObjNode(const NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
ConstDataObjVar* conObj = new ConstDataObjVar(i, ti, type, node);
ConstDataObjVar* conObj = new ConstDataObjVar(i, ti, node);
return addObjNode(conObj);
}

Expand All @@ -708,10 +708,10 @@ class SVFIR : public IRGraph
/// Add a field obj node, this method can only invoked by getGepObjVar
NodeID addGepObjNode(const BaseObjVar* baseObj, const APOffset& apOffset, const NodeID gepId);
/// Add a field-insensitive node, this method can only invoked by getFIGepObjNode
NodeID addFIObjNode(NodeID i, ObjTypeInfo* ti, const SVFType* type, const ICFGNode* node)
NodeID addFIObjNode(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
{
memToFieldsMap[i].set(i);
BaseObjVar* baseObj = new BaseObjVar(i, ti, type, node);
BaseObjVar* baseObj = new BaseObjVar(i, ti, node);
return addObjNode(baseObj);
}

Expand All @@ -730,11 +730,11 @@ class SVFIR : public IRGraph
{
ObjTypeInfo* ti = createObjTypeInfo(type);
idToObjTypeInfoMap()[i] = ti;
return addObjNode(new DummyObjVar(i, ti, nullptr, type));
return addObjNode(new DummyObjVar(i, ti, nullptr));
}
else
{
return addObjNode(new DummyObjVar(i, getObjTypeInfo(i), nullptr, type));
return addObjNode(new DummyObjVar(i, getObjTypeInfo(i), nullptr));
}
}

Expand Down
6 changes: 5 additions & 1 deletion svf/include/SVFIR/SVFStatements.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class SVFStmt : public GenericPAGEdgeTy
return edgeId;
}
/// Whether src and dst nodes are both of pointer type
bool isPTAEdge() const;
virtual bool isPTAEdge() const;

/// Get/set methods for llvm instruction
//@{
Expand Down Expand Up @@ -343,6 +343,10 @@ class AddrStmt: public AssignStmt
return arrSize;
}

virtual bool isPTAEdge() const override
{
return true;
}
};

/*!
Expand Down
50 changes: 21 additions & 29 deletions svf/include/SVFIR/SVFVariables.h
Original file line number Diff line number Diff line change
Expand Up @@ -533,9 +533,8 @@ class BaseObjVar : public ObjVar
//@}

/// Constructor
BaseObjVar(NodeID i, ObjTypeInfo* ti,
const SVFType* svfType, const ICFGNode* node, PNODEK ty = BaseObjNode)
: ObjVar(i, svfType, ty), typeInfo(ti), icfgNode(node)
BaseObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node, PNODEK ty = BaseObjNode)
: ObjVar(i, ti->getType(), ty), typeInfo(ti), icfgNode(node)
{
}

Expand Down Expand Up @@ -564,12 +563,6 @@ class BaseObjVar : public ObjVar
return id;
}

/// Get obj type
const SVFType* getType() const
{
return typeInfo->getType();
}

/// Get the number of elements of this object
u32_t getNumOfElements() const
{
Expand Down Expand Up @@ -832,8 +825,8 @@ class HeapObjVar: public BaseObjVar
//@}

/// Constructor
HeapObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node):
BaseObjVar(i, ti, svfType, node, HeapObjNode)
HeapObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node):
BaseObjVar(i, ti, node, HeapObjNode)
{
}

Expand Down Expand Up @@ -888,8 +881,8 @@ class StackObjVar: public BaseObjVar
//@}

/// Constructor
StackObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node):
BaseObjVar(i, ti, svfType, node, StackObjNode)
StackObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node):
BaseObjVar(i, ti, node, StackObjNode)
{
}

Expand Down Expand Up @@ -962,7 +955,7 @@ class FunObjVar : public BaseObjVar
//@}

/// Constructor
FunObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node);
FunObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node);


virtual ~FunObjVar()
Expand Down Expand Up @@ -1599,8 +1592,8 @@ class GlobalObjVar : public BaseObjVar
//@}

/// Constructor
GlobalObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node,
PNODEK ty = GlobalObjNode): BaseObjVar(i, ti, svfType, node, ty)
GlobalObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node,
PNODEK ty = GlobalObjNode): BaseObjVar(i, ti, node, ty)
{

}
Expand Down Expand Up @@ -1643,8 +1636,8 @@ class ConstAggObjVar : public BaseObjVar
//@}

/// Constructor
ConstAggObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node)
: BaseObjVar(i, ti, svfType, node, ConstAggObjNode)
ConstAggObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
: BaseObjVar(i, ti, node, ConstAggObjNode)
{

}
Expand Down Expand Up @@ -1695,8 +1688,8 @@ class ConstDataObjVar : public BaseObjVar
//@}

/// Constructor
ConstDataObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node, PNODEK ty = ConstDataObjNode)
: BaseObjVar(i, ti, svfType, node, ty)
ConstDataObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node, PNODEK ty = ConstDataObjNode)
: BaseObjVar(i, ti, node, ty)
{
}

Expand Down Expand Up @@ -1756,8 +1749,8 @@ class ConstFPObjVar : public ConstDataObjVar
//@}

/// Constructor
ConstFPObjVar(NodeID i, double dv, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node)
: ConstDataObjVar(i, ti, svfType, node, ConstFPObjNode), dval(dv)
ConstFPObjVar(NodeID i, double dv, ObjTypeInfo* ti, const ICFGNode* node)
: ConstDataObjVar(i, ti, node, ConstFPObjNode), dval(dv)
{
}

Expand Down Expand Up @@ -1825,12 +1818,11 @@ class ConstIntObjVar : public ConstDataObjVar
//@}

/// Constructor
ConstIntObjVar(NodeID i, s64_t sv, u64_t zv, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node)
: ConstDataObjVar(i, ti, svfType, node, ConstIntObjNode), zval(zv), sval(sv)
ConstIntObjVar(NodeID i, s64_t sv, u64_t zv, ObjTypeInfo* ti, const ICFGNode* node)
: ConstDataObjVar(i, ti, node, ConstIntObjNode), zval(zv), sval(sv)
{
}


virtual const std::string toString() const;
};

Expand Down Expand Up @@ -1874,8 +1866,8 @@ class ConstNullPtrObjVar : public ConstDataObjVar
//@}

/// Constructor
ConstNullPtrObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node)
: ConstDataObjVar(i, ti, svfType, node, ConstNullptrObjNode)
ConstNullPtrObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
: ConstDataObjVar(i, ti, node, ConstNullptrObjNode)
{
}
virtual bool isConstDataOrAggDataButNotNullPtr() const
Expand Down Expand Up @@ -2073,8 +2065,8 @@ class DummyObjVar: public BaseObjVar
//@}

/// Constructor
DummyObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node, const SVFType* svfType = SVFType::getSVFPtrType())
: BaseObjVar(i, ti, svfType, node, DummyObjNode)
DummyObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
: BaseObjVar(i, ti, node, DummyObjNode)
{
}

Expand Down
2 changes: 1 addition & 1 deletion svf/lib/SVFIR/PAGBuilderFromFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ SVFIR* PAGBuilderFromFile::build()
pag->addDummyValNode(nodeId, nullptr);
else if (nodetype == "o")
{
pag->addFIObjNode(nodeId, pag->createObjTypeInfo(nullptr), SVFType::getSVFPtrType(), nullptr);
pag->addFIObjNode(nodeId, pag->createObjTypeInfo(nullptr), nullptr);
}
else
assert(false && "format not support, pls specify node type");
Expand Down
4 changes: 2 additions & 2 deletions svf/lib/SVFIR/SVFVariables.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -440,8 +440,8 @@ const std::string ConstNullPtrObjVar::toString() const
return rawstr.str();
}

FunObjVar::FunObjVar(NodeID i, ObjTypeInfo* ti, const SVFType* svfType, const ICFGNode* node)
: BaseObjVar(i, ti, svfType, node, FunObjNode)
FunObjVar::FunObjVar(NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
: BaseObjVar(i, ti, node, FunObjNode)
{
}

Expand Down
Loading