svf-tools 1.0.571 → 1.0.573
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/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +10 -10
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +19 -2
- package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PEGGrammar_8txt.html +2 -2
- package/SVF-doxygen/html/html/VFG_8txt.html +18 -0
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +80 -84
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder.html +16 -3
- package/SVF-doxygen/html/html/functions_func_g.html +11 -14
- package/SVF-doxygen/html/html/functions_func_r.html +4 -1
- package/SVF-doxygen/html/html/functions_func_s.html +2 -2
- package/SVF-doxygen/html/html/functions_g.html +13 -16
- package/SVF-doxygen/html/html/functions_o.html +12 -12
- package/SVF-doxygen/html/html/functions_p.html +6 -6
- package/SVF-doxygen/html/html/functions_r.html +9 -4
- package/SVF-doxygen/html/html/functions_s.html +7 -7
- package/SVF-doxygen/html/html/functions_t.html +7 -5
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_w.html +11 -11
- package/SVF-doxygen/html/html/globals_e.html +1 -0
- package/SVF-doxygen/html/html/globals_vars.html +1 -0
- package/SVF-doxygen/html/html/search/all_10.js +3 -3
- package/SVF-doxygen/html/html/search/all_11.js +2 -1
- package/SVF-doxygen/html/html/search/all_12.js +6 -6
- package/SVF-doxygen/html/html/search/all_13.js +3 -3
- package/SVF-doxygen/html/html/search/all_15.js +3 -3
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_5.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +1 -2
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +1 -0
- package/SVF-doxygen/html/html/search/functions_11.js +2 -2
- package/SVF-doxygen/html/html/search/functions_6.js +1 -2
- package/SVF-doxygen/html/html/search/variables_13.js +1 -1
- package/SVF-doxygen/html/html/search/variables_5.js +1 -1
- package/build.sh +1 -1
- package/include/CFL/CFGNormalizer.h +3 -3
- package/include/CFL/VFG.txt +2 -1
- package/lib/CFL/CFGNormalizer.cpp +41 -42
- package/lib/CFL/CFLGraphBuilder.cpp +74 -29
- package/lib/CFL/CFLVF.cpp +1 -1
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ var searchData=
|
|
|
66
66
|
['opver',['opVer',['../classSVF_1_1MSSACHI.html#a86f2f3f6e2215cdbe31caee048510757',1,'SVF::MSSACHI']]],
|
|
67
67
|
['opverbegin',['opVerBegin',['../classSVF_1_1MSSAPHISVFGNode.html#ace39549f7e300cb4a0ac7b8506a8632a',1,'SVF::MSSAPHISVFGNode::opVerBegin()'],['../classSVF_1_1IntraMSSAPHISVFGNode.html#aff4e88ef6569d3c4f29b532d610cd2b9',1,'SVF::IntraMSSAPHISVFGNode::opVerBegin()'],['../classSVF_1_1CmpVFGNode.html#a78fb624f0ca9ff16e6a8e5fd1c384904',1,'SVF::CmpVFGNode::opVerBegin()'],['../classSVF_1_1BinaryOPVFGNode.html#adaff45c46c4cc8158bd3147d304deab5',1,'SVF::BinaryOPVFGNode::opVerBegin()'],['../classSVF_1_1UnaryOPVFGNode.html#ab63ddaa05181f2c60ca7a001001a908d',1,'SVF::UnaryOPVFGNode::opVerBegin()'],['../classSVF_1_1PHIVFGNode.html#a2e00f6d582aa4ac9aa116cc6d5c79369',1,'SVF::PHIVFGNode::opVerBegin()'],['../classSVF_1_1MSSAPHI.html#a940f9afa26bf54c7175276ea27003c2f',1,'SVF::MSSAPHI::opVerBegin()']]],
|
|
68
68
|
['opverend',['opVerEnd',['../classSVF_1_1MSSAPHISVFGNode.html#a33ec42a011781bbb63dce6dbe5f88bdf',1,'SVF::MSSAPHISVFGNode::opVerEnd()'],['../classSVF_1_1IntraMSSAPHISVFGNode.html#a5e78faceb497b0f3cb6f8f1a9fc4f799',1,'SVF::IntraMSSAPHISVFGNode::opVerEnd()'],['../classSVF_1_1CmpVFGNode.html#ae5ba94ffae500168f0e5c1b1ce78af9c',1,'SVF::CmpVFGNode::opVerEnd()'],['../classSVF_1_1BinaryOPVFGNode.html#aed5a32d1a145df7007ba7d934e4c2bd4',1,'SVF::BinaryOPVFGNode::opVerEnd()'],['../classSVF_1_1UnaryOPVFGNode.html#af31a06d33f41bdcff625ac23e269708c',1,'SVF::UnaryOPVFGNode::opVerEnd()'],['../classSVF_1_1PHIVFGNode.html#add18c60773871744123d12a037e78e20',1,'SVF::PHIVFGNode::opVerEnd()'],['../classSVF_1_1MultiOpndStmt.html#ad53097d07487d564e7d13f9d7d9ab10c',1,'SVF::MultiOpndStmt::opVerEnd()'],['../classSVF_1_1MSSAPHI.html#a2a49ad9d2eedf1dea98d725b13878d88',1,'SVF::MSSAPHI::opVerEnd()']]],
|
|
69
|
-
['opvers',['
|
|
69
|
+
['opvers',['opVers',['../classSVF_1_1MSSAPHISVFGNode.html#a9c327923ab939e06877441ebde5c1139',1,'SVF::MSSAPHISVFGNode::opVers()'],['../classSVF_1_1CmpVFGNode.html#aae30d80fd848d62467476d21c691573c',1,'SVF::CmpVFGNode::opVers()'],['../classSVF_1_1BinaryOPVFGNode.html#ae803603f567cc28f5a7e1b66fb324cbc',1,'SVF::BinaryOPVFGNode::opVers()'],['../classSVF_1_1UnaryOPVFGNode.html#ae6fdb5759a0dfeb0635ffd758b752dc1',1,'SVF::UnaryOPVFGNode::opVers()'],['../classSVF_1_1PHIVFGNode.html#a08ccd55d0fb6ce33f69959349008daca',1,'SVF::PHIVFGNode::opVers()'],['../classSVF_1_1MSSAPHI.html#abdabd6dff67cd59622f18d48e8b34271',1,'SVF::MSSAPHI::opVers()'],['../classSVF_1_1MSSAPHISVFGNode.html#a300f37203eb84fc57e005c27ce0422fb',1,'SVF::MSSAPHISVFGNode::OPVers()'],['../classSVF_1_1CmpVFGNode.html#a0db4ada3c366c811962415454a859b22',1,'SVF::CmpVFGNode::OPVers()'],['../classSVF_1_1BinaryOPVFGNode.html#a880c8260e3acb3fbe431446f2c1f5990',1,'SVF::BinaryOPVFGNode::OPVers()'],['../classSVF_1_1UnaryOPVFGNode.html#af96b598342bbcbcd739e2603acfc5a41',1,'SVF::UnaryOPVFGNode::OPVers()'],['../classSVF_1_1PHIVFGNode.html#a44ba5254e5f4def007c99916cd58668c',1,'SVF::PHIVFGNode::OPVers()'],['../classSVF_1_1MSSAPHI.html#a622892bb1c3c151e646ae1a46838c3ba',1,'SVF::MSSAPHI::OPVers()']]],
|
|
70
70
|
['or',['OR',['../classSVF_1_1Z3Expr.html#ac063ed06c3495b790c02fe57c781b34e',1,'SVF::Z3Expr']]],
|
|
71
71
|
['orderedmap',['OrderedMap',['../namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6',1,'SVF']]],
|
|
72
72
|
['orderednodeset',['OrderedNodeSet',['../namespaceSVF.html#a3c2bd95727ec0d9c55c631b6617026c8',1,'SVF']]],
|
|
@@ -42,6 +42,7 @@ var searchData=
|
|
|
42
42
|
['removecxtstmttospan',['removeCxtStmtToSpan',['../classSVF_1_1LockAnalysis.html#a0b21446e6d5dfc1b5d0ebd75895225dd',1,'SVF::LockAnalysis']]],
|
|
43
43
|
['removedirectedge',['removeDirectEdge',['../classSVF_1_1ConstraintGraph.html#a9fc73676ea133651604e2528fe1d8244',1,'SVF::ConstraintGraph']]],
|
|
44
44
|
['removedpmfromloc',['removeDpmFromLoc',['../classSVF_1_1DDAVFSolver.html#a00ae738a76564b7b334faae567674e34',1,'SVF::DDAVFSolver']]],
|
|
45
|
+
['removefirstsymbol',['removeFirstSymbol',['../classSVF_1_1CFGNormalizer.html#afd29c476dad9728a10e19561e846f97e',1,'SVF::CFGNormalizer']]],
|
|
45
46
|
['removefront',['removeFront',['../classSVF_1_1FIFOWorkList.html#a621fe65af285665396fa10af9f96ef3a',1,'SVF::FIFOWorkList']]],
|
|
46
47
|
['removegnode',['removeGNode',['../classSVF_1_1GenericGraph.html#a1817b65e76052f11e36a67d6b9efd915',1,'SVF::GenericGraph']]],
|
|
47
48
|
['removeicfgedge',['removeICFGEdge',['../classSVF_1_1ICFG.html#a534625b10673efe5b0f344bfebf9b3cf',1,'SVF::ICFG']]],
|
|
@@ -167,7 +167,7 @@ var searchData=
|
|
|
167
167
|
['stripqualifiers',['stripQualifiers',['../classSVF_1_1DCHGraph.html#a175ed6ad0c9b23d5617f755ab96c76c4',1,'SVF::DCHGraph']]],
|
|
168
168
|
['stripspace',['stripSpace',['../classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8',1,'SVF::GrammarBuilder']]],
|
|
169
169
|
['strongupdateoutfromin',['strongUpdateOutFromIn',['../classSVF_1_1FlowSensitive.html#a8ebe4342c1496b906ee1b6450558c3e8',1,'SVF::FlowSensitive']]],
|
|
170
|
-
['strtrans',['strTrans',['../classSVF_1_1CFGNormalizer.html#
|
|
170
|
+
['strtrans',['strTrans',['../classSVF_1_1CFGNormalizer.html#a4b9b6c676ce6514ae725f543b1e07acf',1,'SVF::CFGNormalizer']]],
|
|
171
171
|
['subnodes',['subNodes',['../classSVF_1_1SCCDetection_1_1GNodeSCCInfo.html#a48981e6555ad221d08f16ed2df708027',1,'SVF::SCCDetection::GNodeSCCInfo::subNodes()'],['../classSVF_1_1SCCDetection_1_1GNodeSCCInfo.html#aa2b23b22bb0304ce07ab9b14f0fdc395',1,'SVF::SCCDetection::GNodeSCCInfo::subNodes() const'],['../classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d',1,'SVF::SCCDetection::subNodes()']]],
|
|
172
172
|
['sucmsg',['sucMsg',['../namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4',1,'SVF::SVFUtil']]],
|
|
173
173
|
['suffix_5fobject',['suffix_object',['../cJSON_8cpp.html#a5d61bcc0045ace88c2ae04f0928eeace',1,'cJSON.cpp']]],
|
|
@@ -179,7 +179,7 @@ var searchData=
|
|
|
179
179
|
['svfgnodelockspan',['SVFGNodeLockSpan',['../classSVF_1_1SVFGNodeLockSpan.html#a43f4d595b31259576b141cb99883938e',1,'SVF::SVFGNodeLockSpan']]],
|
|
180
180
|
['svfgopt',['SVFGOPT',['../classSVF_1_1SVFGOPT.html#a239475c15b39d54c632427307b8e9350',1,'SVF::SVFGOPT']]],
|
|
181
181
|
['svfgsccdetection',['SVFGSCCDetection',['../classSVF_1_1DDAVFSolver.html#aba0ec611a5cfd096ac0b8b11e0bd5580',1,'SVF::DDAVFSolver']]],
|
|
182
|
-
['svfgstat',['
|
|
182
|
+
['svfgstat',['svfgStat',['../classSVF_1_1FlowSensitive.html#a5f015d8f2b0956306822172d02b415c3',1,'SVF::FlowSensitive::svfgStat()'],['../classSVF_1_1SVFGStat.html#ae61d5bd92ef495a0f6c2f9dedac3da03',1,'SVF::SVFGStat::SVFGStat()']]],
|
|
183
183
|
['svfir',['SVFIR',['../classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636',1,'SVF::SVFIR']]],
|
|
184
184
|
['svfirbuilder',['SVFIRBuilder',['../classSVF_1_1SVFIRBuilder.html#a8c25c3903cda26312f182014f29069fc',1,'SVF::SVFIRBuilder']]],
|
|
185
185
|
['svfloop',['SVFLoop',['../classSVF_1_1SVFLoop.html#a25b9a079f48aa0374c91be6a1e9697f8',1,'SVF::SVFLoop']]],
|
|
@@ -253,8 +253,7 @@ var searchData=
|
|
|
253
253
|
['getfieldtypes',['getFieldTypes',['../classSVF_1_1DCHGraph.html#ae9a0007299178912e2568dc7158d6824',1,'SVF::DCHGraph']]],
|
|
254
254
|
['getfieldvalnodenum',['getFieldValNodeNum',['../classSVF_1_1SVFIR.html#a8a24e0bf9f95fc1519d4013e0e82dec9',1,'SVF::SVFIR']]],
|
|
255
255
|
['getfilename',['getFileName',['../classSVF_1_1PAGBuilderFromFile.html#aaaa1e516e5eeceece371a9178142c3ff',1,'SVF::PAGBuilderFromFile']]],
|
|
256
|
-
['
|
|
257
|
-
['getfilledproductions',['getFilledProductions',['../classSVF_1_1CFGNormalizer.html#ae5932d3d9330e28e5fa89402a5f5ff33',1,'SVF::CFGNormalizer']]],
|
|
256
|
+
['getfilledproductions',['getFilledProductions',['../classSVF_1_1CFGNormalizer.html#add319949e856049d3e898848a02a75b7',1,'SVF::CFGNormalizer']]],
|
|
258
257
|
['getfiobjvar',['getFIObjVar',['../classSVF_1_1ConstraintGraph.html#a7c8a29ad1d270fca745f233bb4800731',1,'SVF::ConstraintGraph::getFIObjVar()'],['../classSVF_1_1PointerAnalysis.html#a68b05bc02c5473c1e0d39ac4f4454bac',1,'SVF::PointerAnalysis::getFIObjVar()'],['../classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354',1,'SVF::SVFIR::getFIObjVar(const MemObj *obj) const'],['../classSVF_1_1SVFIR.html#ac9f860028c8cbd364720888084701628',1,'SVF::SVFIR::getFIObjVar(NodeID id) const']]],
|
|
259
258
|
['getfirstrhs2prods',['getFirstRHS2Prods',['../classSVF_1_1CFLGrammar.html#ac0f09c94e9c6efc00398ed7d5ca1fe0f',1,'SVF::CFLGrammar']]],
|
|
260
259
|
['getfirstrhssymbol',['getFirstRHSSymbol',['../classSVF_1_1CFLGrammar.html#a837d2db607e1c9403db4d3021f4e52d4',1,'SVF::CFLGrammar']]],
|
|
@@ -25,7 +25,7 @@ var searchData=
|
|
|
25
25
|
['timeofbuildingsymboltable',['timeOfBuildingSymbolTable',['../classSVF_1_1SVFStat.html#ae89293bc063bdc74a988e9c37c70321e',1,'SVF::SVFStat']]],
|
|
26
26
|
['timeofcollapse',['timeOfCollapse',['../classSVF_1_1CFLAlias.html#a1615a97f72dfa8f979c429b3d4f3463b',1,'SVF::CFLAlias::timeOfCollapse()'],['../classSVF_1_1AndersenBase.html#ad40b196c2c699bd115529b806d20de25',1,'SVF::AndersenBase::timeOfCollapse()']]],
|
|
27
27
|
['timeofcreatemuchi',['TimeOfCreateMUCHI',['../classSVF_1_1MemSSAStat.html#a48c70f0ed1c7d031a3cd528035162e52',1,'SVF::MemSSAStat::TimeOfCreateMUCHI()'],['../classSVF_1_1MemSSA.html#a4d2418b7df74f23d8fd328f66e29f198',1,'SVF::MemSSA::timeOfCreateMUCHI()']]],
|
|
28
|
-
['timeofgeneratingmemregions',['
|
|
28
|
+
['timeofgeneratingmemregions',['TimeOfGeneratingMemRegions',['../classSVF_1_1MemSSAStat.html#a74c36654b7452aa94aa241881f0a83c5',1,'SVF::MemSSAStat::TimeOfGeneratingMemRegions()'],['../classSVF_1_1MemSSA.html#a37dca8a7d155de4870358146d219b5e5',1,'SVF::MemSSA::timeOfGeneratingMemRegions()']]],
|
|
29
29
|
['timeofinsertingphi',['TimeOfInsertingPHI',['../classSVF_1_1MemSSAStat.html#a0c24822c8549af6a96e82312954fab9b',1,'SVF::MemSSAStat::TimeOfInsertingPHI()'],['../classSVF_1_1MemSSA.html#a3c7b5fa73fdc7c805ee3673fbe812b44',1,'SVF::MemSSA::timeOfInsertingPHI()']]],
|
|
30
30
|
['timeofprocesscopygep',['timeOfProcessCopyGep',['../classSVF_1_1CFLAlias.html#a2339baef879400c3abceaa6cd710438f',1,'SVF::CFLAlias::timeOfProcessCopyGep()'],['../classSVF_1_1AndersenBase.html#aae14de6fbca9280d8d0290326aa493f0',1,'SVF::AndersenBase::timeOfProcessCopyGep()']]],
|
|
31
31
|
['timeofprocessloadstore',['timeOfProcessLoadStore',['../classSVF_1_1CFLAlias.html#ab8a98cf58afbc7fd00bd42b312073012',1,'SVF::CFLAlias::timeOfProcessLoadStore()'],['../classSVF_1_1AndersenBase.html#a9fe738f1e11c80006d540f246a80bfdf',1,'SVF::AndersenBase::timeOfProcessLoadStore()']]],
|
|
@@ -21,7 +21,7 @@ var searchData=
|
|
|
21
21
|
['entry',['entry',['../classSVF_1_1CallPE.html#a88e420e259b8d7d34c9850ddde53d372',1,'SVF::CallPE']]],
|
|
22
22
|
['entryfuncset',['entryFuncSet',['../classSVF_1_1TCT.html#a140eaf9440ae9d52dbfb659967aa449a',1,'SVF::TCT']]],
|
|
23
23
|
['entryicfgedges',['entryICFGEdges',['../classSVF_1_1SVFLoop.html#a681d712db88d105c8a2f758de3d7e72e',1,'SVF::SVFLoop']]],
|
|
24
|
-
['epsilon',['epsilon',['../CFLGrammar_8txt.html#a114c2e5cd44b3ea4720e9191ed819f3b',1,'CFLGrammar.txt']]],
|
|
24
|
+
['epsilon',['epsilon',['../CFLGrammar_8txt.html#a114c2e5cd44b3ea4720e9191ed819f3b',1,'epsilon(): CFLGrammar.txt'],['../VFG_8txt.html#ad62a43ea41bf293d8609998d1c808c1f',1,'epsilon(): VFG.txt']]],
|
|
25
25
|
['epsilonprods',['epsilonProds',['../classSVF_1_1CFLGrammar.html#a4d9770a2b935bcad74ae551389925f74',1,'SVF::CFLGrammar']]],
|
|
26
26
|
['equivalentobject',['equivalentObject',['../classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f',1,'SVF::VersionedFlowSensitive']]],
|
|
27
27
|
['evaltime',['EvalTime',['../classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a1d98862e19affdd08740f85490d0d856',1,'SVF::NodeIDAllocator::Clusterer']]],
|
package/build.sh
CHANGED
|
@@ -72,11 +72,11 @@ private:
|
|
|
72
72
|
|
|
73
73
|
GrammarBase::Symbol check_head(GrammarBase::SymbolMap<GrammarBase::Symbol, GrammarBase::Productions>& grammar, GrammarBase::Production& rule);
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
void strTrans(std::string strPro, CFLGrammar *grammar, GrammarBase::Production& normalProd);
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
void getFilledProductions(GrammarBase::Production &prod,const NodeSet& nodeSet, CFLGrammar *grammar, GrammarBase::Productions& normalProds);
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
void removeFirstSymbol(CFLGrammar *grammar);
|
|
80
80
|
};
|
|
81
81
|
|
|
82
82
|
} // End namespace SVF
|
package/include/CFL/VFG.txt
CHANGED
|
@@ -60,6 +60,14 @@ CFLGrammar* CFGNormalizer::normalize(GrammarBase *generalGrammar)
|
|
|
60
60
|
|
|
61
61
|
CFLGrammar* CFGNormalizer::fillAttribute(CFLGrammar *grammar, const Map<CFLGrammar::Kind, Set<CFLGrammar::Attribute>>& kind2AttrsMap)
|
|
62
62
|
{
|
|
63
|
+
NodeSet nodeSet = {};
|
|
64
|
+
for (auto pair: kind2AttrsMap)
|
|
65
|
+
{
|
|
66
|
+
for (auto attri: pair.second)
|
|
67
|
+
{
|
|
68
|
+
nodeSet.insert(attri);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
63
71
|
for(auto symProdsPair: grammar->getRawProductions())
|
|
64
72
|
{
|
|
65
73
|
for(auto prod: symProdsPair.second)
|
|
@@ -68,8 +76,9 @@ CFLGrammar* CFGNormalizer::fillAttribute(CFLGrammar *grammar, const Map<CFLGramm
|
|
|
68
76
|
/// so append to the begin of the production
|
|
69
77
|
GrammarBase::Production tempP = prod;
|
|
70
78
|
tempP.insert(tempP.begin(), symProdsPair.first);
|
|
71
|
-
GrammarBase::Productions
|
|
72
|
-
|
|
79
|
+
GrammarBase::Productions normalProds;
|
|
80
|
+
getFilledProductions(tempP, nodeSet, grammar, normalProds);
|
|
81
|
+
for (auto filledProd : normalProds)
|
|
73
82
|
{
|
|
74
83
|
insertToCFLGrammar(grammar, filledProd);
|
|
75
84
|
}
|
|
@@ -83,19 +92,7 @@ void CFGNormalizer::ebnf_bin(CFLGrammar *grammar)
|
|
|
83
92
|
{
|
|
84
93
|
GrammarBase::SymbolMap<GrammarBase::Symbol, GrammarBase::Productions> new_grammar = {};
|
|
85
94
|
std::string tempStr = "";
|
|
86
|
-
|
|
87
|
-
for(auto head : grammar->getRawProductions())
|
|
88
|
-
{
|
|
89
|
-
for(auto rule: head.second)
|
|
90
|
-
{
|
|
91
|
-
|
|
92
|
-
GrammarBase::Production long_run = rule;
|
|
93
|
-
long_run.erase(long_run.begin());
|
|
94
|
-
auto it = grammar->getRawProductions().at(head.first).find(rule);
|
|
95
|
-
grammar->getRawProductions().at(head.first).erase(it);
|
|
96
|
-
grammar->getRawProductions()[head.first].insert(long_run);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
95
|
+
removeFirstSymbol(grammar);
|
|
99
96
|
|
|
100
97
|
auto rawProductions = grammar->getRawProductions();
|
|
101
98
|
|
|
@@ -220,26 +217,13 @@ void CFGNormalizer::ebnf_bin(CFLGrammar *grammar)
|
|
|
220
217
|
}
|
|
221
218
|
}
|
|
222
219
|
|
|
223
|
-
GrammarBase::Production CFGNormalizer::getFilledProd(GrammarBase::Production &prod, CFLGrammar::Attribute attribute, CFLGrammar *grammar)
|
|
224
|
-
{
|
|
225
|
-
GrammarBase::Production tempP = prod;
|
|
226
|
-
for (int i = 0; i < int(prod.size()); i++)
|
|
227
|
-
{
|
|
228
|
-
if (grammar->getAttrSyms().find(prod[i].kind) != grammar->getAttrSyms().end())
|
|
229
|
-
{
|
|
230
|
-
tempP[i] = prod[i].kind;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
return tempP;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
220
|
///Loop through provided production based on existence of attribute of attribute variable
|
|
237
221
|
///and expand to productions set
|
|
238
222
|
///e.g Xi -> Y Zi with Xi i = 0, 1, Yi i = 0,2
|
|
239
223
|
///Will get {X0 -> Y Z0, X1 -> Y Z1, X2 -> Y Z2}
|
|
240
|
-
|
|
224
|
+
void CFGNormalizer::getFilledProductions(GrammarBase::Production &prod, const NodeSet& nodeSet, CFLGrammar *grammar, GrammarBase::Productions& normalProds)
|
|
241
225
|
{
|
|
242
|
-
|
|
226
|
+
normalProds.clear();
|
|
243
227
|
CFLFIFOWorkList<GrammarBase::Production> worklist;
|
|
244
228
|
worklist.push(prod);
|
|
245
229
|
while( worklist.empty() == false )
|
|
@@ -258,10 +242,10 @@ GrammarBase::Productions CFGNormalizer::getFilledProductions(GrammarBase::Produc
|
|
|
258
242
|
}
|
|
259
243
|
if ( currentVariableAttribute == 0)
|
|
260
244
|
{
|
|
261
|
-
|
|
245
|
+
normalProds.insert(currentProduction);
|
|
262
246
|
continue;
|
|
263
247
|
}
|
|
264
|
-
|
|
248
|
+
//*(kind2AttriMap.find(baseKind));
|
|
265
249
|
//for (auto attribute : nodeSet.second)
|
|
266
250
|
for (auto attribute : nodeSet)
|
|
267
251
|
{
|
|
@@ -285,7 +269,7 @@ GrammarBase::Productions CFGNormalizer::getFilledProductions(GrammarBase::Produc
|
|
|
285
269
|
}
|
|
286
270
|
if ( continueToFill == false)
|
|
287
271
|
{
|
|
288
|
-
|
|
272
|
+
normalProds.insert(fillingProduction);
|
|
289
273
|
}
|
|
290
274
|
else
|
|
291
275
|
{
|
|
@@ -293,7 +277,6 @@ GrammarBase::Productions CFGNormalizer::getFilledProductions(GrammarBase::Produc
|
|
|
293
277
|
}
|
|
294
278
|
}
|
|
295
279
|
}
|
|
296
|
-
return filledProductioins;
|
|
297
280
|
}
|
|
298
281
|
|
|
299
282
|
int CFGNormalizer::ebnfBracketMatch(GrammarBase::Production &prod, int i, CFLGrammar *grammar)
|
|
@@ -422,11 +405,12 @@ void CFGNormalizer::ebnfSignReplace(char sign, CFLGrammar *grammar)
|
|
|
422
405
|
if (sign == '*' || sign == '?')
|
|
423
406
|
{
|
|
424
407
|
/// Insert Back the Group
|
|
425
|
-
GrammarBase::Production
|
|
408
|
+
GrammarBase::Production normalProd;
|
|
409
|
+
strTrans(rep.first, grammar, normalProd);
|
|
426
410
|
GrammarBase::Production withoutSign = {};
|
|
427
411
|
if (sign == '*')
|
|
428
412
|
{
|
|
429
|
-
for (auto &word :
|
|
413
|
+
for (auto &word : normalProd)
|
|
430
414
|
{
|
|
431
415
|
if (word != grammar->str2Symbol("*") && word != grammar->str2Symbol("(") && word != grammar->str2Symbol(")"))
|
|
432
416
|
{
|
|
@@ -437,7 +421,7 @@ void CFGNormalizer::ebnfSignReplace(char sign, CFLGrammar *grammar)
|
|
|
437
421
|
}
|
|
438
422
|
if (sign == '?')
|
|
439
423
|
{
|
|
440
|
-
for (auto &word :
|
|
424
|
+
for (auto &word : normalProd)
|
|
441
425
|
{
|
|
442
426
|
if (word != grammar->str2Symbol("?") && word != grammar->str2Symbol("(") && word != grammar->str2Symbol(")"))
|
|
443
427
|
{
|
|
@@ -451,9 +435,8 @@ void CFGNormalizer::ebnfSignReplace(char sign, CFLGrammar *grammar)
|
|
|
451
435
|
}
|
|
452
436
|
}
|
|
453
437
|
|
|
454
|
-
|
|
438
|
+
void CFGNormalizer::strTrans(std::string LHS, CFLGrammar *grammar, GrammarBase::Production& normalProd)
|
|
455
439
|
{
|
|
456
|
-
GrammarBase::Production prod = {};
|
|
457
440
|
std::smatch matches;
|
|
458
441
|
std::regex LHSReg("\\s*(.*)");
|
|
459
442
|
std::string delimiter;
|
|
@@ -466,10 +449,9 @@ GrammarBase::Production CFGNormalizer::strTrans(std::string LHS, CFLGrammar *gra
|
|
|
466
449
|
{
|
|
467
450
|
word = LHS.substr(0, pos);
|
|
468
451
|
LHS.erase(0, pos + delimiter.length());
|
|
469
|
-
|
|
452
|
+
normalProd.push_back(grammar->str2Symbol(word));
|
|
470
453
|
}
|
|
471
|
-
|
|
472
|
-
return prod;
|
|
454
|
+
normalProd.push_back(grammar->str2Symbol(LHS));
|
|
473
455
|
}
|
|
474
456
|
|
|
475
457
|
GrammarBase::Symbol CFGNormalizer::check_head(GrammarBase::SymbolMap<GrammarBase::Symbol, GrammarBase::Productions> &grammar, GrammarBase::Production &rule)
|
|
@@ -511,3 +493,20 @@ void CFGNormalizer::insertToCFLGrammar(CFLGrammar *grammar, GrammarBase::Product
|
|
|
511
493
|
grammar->getSecondRHS2Prods()[prod[2]].insert(prod);
|
|
512
494
|
}
|
|
513
495
|
}
|
|
496
|
+
|
|
497
|
+
void CFGNormalizer::removeFirstSymbol(CFLGrammar *grammar)
|
|
498
|
+
{
|
|
499
|
+
// Remove First Terminal
|
|
500
|
+
for(auto head : grammar->getRawProductions())
|
|
501
|
+
{
|
|
502
|
+
for(auto rule: head.second)
|
|
503
|
+
{
|
|
504
|
+
|
|
505
|
+
GrammarBase::Production long_run = rule;
|
|
506
|
+
long_run.erase(long_run.begin());
|
|
507
|
+
auto it = grammar->getRawProductions().at(head.first).find(rule);
|
|
508
|
+
grammar->getRawProductions().at(head.first).erase(it);
|
|
509
|
+
grammar->getRawProductions()[head.first].insert(long_run);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
@@ -433,35 +433,80 @@ CFLGraph* VFCFLGraphBuilder::buildBigraph(SVFG *graph, Kind startKind, GrammarBa
|
|
|
433
433
|
CFLNode* node = new CFLNode((*it).first);
|
|
434
434
|
cflGraph->addCFLNode((*it).first, node);
|
|
435
435
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
436
|
+
for(auto it = graph->begin(); it!= graph->end(); it++)
|
|
437
|
+
{
|
|
438
|
+
VFGNode* node = (*it).second;
|
|
439
|
+
for(VFGEdge* edge : node->getOutEdges())
|
|
440
|
+
{
|
|
441
|
+
CFLGrammar::Kind edgeLabel;
|
|
442
|
+
// Get 'a' edge : IntraDirectVF || IntraIndirectVF
|
|
443
|
+
if (edge->getEdgeKind() == VFGEdge::IntraDirectVF || edge->getEdgeKind() == VFGEdge::IntraIndirectVF || edge->getEdgeKind() == VFGEdge::TheadMHPIndirectVF )
|
|
444
|
+
{
|
|
445
|
+
edgeLabel = 0;
|
|
446
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getSrcID()), cflGraph->getGNode(edge->getDstID()), edgeLabel);
|
|
447
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getSrcID()), cflGraph->getGNode(edge->getDstID()), edgeLabel);
|
|
448
|
+
std::string key = kind2LabelMap[edge->getEdgeKind()];
|
|
449
|
+
key.append("bar");
|
|
450
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getDstID()), cflGraph->getGNode(edge->getSrcID()), label2KindMap[key]);
|
|
451
|
+
}
|
|
452
|
+
// Get 'call' edge : CallDirVF || CallIndVF
|
|
453
|
+
else if ( edge->getEdgeKind() == VFGEdge::CallDirVF )
|
|
454
|
+
{
|
|
455
|
+
edgeLabel = 1;
|
|
456
|
+
CallDirSVFGEdge *attributedEdge = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge);
|
|
457
|
+
CFLGrammar::Attribute attr = attributedEdge->getCallSiteId();
|
|
458
|
+
addAttribute(edgeLabel, attr);
|
|
459
|
+
edgeLabel = CFLGrammar::getAttributedKind(attr, edgeLabel);
|
|
460
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getSrcID()), cflGraph->getGNode(edge->getDstID()), edgeLabel);
|
|
461
|
+
std::string key = kind2LabelMap[edge->getEdgeKind()];
|
|
462
|
+
key.append("bar"); // for example Gep_i should be Gepbar_i, not Gep_ibar
|
|
463
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getDstID()), cflGraph->getGNode(edge->getSrcID()), CFLGrammar::getAttributedKind(attr, label2KindMap[key]));
|
|
464
|
+
addAttribute(label2KindMap[key], attr);
|
|
465
|
+
}
|
|
466
|
+
// Get 'call' edge : CallIndVF
|
|
467
|
+
else if ( edge->getEdgeKind() == VFGEdge::CallIndVF )
|
|
468
|
+
{
|
|
469
|
+
edgeLabel = 1;
|
|
470
|
+
CallIndSVFGEdge *attributedEdge = SVFUtil::dyn_cast<CallIndSVFGEdge>(edge);
|
|
471
|
+
CFLGrammar::Attribute attr = attributedEdge->getCallSiteId();
|
|
472
|
+
addAttribute(edgeLabel, attr);
|
|
473
|
+
edgeLabel = CFLGrammar::getAttributedKind(attr, edgeLabel);
|
|
474
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getSrcID()), cflGraph->getGNode(edge->getDstID()), edgeLabel);
|
|
475
|
+
std::string key = kind2LabelMap[edge->getEdgeKind()];
|
|
476
|
+
key.append("bar"); // for example Gep_i should be Gepbar_i, not Gep_ibar
|
|
477
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getDstID()), cflGraph->getGNode(edge->getSrcID()), CFLGrammar::getAttributedKind(attr, label2KindMap[key]));
|
|
478
|
+
addAttribute(label2KindMap[key], attr);
|
|
479
|
+
}
|
|
480
|
+
// Get 'ret' edge : RetDirVF
|
|
481
|
+
else if ( edge->getEdgeKind() == VFGEdge::RetDirVF )
|
|
482
|
+
{
|
|
483
|
+
edgeLabel = 2;
|
|
484
|
+
RetDirSVFGEdge *attributedEdge = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge);
|
|
485
|
+
CFLGrammar::Attribute attr = attributedEdge->getCallSiteId();
|
|
486
|
+
addAttribute(edgeLabel, attr);
|
|
487
|
+
edgeLabel = CFLGrammar::getAttributedKind(attr, edgeLabel);
|
|
488
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getSrcID()), cflGraph->getGNode(edge->getDstID()), edgeLabel);
|
|
489
|
+
std::string key = kind2LabelMap[edge->getEdgeKind()];
|
|
490
|
+
key.append("bar"); // for example Gep_i should be Gepbar_i, not Gep_ibar
|
|
491
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getDstID()), cflGraph->getGNode(edge->getSrcID()), CFLGrammar::getAttributedKind(attr, label2KindMap[key]));
|
|
492
|
+
addAttribute(label2KindMap[key], attr);
|
|
493
|
+
}
|
|
494
|
+
// Get 'ret' edge : RetIndVF
|
|
495
|
+
else if ( edge->getEdgeKind() == VFGEdge::RetIndVF )
|
|
496
|
+
{
|
|
497
|
+
edgeLabel = 2;
|
|
498
|
+
RetIndSVFGEdge *attributedEdge = SVFUtil::dyn_cast<RetIndSVFGEdge>(edge);
|
|
499
|
+
CFLGrammar::Attribute attr = attributedEdge->getCallSiteId();
|
|
500
|
+
addAttribute(edgeLabel, attr);
|
|
501
|
+
edgeLabel = CFLGrammar::getAttributedKind(attr, edgeLabel);
|
|
502
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getSrcID()), cflGraph->getGNode(edge->getDstID()), edgeLabel);
|
|
503
|
+
std::string key = kind2LabelMap[edge->getEdgeKind()];
|
|
504
|
+
key.append("bar"); // for example Gep_i should be Gepbar_i, not Gep_ibar
|
|
505
|
+
cflGraph->addCFLEdge(cflGraph->getGNode(edge->getDstID()), cflGraph->getGNode(edge->getSrcID()), CFLGrammar::getAttributedKind(attr, label2KindMap[key]));
|
|
506
|
+
addAttribute(label2KindMap[key], attr);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
465
510
|
return cflGraph;
|
|
466
511
|
}
|
|
467
512
|
|
package/lib/CFL/CFLVF.cpp
CHANGED
|
@@ -48,7 +48,7 @@ void CFLVF::analyze()
|
|
|
48
48
|
PointerAnalysis::initialize();
|
|
49
49
|
GrammarBase *grammarBase = grammarBuilder.build();
|
|
50
50
|
AndersenWaveDiff* ander = AndersenWaveDiff::createAndersenWaveDiff(pag);
|
|
51
|
-
svfg = memSSA.
|
|
51
|
+
svfg = memSSA.buildFullSVFG(ander);
|
|
52
52
|
ConstraintGraph *consCG = new ConstraintGraph(svfir);
|
|
53
53
|
if (Options::PEGTransfer)
|
|
54
54
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.573",
|
|
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": {
|