svf-tools 1.0.368 → 1.0.372
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +9 -7
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +51 -41
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +22 -19
- package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -5
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +10 -6
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +40 -40
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +40 -40
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +38 -38
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +73 -75
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/VFG_8h_source.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +42 -43
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +15 -18
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +28 -25
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +108 -15
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +42 -43
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +16 -19
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +30 -26
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +27 -26
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +121 -82
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +45 -46
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +8 -46
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -2
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +47 -48
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +32 -33
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +23 -20
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +110 -15
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +87 -86
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +87 -76
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt-members.html +44 -45
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +21 -24
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/functions_a.html +12 -10
- package/SVF-doxygen/html/html/functions_b.html +7 -12
- package/SVF-doxygen/html/html/functions_c.html +22 -18
- package/SVF-doxygen/html/html/functions_f.html +3 -3
- package/SVF-doxygen/html/html/functions_func.html +13 -11
- package/SVF-doxygen/html/html/functions_func_g.html +19 -17
- package/SVF-doxygen/html/html/functions_func_s.html +2 -2
- package/SVF-doxygen/html/html/functions_g.html +20 -18
- package/SVF-doxygen/html/html/functions_n.html +6 -6
- package/SVF-doxygen/html/html/functions_p.html +15 -15
- package/SVF-doxygen/html/html/functions_r.html +5 -2
- package/SVF-doxygen/html/html/functions_s.html +11 -11
- package/SVF-doxygen/html/html/functions_type_b.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_b.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_c.html +5 -1
- package/SVF-doxygen/html/html/functions_vars_r.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/namespaceSVF.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +3 -3
- package/SVF-doxygen/html/html/search/all_10.js +7 -7
- package/SVF-doxygen/html/html/search/all_12.js +3 -3
- package/SVF-doxygen/html/html/search/all_13.js +8 -8
- package/SVF-doxygen/html/html/search/all_14.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_2.js +2 -3
- package/SVF-doxygen/html/html/search/all_3.js +2 -1
- package/SVF-doxygen/html/html/search/all_6.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +7 -7
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +6 -6
- package/SVF-doxygen/html/html/search/functions_0.js +3 -3
- package/SVF-doxygen/html/html/search/functions_10.js +2 -2
- package/SVF-doxygen/html/html/search/functions_6.js +7 -7
- package/SVF-doxygen/html/html/search/typedefs_1.js +0 -1
- package/SVF-doxygen/html/html/search/variables_12.js +1 -0
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_2.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +2 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +18 -18
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/Graphs/ICFG.h +1 -1
- package/include/Graphs/ICFGEdge.h +39 -17
- package/include/Graphs/ICFGNode.h +1 -1
- package/include/MemoryModel/SVFStatements.h +2 -11
- package/include/SVF-FE/SVFIRBuilder.h +3 -1
- package/include/Util/ExtAPI.h +1 -1
- package/lib/Graphs/ICFG.cpp +22 -7
- package/lib/MemoryModel/SVFIR.cpp +2 -1
- package/lib/MemoryModel/SVFStatements.cpp +6 -6
- package/lib/MemoryModel/SymbolTableInfo.cpp +1 -1
- package/lib/SVF-FE/ICFGBuilder.cpp +8 -3
- package/lib/SVF-FE/SVFIRBuilder.cpp +15 -3
- package/lib/Util/ExtAPI.cpp +0 -1
- package/package.json +1 -1
|
@@ -309,7 +309,9 @@ public:
|
|
|
309
309
|
inline PhiStmt* addPhiStmt(NodeID res, NodeID opnd, const ICFGNode* pred)
|
|
310
310
|
{
|
|
311
311
|
PhiStmt *edge = pag->addPhiStmt(res,opnd,pred);
|
|
312
|
-
|
|
312
|
+
/// If we already added this phi node, then skip this adding
|
|
313
|
+
if(edge)
|
|
314
|
+
setCurrentBBAndValueForPAGEdge(edge);
|
|
313
315
|
return edge;
|
|
314
316
|
}
|
|
315
317
|
/// Add SelectStmt
|
package/include/Util/ExtAPI.h
CHANGED
|
@@ -139,7 +139,7 @@ public:
|
|
|
139
139
|
funName = "llvm." + F->getName().split('.').second.split('.').first.str();
|
|
140
140
|
}
|
|
141
141
|
llvm::StringMap<extf_t>::const_iterator it= info.find(funName);
|
|
142
|
-
if(it == info.end()
|
|
142
|
+
if(it == info.end())
|
|
143
143
|
return EFT_OTHER;
|
|
144
144
|
else
|
|
145
145
|
return it->second;
|
package/lib/Graphs/ICFG.cpp
CHANGED
|
@@ -149,10 +149,10 @@ const std::string ICFGEdge::toString() const {
|
|
|
149
149
|
const std::string IntraCFGEdge::toString() const {
|
|
150
150
|
std::string str;
|
|
151
151
|
raw_string_ostream rawstr(str);
|
|
152
|
-
if(
|
|
152
|
+
if(getCondition() == nullptr)
|
|
153
153
|
rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "]\t";
|
|
154
154
|
else
|
|
155
|
-
rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "]
|
|
155
|
+
rawstr << "IntraCFGEdge: [ICFGNode" << getDstID() << " <-- ICFGNode" << getSrcID() << "] (branchCondition:" << *getCondition() << ") (succCondValue: " << getSuccessorCondValue() << ") \t";
|
|
156
156
|
|
|
157
157
|
return rawstr.str();
|
|
158
158
|
}
|
|
@@ -352,7 +352,7 @@ ICFGEdge* ICFG::addIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode)
|
|
|
352
352
|
/*!
|
|
353
353
|
* Add conditional intraprocedural edges between two nodes
|
|
354
354
|
*/
|
|
355
|
-
ICFGEdge* ICFG::addConditionalIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode, const Value* condition,
|
|
355
|
+
ICFGEdge* ICFG::addConditionalIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode, const Value* condition, s64_t branchCondVal){
|
|
356
356
|
|
|
357
357
|
checkIntraEdgeParents(srcNode, dstNode);
|
|
358
358
|
if(ICFGEdge* edge = hasIntraICFGEdge(srcNode,dstNode, ICFGEdge::IntraCF))
|
|
@@ -363,7 +363,7 @@ ICFGEdge* ICFG::addConditionalIntraEdge(ICFGNode* srcNode, ICFGNode* dstNode, co
|
|
|
363
363
|
else
|
|
364
364
|
{
|
|
365
365
|
IntraCFGEdge* intraEdge = new IntraCFGEdge(srcNode,dstNode);
|
|
366
|
-
intraEdge->
|
|
366
|
+
intraEdge->setBranchCondition(condition,branchCondVal);
|
|
367
367
|
return (addICFGEdge(intraEdge) ? intraEdge : nullptr);
|
|
368
368
|
}
|
|
369
369
|
}
|
|
@@ -440,9 +440,24 @@ void ICFG::updateCallGraph(PTACallGraph* callgraph)
|
|
|
440
440
|
RetICFGNode* retBlockNode = getRetICFGNode(cs);
|
|
441
441
|
FunEntryICFGNode* calleeEntryNode = getFunEntryBlock(callee);
|
|
442
442
|
FunExitICFGNode* calleeExitNode = getFunExitBlock(callee);
|
|
443
|
-
addCallEdge(callBlockNode, calleeEntryNode, cs)
|
|
444
|
-
|
|
445
|
-
|
|
443
|
+
if(ICFGEdge* callEdge = addCallEdge(callBlockNode, calleeEntryNode, cs)){
|
|
444
|
+
for (const SVFStmt *stmt : callBlockNode->getSVFStmts())
|
|
445
|
+
{
|
|
446
|
+
if(const CallPE *callPE = SVFUtil::dyn_cast<CallPE>(stmt)){
|
|
447
|
+
if(callPE->getFunEntryICFGNode() == calleeEntryNode)
|
|
448
|
+
SVFUtil::cast<CallCFGEdge>(callEdge)->addCallPE(callPE);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if(ICFGEdge* retEdge = addRetEdge(calleeExitNode, retBlockNode, cs)){
|
|
453
|
+
for (const SVFStmt *stmt : retBlockNode->getSVFStmts())
|
|
454
|
+
{
|
|
455
|
+
if(const RetPE *retPE = SVFUtil::dyn_cast<RetPE>(stmt)){
|
|
456
|
+
if(retPE->getFunExitICFGNode() == calleeExitNode)
|
|
457
|
+
SVFUtil::cast<RetCFGEdge>(retEdge)->addRetPE(retPE);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
446
461
|
/// if this is an external function (no function body), connect calleeEntryNode to calleeExitNode
|
|
447
462
|
if (isExtCall(callee))
|
|
448
463
|
addIntraEdge(calleeEntryNode, calleeExitNode);
|
|
@@ -90,9 +90,9 @@ const std::string CopyStmt::toString() const{
|
|
|
90
90
|
const std::string PhiStmt::toString() const{
|
|
91
91
|
std::string str;
|
|
92
92
|
raw_string_ostream rawstr(str);
|
|
93
|
-
rawstr << "PhiStmt: [Var" << getResID() << " <-- (
|
|
94
|
-
for(
|
|
95
|
-
rawstr <<
|
|
93
|
+
rawstr << "PhiStmt: [Var" << getResID() << " <-- (";
|
|
94
|
+
for(u32_t i = 0; i < getOpVarNum(); i++)
|
|
95
|
+
rawstr << "[Var" << getOpVar(i)->getId() << ", ICFGNode" << getOpICFGNode(i)->getId() << "],";
|
|
96
96
|
rawstr << ")]\t";
|
|
97
97
|
if (Options::ShowSVFIRValue) {
|
|
98
98
|
rawstr << "\n";
|
|
@@ -152,12 +152,12 @@ const std::string BranchStmt::toString() const {
|
|
|
152
152
|
std::string str;
|
|
153
153
|
raw_string_ostream rawstr(str);
|
|
154
154
|
if(isConditional())
|
|
155
|
-
rawstr << "BranchStmt: [Condition Var" << getCondition()->getId() << "]\
|
|
155
|
+
rawstr << "BranchStmt: [Condition Var" << getCondition()->getId() << "]\n";
|
|
156
156
|
else
|
|
157
|
-
rawstr << "BranchStmt: [" << " Unconditional branch" << "]\
|
|
157
|
+
rawstr << "BranchStmt: [" << " Unconditional branch" << "]\n";
|
|
158
158
|
|
|
159
159
|
for(u32_t i = 0; i < getNumSuccessors(); i++)
|
|
160
|
-
rawstr << "Successor " << i << " ICFGNode" << getSuccessor(i)->getId() << "
|
|
160
|
+
rawstr << "Successor " << i << " ICFGNode" << getSuccessor(i)->getId() << " ";
|
|
161
161
|
|
|
162
162
|
if (Options::ShowSVFIRValue) {
|
|
163
163
|
rawstr << "\n";
|
|
@@ -632,7 +632,7 @@ bool ObjTypeInfo::isNonPtrFieldObj(const LocationSet& ls)
|
|
|
632
632
|
return false;
|
|
633
633
|
}
|
|
634
634
|
}
|
|
635
|
-
assert(hasIntersection && "cannot find field of specified offset");
|
|
635
|
+
//assert(hasIntersection && "cannot find field of specified offset");
|
|
636
636
|
return true;
|
|
637
637
|
}
|
|
638
638
|
else
|
|
@@ -97,7 +97,7 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
|
|
|
97
97
|
}
|
|
98
98
|
InstVec nextInsts;
|
|
99
99
|
getNextInsts(inst, nextInsts);
|
|
100
|
-
|
|
100
|
+
u32_t branchID = 0;
|
|
101
101
|
for (InstVec::const_iterator nit = nextInsts.begin(), enit =
|
|
102
102
|
nextInsts.end(); nit != enit; ++nit)
|
|
103
103
|
{
|
|
@@ -112,14 +112,19 @@ void ICFGBuilder::processFunBody(WorkList& worklist)
|
|
|
112
112
|
|
|
113
113
|
if (const BranchInst* br = SVFUtil::dyn_cast<BranchInst>(inst))
|
|
114
114
|
{
|
|
115
|
+
assert(branchID <= 2 && "if/else has more than two branches?");
|
|
115
116
|
if(br->isConditional())
|
|
116
|
-
icfg->addConditionalIntraEdge(srcNode, dstNode, br->getCondition(), branchID);
|
|
117
|
+
icfg->addConditionalIntraEdge(srcNode, dstNode, br->getCondition(), 1 - branchID);
|
|
117
118
|
else
|
|
118
119
|
icfg->addIntraEdge(srcNode, dstNode);
|
|
119
120
|
}
|
|
120
121
|
else if (const SwitchInst* si = SVFUtil::dyn_cast<SwitchInst>(inst))
|
|
121
122
|
{
|
|
122
|
-
|
|
123
|
+
/// branch condition value
|
|
124
|
+
const ConstantInt* condVal = const_cast<SwitchInst*>(si)->findCaseDest(const_cast<BasicBlock*>(succ->getParent()));
|
|
125
|
+
/// default case is set to -1;
|
|
126
|
+
s64_t val = condVal ? condVal->getSExtValue() : -1;
|
|
127
|
+
icfg->addConditionalIntraEdge(srcNode, dstNode, si->getCondition(),val);
|
|
123
128
|
}
|
|
124
129
|
else
|
|
125
130
|
icfg->addIntraEdge(srcNode, dstNode);
|
|
@@ -74,7 +74,7 @@ SVFIR* SVFIRBuilder::build(SVFModule* svfModule)
|
|
|
74
74
|
{
|
|
75
75
|
const SVFFunction& fun = **fit;
|
|
76
76
|
/// collect return node of function fun
|
|
77
|
-
if(!
|
|
77
|
+
if(!fun.isDeclaration())
|
|
78
78
|
{
|
|
79
79
|
/// Return SVFIR node will not be created for function which can not
|
|
80
80
|
/// reach the return instruction due to call to abort(), exit(),
|
|
@@ -629,7 +629,7 @@ void SVFIRBuilder::visitPHINode(PHINode &inst)
|
|
|
629
629
|
const Value* val = inst.getIncomingValue(i);
|
|
630
630
|
const Instruction* incomingInst = SVFUtil::dyn_cast<Instruction>(val);
|
|
631
631
|
assert((incomingInst==nullptr) || (incomingInst->getFunction() == inst.getFunction()));
|
|
632
|
-
const Instruction* predInst = &inst.getIncomingBlock(i)->
|
|
632
|
+
const Instruction* predInst = &inst.getIncomingBlock(i)->back();
|
|
633
633
|
const ICFGNode* icfgNode = pag->getICFG()->getICFGNode(predInst);
|
|
634
634
|
NodeID src = getValueNode(val);
|
|
635
635
|
addPhiStmt(dst,src,icfgNode);
|
|
@@ -893,7 +893,7 @@ void SVFIRBuilder::visitBranchInst(BranchInst &inst){
|
|
|
893
893
|
BranchStmt::SuccAndCondPairVec successors;
|
|
894
894
|
for (u32_t i = 0; i < inst.getNumSuccessors(); ++i)
|
|
895
895
|
{
|
|
896
|
-
const Instruction* succInst = &inst.getSuccessor(i)->
|
|
896
|
+
const Instruction* succInst = &inst.getSuccessor(i)->front();
|
|
897
897
|
const ICFGNode* icfgNode = pag->getICFG()->getICFGNode(succInst);
|
|
898
898
|
successors.push_back(std::make_pair(icfgNode, 1-i));
|
|
899
899
|
}
|
|
@@ -1687,6 +1687,18 @@ void SVFIRBuilder::setCurrentBBAndValueForPAGEdge(PAGEdge* edge)
|
|
|
1687
1687
|
|
|
1688
1688
|
pag->addToSVFStmtList(icfgNode,edge);
|
|
1689
1689
|
icfgNode->addSVFStmt(edge);
|
|
1690
|
+
if(const CallPE* callPE = SVFUtil::dyn_cast<CallPE>(edge)){
|
|
1691
|
+
CallICFGNode* callNode = const_cast<CallICFGNode*>(callPE->getCallSite());
|
|
1692
|
+
FunEntryICFGNode* entryNode = const_cast<FunEntryICFGNode*>(callPE->getFunEntryICFGNode());
|
|
1693
|
+
if(ICFGEdge* edge = pag->getICFG()->hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))
|
|
1694
|
+
SVFUtil::cast<CallCFGEdge>(edge)->addCallPE(callPE);
|
|
1695
|
+
}
|
|
1696
|
+
else if(const RetPE* retPE = SVFUtil::dyn_cast<RetPE>(edge)){
|
|
1697
|
+
RetICFGNode* retNode = const_cast<RetICFGNode*>(retPE->getCallSite()->getRetICFGNode());
|
|
1698
|
+
FunExitICFGNode* exitNode = const_cast<FunExitICFGNode*>(retPE->getFunExitICFGNode());
|
|
1699
|
+
if(ICFGEdge* edge = pag->getICFG()->hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))
|
|
1700
|
+
SVFUtil::cast<RetCFGEdge>(edge)->addRetPE(retPE);
|
|
1701
|
+
}
|
|
1690
1702
|
}
|
|
1691
1703
|
|
|
1692
1704
|
|
package/lib/Util/ExtAPI.cpp
CHANGED
|
@@ -461,7 +461,6 @@ static const ei_pair ei_pairs[]=
|
|
|
461
461
|
{"SSLv23_client_method", ExtAPI::EFT_ALLOC},
|
|
462
462
|
{"SyGetmem", ExtAPI::EFT_ALLOC},
|
|
463
463
|
{"TLSv1_client_method", ExtAPI::EFT_ALLOC},
|
|
464
|
-
{"Void_ExtendCore", ExtAPI::EFT_ALLOC},
|
|
465
464
|
{"XAddExtension", ExtAPI::EFT_ALLOC},
|
|
466
465
|
{"XAllocClassHint", ExtAPI::EFT_ALLOC},
|
|
467
466
|
{"XAllocSizeHints", ExtAPI::EFT_ALLOC},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.372",
|
|
4
4
|
"description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|