svf-tools 1.0.633 → 1.0.635
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/CMakeLists.txt +111 -90
- package/SVF-doxygen/html/html/CFL_2CMakeLists_8txt.html +102 -0
- package/SVF-doxygen/html/html/CMakeLists_8txt.html +73 -0
- package/SVF-doxygen/html/html/DDA_2CMakeLists_8txt.html +102 -0
- package/SVF-doxygen/html/html/Example_2CMakeLists_8txt.html +102 -0
- package/SVF-doxygen/html/html/LockResultValidator_8cpp.html +2 -3
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +6 -52
- package/SVF-doxygen/html/html/LockResultValidator_8h.html +2 -3
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +2 -26
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp.html +3 -3
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +3 -57
- package/SVF-doxygen/html/html/MTAAnnotator_8h.html +5 -6
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +2 -22
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp.html +2 -3
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +12 -72
- package/SVF-doxygen/html/html/MTAResultValidator_8h.html +6 -6
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +76 -114
- package/SVF-doxygen/html/html/MTA_2CMakeLists_8txt.html +102 -0
- package/SVF-doxygen/html/html/SABER_2CMakeLists_8txt.html +102 -0
- package/SVF-doxygen/html/html/WPA_2CMakeLists_8txt.html +102 -0
- package/SVF-doxygen/html/html/annotated.html +9 -468
- package/SVF-doxygen/html/html/cfl_8cpp.html +5 -10
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +2 -12
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +51 -119
- package/SVF-doxygen/html/html/classSVF_1_1MHPValidator-members.html +2 -14
- package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +14 -49
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator-members.html +25 -43
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +67 -187
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator-members.html +20 -48
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +345 -1317
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator-members.html +8 -23
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +137 -758
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator_1_1AccessPair-members.html +3 -7
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator_1_1AccessPair.html +37 -184
- package/SVF-doxygen/html/html/classSVF_1_1RaceValidator-members.html +1 -13
- package/SVF-doxygen/html/html/classSVF_1_1RaceValidator.html +13 -48
- package/SVF-doxygen/html/html/classes.html +10 -123
- package/SVF-doxygen/html/html/dda_8cpp.html +172 -63
- package/SVF-doxygen/html/html/dda_8cpp_source.html +8 -20
- package/SVF-doxygen/html/html/dir_0c09191358c30c0f2d864382d285cb43.html +1 -1
- package/SVF-doxygen/html/html/files.html +19 -288
- package/SVF-doxygen/html/html/functions.html +322 -300
- package/SVF-doxygen/html/html/functions_func.html +171 -1020
- package/SVF-doxygen/html/html/functions_type.html +27 -17
- package/SVF-doxygen/html/html/functions_vars.html +151 -364
- package/SVF-doxygen/html/html/globals.html +53 -11
- package/SVF-doxygen/html/html/globals_func.html +22 -236
- package/SVF-doxygen/html/html/hierarchy.html +9 -543
- package/SVF-doxygen/html/html/menudata.js +44 -294
- package/SVF-doxygen/html/html/mta_8cpp.html +8 -16
- package/SVF-doxygen/html/html/mta_8cpp_source.html +4 -18
- package/SVF-doxygen/html/html/namespaceSVF.html +9 -6287
- package/SVF-doxygen/html/html/namespacemembers.html +3 -35
- package/SVF-doxygen/html/html/namespacemembers_type.html +3 -26
- package/SVF-doxygen/html/html/namespaces.html +2 -9
- package/SVF-doxygen/html/html/saber_8cpp.html +104 -53
- package/SVF-doxygen/html/html/saber_8cpp_source.html +5 -19
- package/SVF-doxygen/html/html/search/all_0.js +1 -131
- package/SVF-doxygen/html/html/search/all_1.js +4 -449
- package/SVF-doxygen/html/html/search/all_10.js +9 -310
- package/SVF-doxygen/html/html/search/all_11.js +1 -187
- package/SVF-doxygen/html/html/search/all_12.js +4 -474
- package/SVF-doxygen/html/html/search/all_2.js +17 -141
- package/SVF-doxygen/html/html/search/all_3.js +5 -592
- package/SVF-doxygen/html/html/search/all_4.js +3 -222
- package/SVF-doxygen/html/html/search/all_5.js +3 -141
- package/SVF-doxygen/html/html/search/all_6.js +12 -211
- package/SVF-doxygen/html/html/search/all_7.js +1 -923
- package/SVF-doxygen/html/html/search/all_8.js +17 -187
- package/SVF-doxygen/html/html/search/all_9.js +11 -553
- package/SVF-doxygen/html/html/search/all_a.js +17 -10
- package/SVF-doxygen/html/html/search/all_b.js +11 -21
- package/SVF-doxygen/html/html/search/all_c.js +5 -112
- package/SVF-doxygen/html/html/search/all_d.js +15 -190
- package/SVF-doxygen/html/html/search/all_e.js +7 -198
- package/SVF-doxygen/html/html/search/all_f.js +6 -122
- package/SVF-doxygen/html/html/search/classes_0.js +1 -25
- package/SVF-doxygen/html/html/search/classes_1.js +1 -7
- package/SVF-doxygen/html/html/search/classes_2.js +3 -69
- package/SVF-doxygen/html/html/search/classes_3.js +2 -32
- package/SVF-doxygen/html/html/search/files_0.js +2 -11
- package/SVF-doxygen/html/html/search/files_1.js +1 -5
- package/SVF-doxygen/html/html/search/files_2.js +2 -48
- package/SVF-doxygen/html/html/search/files_3.js +5 -14
- package/SVF-doxygen/html/html/search/files_4.js +2 -4
- package/SVF-doxygen/html/html/search/files_5.js +1 -13
- package/SVF-doxygen/html/html/search/functions_0.js +3 -339
- package/SVF-doxygen/html/html/search/functions_1.js +8 -73
- package/SVF-doxygen/html/html/search/functions_2.js +4 -228
- package/SVF-doxygen/html/html/search/functions_3.js +3 -69
- package/SVF-doxygen/html/html/search/functions_4.js +1 -50
- package/SVF-doxygen/html/html/search/functions_5.js +12 -49
- package/SVF-doxygen/html/html/search/functions_6.js +1 -766
- package/SVF-doxygen/html/html/search/functions_7.js +7 -143
- package/SVF-doxygen/html/html/search/functions_8.js +2 -393
- package/SVF-doxygen/html/html/search/functions_9.js +9 -4
- package/SVF-doxygen/html/html/search/functions_a.js +5 -1
- package/SVF-doxygen/html/html/search/functions_b.js +4 -20
- package/SVF-doxygen/html/html/search/functions_c.js +2 -72
- package/SVF-doxygen/html/html/search/functions_d.js +2 -31
- package/SVF-doxygen/html/html/search/functions_e.js +5 -58
- package/SVF-doxygen/html/html/search/functions_f.js +4 -132
- package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/html/search/searchdata.js +9 -21
- package/SVF-doxygen/html/html/search/typedefs_0.js +3 -15
- package/SVF-doxygen/html/html/search/typedefs_1.js +2 -24
- package/SVF-doxygen/html/html/search/typedefs_2.js +1 -120
- package/SVF-doxygen/html/html/search/typedefs_3.js +1 -41
- package/SVF-doxygen/html/html/search/typedefs_4.js +3 -15
- package/SVF-doxygen/html/html/search/typedefs_5.js +2 -41
- package/SVF-doxygen/html/html/search/variables_0.js +1 -131
- package/SVF-doxygen/html/html/search/variables_1.js +2 -66
- package/SVF-doxygen/html/html/search/variables_2.js +4 -30
- package/SVF-doxygen/html/html/search/variables_3.js +2 -136
- package/SVF-doxygen/html/html/search/variables_4.js +8 -54
- package/SVF-doxygen/html/html/search/variables_5.js +6 -35
- package/SVF-doxygen/html/html/search/variables_6.js +3 -66
- package/SVF-doxygen/html/html/search/variables_7.js +10 -30
- package/SVF-doxygen/html/html/search/variables_8.js +7 -8
- package/SVF-doxygen/html/html/search/variables_9.js +2 -68
- package/SVF-doxygen/html/html/search/variables_a.js +4 -3
- package/SVF-doxygen/html/html/search/variables_b.js +2 -10
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +31 -86
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +7 -64
- package/SVF-doxygen/html/html/wpa_8cpp.html +6 -12
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +2 -14
- package/package.json +1 -1
- package/svf/CMakeLists.txt +26 -0
- package/{include → svf/include}/AbstractExecution/AbstractValue.h +0 -0
- package/{include → svf/include}/AbstractExecution/AddressValue.h +0 -0
- package/{include → svf/include}/AbstractExecution/ExeState.h +0 -0
- package/{include → svf/include}/AbstractExecution/IntervalExeState.h +0 -0
- package/{include → svf/include}/AbstractExecution/IntervalValue.h +0 -0
- package/{include → svf/include}/AbstractExecution/NumericLiteral.h +0 -0
- package/{include → svf/include}/AbstractExecution/RelExeState.h +0 -0
- package/{include → svf/include}/AbstractExecution/RelationSolver.h +0 -0
- package/{include → svf/include}/AbstractExecution/SVFIR2ItvExeState.h +0 -0
- package/{include → svf/include}/AbstractExecution/WTO.h +0 -0
- package/{include → svf/include}/CFL/CFGNormalizer.h +0 -0
- package/{include → svf/include}/CFL/CFLAlias.h +0 -0
- package/{include → svf/include}/CFL/CFLBase.h +0 -0
- package/{include → svf/include}/CFL/CFLData.h +0 -0
- package/{include → svf/include}/CFL/CFLDataBuilder.h +0 -0
- package/{include → svf/include}/CFL/CFLGramGraphChecker.h +0 -0
- package/{include → svf/include}/CFL/CFLGrammar.h +0 -0
- package/{include → svf/include}/CFL/CFLGrammar.txt +0 -0
- package/{include → svf/include}/CFL/CFLGraphBuilder.h +0 -0
- package/{include → svf/include}/CFL/CFLSolver.h +0 -0
- package/{include → svf/include}/CFL/CFLStat.h +0 -0
- package/{include → svf/include}/CFL/CFLVF.h +0 -0
- package/{include → svf/include}/CFL/GrammarBuilder.h +0 -0
- package/{include → svf/include}/CFL/PEGGrammar.txt +0 -0
- package/{include → svf/include}/CFL/VFG.txt +0 -0
- package/{include → svf/include}/DDA/ContextDDA.h +0 -0
- package/{include → svf/include}/DDA/DDAClient.h +0 -0
- package/{include → svf/include}/DDA/DDAPass.h +0 -0
- package/{include → svf/include}/DDA/DDAStat.h +0 -0
- package/{include → svf/include}/DDA/DDAVFSolver.h +0 -0
- package/{include → svf/include}/DDA/FlowDDA.h +0 -0
- package/{include → svf/include}/FastCluster/LICENSE.TXT +0 -0
- package/{include → svf/include}/FastCluster/fastcluster.h +0 -0
- package/{include → svf/include}/Graphs/CFLGraph.h +0 -0
- package/{include → svf/include}/Graphs/CHG.h +0 -0
- package/{include → svf/include}/Graphs/ConsG.h +0 -0
- package/{include → svf/include}/Graphs/ConsGEdge.h +0 -0
- package/{include → svf/include}/Graphs/ConsGNode.h +0 -0
- package/{include → svf/include}/Graphs/DOTGraphTraits.h +0 -0
- package/{include → svf/include}/Graphs/GenericGraph.h +0 -0
- package/{include → svf/include}/Graphs/GraphPrinter.h +0 -0
- package/{include → svf/include}/Graphs/GraphTraits.h +0 -0
- package/{include → svf/include}/Graphs/GraphWriter.h +0 -0
- package/{include → svf/include}/Graphs/ICFG.h +0 -0
- package/{include → svf/include}/Graphs/ICFGEdge.h +0 -0
- package/{include → svf/include}/Graphs/ICFGNode.h +0 -0
- package/{include → svf/include}/Graphs/ICFGStat.h +0 -0
- package/{include → svf/include}/Graphs/IRGraph.h +0 -0
- package/{include → svf/include}/Graphs/PTACallGraph.h +0 -0
- package/{include → svf/include}/Graphs/SVFG.h +0 -0
- package/{include → svf/include}/Graphs/SVFGEdge.h +0 -0
- package/{include → svf/include}/Graphs/SVFGNode.h +0 -0
- package/{include → svf/include}/Graphs/SVFGOPT.h +0 -0
- package/{include → svf/include}/Graphs/SVFGStat.h +0 -0
- package/{include → svf/include}/Graphs/ThreadCallGraph.h +0 -0
- package/{include → svf/include}/Graphs/VFG.h +0 -0
- package/{include → svf/include}/Graphs/VFGEdge.h +0 -0
- package/{include → svf/include}/Graphs/VFGNode.h +0 -0
- package/{include → svf/include}/MSSA/MSSAMuChi.h +0 -0
- package/{include → svf/include}/MSSA/MemPartition.h +0 -0
- package/{include → svf/include}/MSSA/MemRegion.h +0 -0
- package/{include → svf/include}/MSSA/MemSSA.h +0 -0
- package/{include → svf/include}/MSSA/SVFGBuilder.h +0 -0
- package/{include → svf/include}/MTA/FSMPTA.h +0 -0
- package/{include → svf/include}/MTA/LockAnalysis.h +0 -0
- package/{include → svf/include}/MTA/MHP.h +0 -0
- package/{include → svf/include}/MTA/MTA.h +0 -0
- package/{include → svf/include}/MTA/MTAResultValidator.h +0 -0
- package/{include → svf/include}/MTA/MTAStat.h +0 -0
- package/{include → svf/include}/MTA/PCG.h +0 -0
- package/{include → svf/include}/MTA/TCT.h +0 -0
- package/{include → svf/include}/MemoryModel/AbstractPointsToDS.h +0 -0
- package/{include → svf/include}/MemoryModel/ConditionalPT.h +0 -0
- package/{include → svf/include}/MemoryModel/LocationSet.h +0 -0
- package/{include → svf/include}/MemoryModel/MutablePointsToDS.h +0 -0
- package/{include → svf/include}/MemoryModel/PersistentPointsToCache.h +0 -0
- package/{include → svf/include}/MemoryModel/PersistentPointsToDS.h +0 -0
- package/{include → svf/include}/MemoryModel/PointerAnalysis.h +0 -0
- package/{include → svf/include}/MemoryModel/PointerAnalysisImpl.h +0 -0
- package/{include → svf/include}/MemoryModel/PointsTo.h +0 -0
- package/{include → svf/include}/MemoryModel/SVFLoop.h +0 -0
- package/{include → svf/include}/SABER/DoubleFreeChecker.h +0 -0
- package/{include → svf/include}/SABER/FileChecker.h +0 -0
- package/{include → svf/include}/SABER/LeakChecker.h +0 -0
- package/{include → svf/include}/SABER/ProgSlice.h +0 -0
- package/{include → svf/include}/SABER/SaberCheckerAPI.h +0 -0
- package/{include → svf/include}/SABER/SaberCondAllocator.h +0 -0
- package/{include → svf/include}/SABER/SaberSVFGBuilder.h +0 -0
- package/{include → svf/include}/SABER/SrcSnkDDA.h +0 -0
- package/{include → svf/include}/SABER/SrcSnkSolver.h +0 -0
- package/{include → svf/include}/SVFIR/PAGBuilderFromFile.h +0 -0
- package/{include → svf/include}/SVFIR/SVFIR.h +0 -0
- package/{include → svf/include}/SVFIR/SVFModule.h +0 -0
- package/{include → svf/include}/SVFIR/SVFStatements.h +0 -0
- package/{include → svf/include}/SVFIR/SVFType.h +12 -14
- package/{include → svf/include}/SVFIR/SVFValue.h +0 -0
- package/{include → svf/include}/SVFIR/SVFVariables.h +0 -0
- package/{include → svf/include}/SVFIR/SymbolTableInfo.h +0 -0
- package/{include → svf/include}/Util/Annotator.h +0 -0
- package/{include → svf/include}/Util/BitVector.h +0 -0
- package/{include → svf/include}/Util/CallGraphBuilder.h +0 -0
- package/{include → svf/include}/Util/Casting.h +0 -0
- package/{include → svf/include}/Util/CommandLine.h +0 -0
- package/{include → svf/include}/Util/CoreBitVector.h +0 -0
- package/{include → svf/include}/Util/CppUtil.h +0 -0
- package/{include → svf/include}/Util/CxtStmt.h +0 -0
- package/{include → svf/include}/Util/DPItem.h +0 -0
- package/{include → svf/include}/Util/ExtAPI.h +2 -2
- package/{include → svf/include}/Util/ExtAPI.json +0 -0
- package/{include → svf/include}/Util/GraphReachSolver.h +0 -0
- package/{include → svf/include}/Util/NodeIDAllocator.h +0 -0
- package/{include → svf/include}/Util/Options.h +0 -0
- package/{include → svf/include}/Util/PTAStat.h +0 -0
- package/{include → svf/include}/Util/SCC.h +0 -0
- package/{include → svf/include}/Util/SVFStat.h +0 -0
- package/{include → svf/include}/Util/SVFUtil.h +0 -0
- package/{include → svf/include}/Util/SparseBitVector.h +0 -0
- package/{include → svf/include}/Util/ThreadAPI.h +0 -0
- package/{include → svf/include}/Util/WorkList.h +0 -0
- package/{include → svf/include}/Util/Z3Expr.h +0 -0
- package/{include → svf/include}/Util/cJSON.h +0 -0
- package/{include → svf/include}/Util/iterator.h +0 -0
- package/{include → svf/include}/Util/iterator_range.h +0 -0
- package/{include → svf/include}/WPA/Andersen.h +0 -0
- package/{include → svf/include}/WPA/AndersenPWC.h +0 -0
- package/{include → svf/include}/WPA/CSC.h +0 -0
- package/{include → svf/include}/WPA/FlowSensitive.h +0 -0
- package/{include → svf/include}/WPA/Steensgaard.h +0 -0
- package/{include → svf/include}/WPA/TypeAnalysis.h +0 -0
- package/{include → svf/include}/WPA/VersionedFlowSensitive.h +0 -0
- package/{include → svf/include}/WPA/WPAFSSolver.h +0 -0
- package/{include → svf/include}/WPA/WPAPass.h +0 -0
- package/{include → svf/include}/WPA/WPASolver.h +0 -0
- package/{include → svf/include}/WPA/WPAStat.h +0 -0
- package/{lib → svf/lib}/AbstractExecution/ExeState.cpp +0 -0
- package/{lib → svf/lib}/AbstractExecution/IntervalExeState.cpp +0 -0
- package/{lib → svf/lib}/AbstractExecution/RelExeState.cpp +0 -0
- package/{lib → svf/lib}/AbstractExecution/RelationSolver.cpp +0 -0
- package/{lib → svf/lib}/AbstractExecution/SVFIR2ItvExeState.cpp +0 -0
- package/{lib → svf/lib}/AbstractExecution/SVFIR2Relation.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFGNormalizer.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFLAlias.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFLBase.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFLGrammar.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFLGraphBuilder.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFLSolver.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFLStat.cpp +0 -0
- package/{lib → svf/lib}/CFL/CFLVF.cpp +0 -0
- package/{lib → svf/lib}/CFL/GrammarBuilder.cpp +6 -1
- package/{lib → svf/lib}/DDA/ContextDDA.cpp +0 -0
- package/{lib → svf/lib}/DDA/DDAClient.cpp +0 -0
- package/{lib → svf/lib}/DDA/DDAPass.cpp +0 -0
- package/{lib → svf/lib}/DDA/DDAStat.cpp +0 -0
- package/{lib → svf/lib}/DDA/FlowDDA.cpp +0 -0
- package/{lib → svf/lib}/FastCluster/LICENSE.TXT +0 -0
- package/{lib → svf/lib}/FastCluster/fastcluster.cpp +0 -0
- package/{lib → svf/lib}/FastCluster/fastcluster_R_dm.cpp.inc +0 -0
- package/{lib → svf/lib}/FastCluster/fastcluster_dm.cpp.inc +0 -0
- package/{lib → svf/lib}/Graphs/CFLGraph.cpp +0 -0
- package/{lib → svf/lib}/Graphs/CHG.cpp +0 -0
- package/{lib → svf/lib}/Graphs/ConsG.cpp +0 -0
- package/{lib → svf/lib}/Graphs/GraphWriter.cpp +0 -0
- package/{lib → svf/lib}/Graphs/ICFG.cpp +0 -0
- package/{lib → svf/lib}/Graphs/IRGraph.cpp +0 -0
- package/{lib → svf/lib}/Graphs/PTACallGraph.cpp +0 -0
- package/{lib → svf/lib}/Graphs/SVFG.cpp +0 -0
- package/{lib → svf/lib}/Graphs/SVFGOPT.cpp +0 -0
- package/{lib → svf/lib}/Graphs/SVFGReadWrite.cpp +0 -0
- package/{lib → svf/lib}/Graphs/SVFGStat.cpp +0 -0
- package/{lib → svf/lib}/Graphs/ThreadCallGraph.cpp +0 -0
- package/{lib → svf/lib}/Graphs/VFG.cpp +0 -0
- package/{lib → svf/lib}/MSSA/MemPartition.cpp +0 -0
- package/{lib → svf/lib}/MSSA/MemRegion.cpp +0 -0
- package/{lib → svf/lib}/MSSA/MemSSA.cpp +0 -0
- package/{lib → svf/lib}/MSSA/SVFGBuilder.cpp +0 -0
- package/{lib → svf/lib}/MTA/FSMPTA.cpp +0 -0
- package/{lib → svf/lib}/MTA/LockAnalysis.cpp +0 -0
- package/{lib → svf/lib}/MTA/MHP.cpp +0 -0
- package/{lib → svf/lib}/MTA/MTA.cpp +0 -0
- package/{lib → svf/lib}/MTA/MTAStat.cpp +0 -0
- package/{lib → svf/lib}/MTA/PCG.cpp +0 -0
- package/{lib → svf/lib}/MTA/TCT.cpp +0 -0
- package/{lib → svf/lib}/MemoryModel/LocationSet.cpp +0 -0
- package/{lib → svf/lib}/MemoryModel/PointerAnalysis.cpp +0 -0
- package/{lib → svf/lib}/MemoryModel/PointerAnalysisImpl.cpp +0 -0
- package/{lib → svf/lib}/MemoryModel/PointsTo.cpp +0 -0
- package/{lib → svf/lib}/SABER/DoubleFreeChecker.cpp +0 -0
- package/{lib → svf/lib}/SABER/FileChecker.cpp +0 -0
- package/{lib → svf/lib}/SABER/LeakChecker.cpp +0 -0
- package/{lib → svf/lib}/SABER/ProgSlice.cpp +0 -0
- package/{lib → svf/lib}/SABER/SaberCheckerAPI.cpp +0 -0
- package/{lib → svf/lib}/SABER/SaberCondAllocator.cpp +0 -0
- package/{lib → svf/lib}/SABER/SaberSVFGBuilder.cpp +0 -0
- package/{lib → svf/lib}/SABER/SrcSnkDDA.cpp +0 -0
- package/{lib → svf/lib}/SVFIR/PAGBuilderFromFile.cpp +0 -0
- package/{lib → svf/lib}/SVFIR/SVFIR.cpp +0 -0
- package/{lib → svf/lib}/SVFIR/SVFModule.cpp +0 -0
- package/{lib → svf/lib}/SVFIR/SVFStatements.cpp +0 -0
- package/{lib → svf/lib}/SVFIR/SVFValue.cpp +0 -0
- package/{lib → svf/lib}/SVFIR/SVFVariables.cpp +0 -0
- package/{lib → svf/lib}/SVFIR/SymbolTableInfo.cpp +0 -0
- package/{lib → svf/lib}/Util/BitVector.cpp +0 -0
- package/{lib → svf/lib}/Util/CallGraphBuilder.cpp +0 -0
- package/{lib → svf/lib}/Util/CoreBitVector.cpp +0 -0
- package/{lib → svf/lib}/Util/CppUtil.cpp +0 -0
- package/{lib → svf/lib}/Util/ExtAPI.cpp +64 -58
- package/{lib → svf/lib}/Util/NodeIDAllocator.cpp +0 -0
- package/{lib → svf/lib}/Util/Options.cpp +0 -0
- package/{lib → svf/lib}/Util/PTAStat.cpp +0 -0
- package/{lib → svf/lib}/Util/SVFStat.cpp +0 -0
- package/{lib → svf/lib}/Util/SVFUtil.cpp +0 -0
- package/{lib → svf/lib}/Util/ThreadAPI.cpp +0 -0
- package/{lib → svf/lib}/Util/Z3Expr.cpp +0 -0
- package/{lib → svf/lib}/Util/cJSON.cpp +0 -0
- package/{lib → svf/lib}/WPA/Andersen.cpp +0 -0
- package/{lib → svf/lib}/WPA/AndersenSCD.cpp +0 -0
- package/{lib → svf/lib}/WPA/AndersenSFR.cpp +0 -0
- package/{lib → svf/lib}/WPA/AndersenStat.cpp +0 -0
- package/{lib → svf/lib}/WPA/AndersenWaveDiff.cpp +0 -0
- package/{lib → svf/lib}/WPA/CSC.cpp +0 -0
- package/{lib → svf/lib}/WPA/FlowSensitive.cpp +0 -0
- package/{lib → svf/lib}/WPA/FlowSensitiveStat.cpp +0 -0
- package/{lib → svf/lib}/WPA/Steensgaard.cpp +0 -0
- package/{lib → svf/lib}/WPA/TypeAnalysis.cpp +0 -0
- package/{lib → svf/lib}/WPA/VersionedFlowSensitive.cpp +0 -0
- package/{lib → svf/lib}/WPA/VersionedFlowSensitiveStat.cpp +0 -0
- package/{lib → svf/lib}/WPA/WPAPass.cpp +0 -0
- package/svf-llvm/CMakeLists.txt +21 -0
- package/{include → svf-llvm/include}/SVF-LLVM/BasicTypes.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/BreakConstantExpr.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/CHGBuilder.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/DCHG.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/GEPTypeBridgeIterator.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/ICFGBuilder.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/LLVMLoopAnalysis.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/LLVMModule.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/LLVMUtil.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/SVFIRBuilder.h +0 -0
- package/{include → svf-llvm/include}/SVF-LLVM/SymbolTableBuilder.h +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/BreakConstantExpr.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/CHGBuilder.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/DCHG.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/ICFGBuilder.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/LLVMLoopAnalysis.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/LLVMModule.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/LLVMUtil.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/SVFIRBuilder.cpp +0 -0
- package/{lib/SVF-LLVM → svf-llvm/lib}/SymbolTableBuilder.cpp +0 -0
- package/tools/CFL/CMakeLists.txt +18 -7
- package/tools/CMakeLists.txt +2 -1
- package/tools/DDA/CMakeLists.txt +18 -7
- package/tools/Example/CMakeLists.txt +18 -7
- package/tools/Example/svf-ex.cpp +0 -1
- package/tools/MTA/CMakeLists.txt +20 -9
- package/tools/SABER/CMakeLists.txt +18 -7
- package/tools/WPA/CMakeLists.txt +18 -8
- package/lib/CMakeLists.txt +0 -55
|
@@ -66,74 +66,28 @@ $(function() {
|
|
|
66
66
|
<div class="title">LockResultValidator.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="LockResultValidator_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * LOCKResultValidator.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Created on: 24/07/2021</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> */</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <sstream></span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "<a class="code" href="LockResultValidator_8h.html">LockResultValidator.h</a>"</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="tools_2MTA_2MTAResultValidator_8h.html">MTAResultValidator.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// Subclassing RCResultValidator to define the abstract methods.</span></div><div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html"> 20</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1RaceValidator.html">RaceValidator</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1RaceResultValidator.html">RaceResultValidator</a></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html#a7ec5d97155d170033398757af56691ad"> 23</a></span>  <a class="code" href="classSVF_1_1RaceValidator.html#a7ec5d97155d170033398757af56691ad">RaceValidator</a>(<a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a>* ls) :lsa(ls)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  }</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html#ab95520388bafe1efae63196400350690"> 26</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1RaceValidator.html#ab95520388bafe1efae63196400350690">protectedByCommonLocks</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* I1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* I2)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst1 = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(I1);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst2 = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(I2);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> lsa->isProtectedByCommonLock(inst1, inst2);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html#a6982b72e3e2551deab80d9e3fefaab64"> 33</a></span>  <a class="code" href="classSVF_1_1LockAnalysis.html">LockAnalysis</a> *<a class="code" href="classSVF_1_1RaceValidator.html#a6982b72e3e2551deab80d9e3fefaab64">lsa</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> };</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc"> 38</a></span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> <a class="code" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc">LockResultValidator::getStringArg</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> arg_num)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  assert(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a5a7dc8680a9714e08b01dd339b85bb20">LLVMUtil::isCallSite</a>(inst) && <span class="stringliteral">"getFirstIntArg: inst is not a callsite"</span>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">LLVMUtil::getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  assert((arg_num < cs->arg_size()) && <span class="stringliteral">"Does not has this argument"</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gepinst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>>(cs->getArgOperand(arg_num));</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* arrayinst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>>(gepinst->getOperand(0));</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>* cxtarray = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>>(arrayinst->getOperand(0));</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (!cxtarray)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> strvec;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> strvec;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> vthdcxtstring = cxtarray->getAsCString().str();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">split</a>(vthdcxtstring, <span class="charliteral">','</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f"> 55</a></span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> &<a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &s, <span class="keywordtype">char</span> delim, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> &elems)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  std::stringstream ss(s);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">while</span> (std::getline(ss, item, delim))</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  elems.insert(item);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ad26006e14c866d694bc6e2ebaa41ded9"> 66</a></span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> <a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &s, <span class="keywordtype">char</span> delim)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<std::string></a> elems;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">split</a>(s, delim, elems);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330"> 73</a></span> <span class="keyword">inline</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330">LockResultValidator::getOutput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *scenario, <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LOCK_FLAG</a> analysisRes)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> ret(scenario);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  ret += <span class="stringliteral">"\t"</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">switch</span> (analysisRes)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">case</span> LOCK_TRUE:</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">SVFUtil::sucMsg</a>(<span class="stringliteral">"SUCCESS"</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">case</span> LOCK_UNSOUND:</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a054c3e668ce8b265bbc5d923f6243ce7">SVFUtil::bugMsg2</a>(<span class="stringliteral">"UNSOUND"</span>);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">case</span> LOCK_IMPRECISE:</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6c66553e2559eebfe4f98c0c7ec4b08">SVFUtil::bugMsg1</a>(<span class="stringliteral">"IMPRECISE"</span>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  ret += <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVFUtil::errMsg</a>(<span class="stringliteral">"FAILURE"</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2"> 94</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2">LockResultValidator::collectLockTargets</a>()</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* F = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &M : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()->getLLVMModules())</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> it = M.begin(); it != M.end(); it++)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> fName = (*it).getName().str();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span>(fName.find(LOCK) != std::string::npos)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  F = &(*it);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">if</span> (!F)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span>(Value::const_use_iterator it = F->use_begin(), ie = F->use_end(); it!=ie; it++)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a334998718813a19a7697daf4ba282faf">Use</a> *u = &*it;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* user = u->getUser();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>>(user);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> y = getStringArg(inst, 0);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* memInst = getPreviousMemoryAccessInst(inst);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfMemInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(memInst);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  instToCxtLockSet[svfMemInst] = y;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a>* store = SVFUtil::dyn_cast<StoreInst> (memInst))</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a>* bop = SVFUtil::dyn_cast<BinaryOperator> (store->getValueOperand()))</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* v = bop->getOperand(0);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* prevInst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>> (v);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">getSVFInstruction</a>(prevInst);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  instToCxtLockSet[svfPrevInst] = y;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9"> 135</a></span> <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> <a class="code" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9">LockResultValidator::validateStmtInLock</a>()</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> res = <a class="code" href="classSVF_1_1LockResultValidator.html#a005c38dd07eb66d52066fa1927b1e19f">LockResultValidator::LOCK_TRUE</a>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="classSVF_1_1LockAnalysis.html#a710aad28484677637367e9098a55c7d7">LockAnalysis::CxtStmtToCxtLockSet</a> analyedLS = _la->getCSTCLS();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">for</span>(LockAnalysis::CxtStmtToCxtLockSet::iterator it = analyedLS.begin(),</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  eit = analyedLS.end(); it!=eit; it++)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* inst = ((*it).first).getStmt();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordtype">bool</span> interestedInst = <span class="keyword">true</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">for</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* stmt : pag-><a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst)))</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">if</span>(!SVFUtil::isa<LoadStmt>(stmt) && !SVFUtil::isa<StoreStmt>(stmt))</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  interestedInst = <span class="keyword">false</span>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span>(interestedInst==<span class="keyword">false</span>)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* F = inst-><a class="code" href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">getFunction</a>();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span>(inFilter(F-><a class="code" href="classSVF_1_1SVFValue.html#a68b40576b24c4cb81cc3ba75550f4654">getName</a>()))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> LS = instToCxtLockSet[inst];</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span>(LS.size() != (*it).second.size())</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a944aee270c78d42c998691da283165f1">Options::PrintValidRes</a>())</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">errMsg</a>(<span class="stringliteral">"\nValidate Stmt's Lock : Wrong at: "</span>) << inst-><a class="code" href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">toString</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Reason: The number of lock on current stmt is wrong\n"</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n----Given locks:\n"</span>;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">for</span> (CxtLockSetStr::iterator it1 = LS.begin(),eit1 = LS.end(); it1 != eit1; it++)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Lock "</span> << *it1 << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n----Analysis locks:\n"</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">for</span> (LockAnalysis::CxtLockSet::iterator it2 = (*it).second.begin(),</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  eit2 = (*it).second.end(); it2 != eit2; ++it)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = (*it2).getStmt();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>()<<<span class="stringliteral">"Lock "</span> << call-><a class="code" href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">toString</a>() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  res = <a class="code" href="classSVF_1_1LockResultValidator.html#a03589368482d3f7ee7f6734e257dcbdf">LockResultValidator::LOCK_UNSOUND</a>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="classSVF_1_1LockAnalysis.html#a0716c155b42b3ae7a6c8d7593bb6ac83">LockAnalysis::CxtLockSet</a> LSA = (*it).second;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">for</span>(LockAnalysis::CxtLockSet::iterator it3 = LSA.begin(), eit3=LSA.end(); it3!=eit3; it3++)</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* call = (*it3).getStmt();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#afdc3358522417de9a0d3a181a329f722">SVFUtil::isCallSite</a>(call) == <span class="keyword">false</span>)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lockName = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVFUtil::getSVFCallSite</a>(call).<a class="code" href="classSVF_1_1CallSite.html#a93c083aa8f3f3ef28fe80e9aaf70dfb5">getArgOperand</a>(0)-><a class="code" href="classSVF_1_1SVFValue.html#a68b40576b24c4cb81cc3ba75550f4654">getName</a>();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span>(!match(lockName, LS))</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a944aee270c78d42c998691da283165f1">Options::PrintValidRes</a>())</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\nValidate Stmt's Lock : Wrong at ("</span> << inst-><a class="code" href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">toString</a>() << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"Reason: The number of lock on current stmt is wrong\n"</span>;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n Lock "</span> << lockName << <span class="stringliteral">" should not protect current instruction\n"</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  res = <a class="code" href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">LockResultValidator::LOCK_IMPRECISE</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d"> 201</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d">LockResultValidator::analyze</a>()</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVFUtil::pasMsg</a>(<span class="stringliteral">" --- Lock Analysis Result Validation ---\n"</span>);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">if</span>(!collectLockTargets())</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> errstring;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  errstring = getOutput(<span class="stringliteral">"Validate Lock Analysis :"</span>, validateStmtInLock());</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"======"</span> << errstring << <span class="stringliteral">"======\n"</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="classSVF_1_1RaceValidator.html">RaceValidator</a> validator(_la);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  validator.<a class="code" href="classSVF_1_1RaceResultValidator.html#aec8b923a0da580113a13bf94ffb3ebd7">init</a>(_la->getTCT()->getSVFModule());</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  validator.<a class="code" href="classSVF_1_1RaceResultValidator.html#ab8a261120a7f6520d22a6f5cdf2257e9">analyze</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="ttc" id="tools_2MTA_2MTAResultValidator_8h_html"><div class="ttname"><a href="tools_2MTA_2MTAResultValidator_8h.html">MTAResultValidator.h</a></div></div>
|
|
70
|
-
<div class="ttc" id="namespaceSVF_html_a334998718813a19a7697daf4ba282faf"><div class="ttname"><a href="namespaceSVF.html#a334998718813a19a7697daf4ba282faf">SVF::Use</a></div><div class="ttdeci">llvm::Use Use</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00048">BasicTypes.h:48</a></div></div>
|
|
71
|
-
<div class="ttc" id="classSVF_1_1SVFInstruction_html"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html">SVF::SVFInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00570">SVFValue.h:570</a></div></div>
|
|
72
|
-
<div class="ttc" id="namespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
|
|
73
|
-
<div class="ttc" id="classSVF_1_1RaceValidator_html_a6982b72e3e2551deab80d9e3fefaab64"><div class="ttname"><a href="classSVF_1_1RaceValidator.html#a6982b72e3e2551deab80d9e3fefaab64">SVF::RaceValidator::lsa</a></div><div class="ttdeci">LockAnalysis * lsa</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00033">LockResultValidator.cpp:33</a></div></div>
|
|
74
|
-
<div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00060">BasicTypes.h:60</a></div></div>
|
|
75
|
-
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a5a7dc8680a9714e08b01dd339b85bb20"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a5a7dc8680a9714e08b01dd339b85bb20">SVF::LLVMUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00047">LLVMUtil.h:47</a></div></div>
|
|
76
|
-
<div class="ttc" id="classSVF_1_1SVFValue_html_a68b40576b24c4cb81cc3ba75550f4654"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a68b40576b24c4cb81cc3ba75550f4654">SVF::SVFValue::getName</a></div><div class="ttdeci">virtual const std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00210">SVFValue.h:210</a></div></div>
|
|
77
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00098">SVFUtil.cpp:98</a></div></div>
|
|
78
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a9815a5b31ac7dc21239d08e5b9f61106"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9815a5b31ac7dc21239d08e5b9f61106">SVF::SVFUtil::getSVFCallSite</a></div><div class="ttdeci">CallSite getSVFCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Return LLVM callsite given an instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00195">SVFUtil.h:195</a></div></div>
|
|
79
|
-
<div class="ttc" id="namespaceSVF_1_1LLVMUtil_html_a0095d23a9c9d5d62ec4a23c56824b5f0"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a0095d23a9c9d5d62ec4a23c56824b5f0">SVF::LLVMUtil::getLLVMCallSite</a></div><div class="ttdeci">const CallBase * getLLVMCallSite(const Value *value)</div><div class="ttdoc">Return LLVM callsite given a value. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00069">LLVMUtil.h:69</a></div></div>
|
|
80
|
-
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00257">SVFValue.h:257</a></div></div>
|
|
81
|
-
<div class="ttc" id="namespaceSVF_html_aad5d26ab07a5d1314bdb8f54e0fcdb22"><div class="ttname"><a href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">SVF::BinaryOperator</a></div><div class="ttdeci">llvm::BinaryOperator BinaryOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00154">BasicTypes.h:154</a></div></div>
|
|
69
|
+
<a href="LockResultValidator_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * LOCKResultValidator.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Created on: 24/07/2021</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> */</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "Util/Options.h"</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <sstream></span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "<a class="code" href="LockResultValidator_8h.html">LockResultValidator.h</a>"</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="MTAResultValidator_8h.html">MTAResultValidator.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="namespaceSVF.html"> 16</a></span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// Subclassing RCResultValidator to define the abstract methods.</span></div><div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html"> 20</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1RaceValidator.html">RaceValidator</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1RaceResultValidator.html">RaceResultValidator</a></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html#a7ec5d97155d170033398757af56691ad"> 23</a></span>  <a class="code" href="classSVF_1_1RaceValidator.html#a7ec5d97155d170033398757af56691ad">RaceValidator</a>(LockAnalysis* ls) :lsa(ls)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  }</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html#ab95520388bafe1efae63196400350690"> 26</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1RaceValidator.html#ab95520388bafe1efae63196400350690">protectedByCommonLocks</a>(<span class="keyword">const</span> Instruction* I1, <span class="keyword">const</span> Instruction* I2)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">const</span> SVFInstruction* inst1 = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(I1);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">const</span> SVFInstruction* inst2 = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(I2);</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> lsa->isProtectedByCommonLock(inst1, inst2);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  }</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1RaceValidator.html#a6982b72e3e2551deab80d9e3fefaab64"> 33</a></span>  LockAnalysis *<a class="code" href="classSVF_1_1RaceValidator.html#a6982b72e3e2551deab80d9e3fefaab64">lsa</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> };</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc"> 38</a></span> Set<std::string> <a class="code" href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc">LockResultValidator::getStringArg</a>(<span class="keyword">const</span> Instruction* inst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> arg_num)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  assert(LLVMUtil::isCallSite(inst) && <span class="stringliteral">"getFirstIntArg: inst is not a callsite"</span>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">const</span> CallBase* cs = LLVMUtil::getLLVMCallSite(inst);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  assert((arg_num < cs->arg_size()) && <span class="stringliteral">"Does not has this argument"</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">const</span> GetElementPtrInst* gepinst = SVFUtil::dyn_cast<GetElementPtrInst>(cs->getArgOperand(arg_num));</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> Constant* arrayinst = SVFUtil::dyn_cast<Constant>(gepinst->getOperand(0));</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">const</span> ConstantDataArray* cxtarray = SVFUtil::dyn_cast<ConstantDataArray>(arrayinst->getOperand(0));</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (!cxtarray)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  Set<std::string> strvec;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> strvec;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> std::string vthdcxtstring = cxtarray->getAsCString().str();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">return</span> split(vthdcxtstring, <span class="charliteral">','</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f"> 55</a></span> Set<std::string> &<a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> std::string &s, <span class="keywordtype">char</span> delim, Set<std::string> &elems)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  std::stringstream ss(s);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  std::string item;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">while</span> (std::getline(ss, item, delim))</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  elems.insert(item);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ad26006e14c866d694bc6e2ebaa41ded9"> 66</a></span> Set<std::string> <a class="code" href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">LockResultValidator::split</a>(<span class="keyword">const</span> std::string &s, <span class="keywordtype">char</span> delim)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  Set<std::string> elems;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  split(s, delim, elems);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330"> 73</a></span> <span class="keyword">inline</span> std::string <a class="code" href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330">LockResultValidator::getOutput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *scenario, <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LOCK_FLAG</a> analysisRes)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  std::string ret(scenario);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  ret += <span class="stringliteral">"\t"</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">switch</span> (analysisRes)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">case</span> LOCK_TRUE:</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  ret += SVFUtil::sucMsg(<span class="stringliteral">"SUCCESS"</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">case</span> LOCK_UNSOUND:</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  ret += SVFUtil::bugMsg2(<span class="stringliteral">"UNSOUND"</span>);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">case</span> LOCK_IMPRECISE:</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  ret += SVFUtil::bugMsg1(<span class="stringliteral">"IMPRECISE"</span>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  ret += SVFUtil::errMsg(<span class="stringliteral">"FAILURE"</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2"> 94</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2">LockResultValidator::collectLockTargets</a>()</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">const</span> Function* F = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">for</span> (Module &M : LLVMModuleSet::getLLVMModuleSet()->getLLVMModules())</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> it = M.begin(); it != M.end(); it++)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">const</span> std::string fName = (*it).getName().str();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span>(fName.find(LOCK) != std::string::npos)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  F = &(*it);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">if</span> (!F)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span>(Value::const_use_iterator it = F->use_begin(), ie = F->use_end(); it!=ie; it++)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> Use *u = &*it;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">const</span> Value* user = u->getUser();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">const</span> Instruction* inst = SVFUtil::dyn_cast<Instruction>(user);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> y = getStringArg(inst, 0);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> Instruction* memInst = getPreviousMemoryAccessInst(inst);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">const</span> SVFInstruction* svfMemInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(memInst);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  instToCxtLockSet[svfMemInst] = y;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> StoreInst* store = SVFUtil::dyn_cast<StoreInst> (memInst))</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> BinaryOperator* bop = SVFUtil::dyn_cast<BinaryOperator> (store->getValueOperand()))</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">const</span> Value* v = bop->getOperand(0);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">const</span> Instruction* prevInst = SVFUtil::dyn_cast<LoadInst> (v);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">const</span> SVFInstruction* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(prevInst);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  instToCxtLockSet[svfPrevInst] = y;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9"> 135</a></span> <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> <a class="code" href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9">LockResultValidator::validateStmtInLock</a>()</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  SVFIR* pag = SVFIR::getPAG();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">LockResultValidator::LOCK_FLAG</a> res = <a class="code" href="classSVF_1_1LockResultValidator.html#a005c38dd07eb66d52066fa1927b1e19f">LockResultValidator::LOCK_TRUE</a>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  LockAnalysis::CxtStmtToCxtLockSet analyedLS = _la->getCSTCLS();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">for</span>(LockAnalysis::CxtStmtToCxtLockSet::iterator it = analyedLS.begin(),</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  eit = analyedLS.end(); it!=eit; it++)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">const</span> SVFInstruction* inst = ((*it).first).getStmt();</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordtype">bool</span> interestedInst = <span class="keyword">true</span>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">for</span>(<span class="keyword">const</span> SVFStmt* stmt : pag->getSVFStmtList(pag->getICFG()->getICFGNode(inst)))</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">if</span>(!SVFUtil::isa<LoadStmt>(stmt) && !SVFUtil::isa<StoreStmt>(stmt))</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  interestedInst = <span class="keyword">false</span>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span>(interestedInst==<span class="keyword">false</span>)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</span> SVFFunction* F = inst->getFunction();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span>(inFilter(F->getName()))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">CxtLockSetStr</a> LS = instToCxtLockSet[inst];</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span>(LS.size() != (*it).second.size())</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">if</span> (Options::PrintValidRes())</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  outs() << errMsg(<span class="stringliteral">"\nValidate Stmt's Lock : Wrong at: "</span>) << inst->toString() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  outs() << <span class="stringliteral">"Reason: The number of lock on current stmt is wrong\n"</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  outs() << <span class="stringliteral">"\n----Given locks:\n"</span>;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">for</span> (CxtLockSetStr::iterator it1 = LS.begin(),eit1 = LS.end(); it1 != eit1; it++)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  outs() << <span class="stringliteral">"Lock "</span> << *it1 << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  outs() << <span class="stringliteral">"\n----Analysis locks:\n"</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">for</span> (LockAnalysis::CxtLockSet::iterator it2 = (*it).second.begin(),</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  eit2 = (*it).second.end(); it2 != eit2; ++it)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">const</span> SVFInstruction* call = (*it2).getStmt();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  outs()<<<span class="stringliteral">"Lock "</span> << call->toString() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  outs() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  res = <a class="code" href="classSVF_1_1LockResultValidator.html#a03589368482d3f7ee7f6734e257dcbdf">LockResultValidator::LOCK_UNSOUND</a>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  LockAnalysis::CxtLockSet LSA = (*it).second;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">for</span>(LockAnalysis::CxtLockSet::iterator it3 = LSA.begin(), eit3=LSA.end(); it3!=eit3; it3++)</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> SVFInstruction* call = (*it3).getStmt();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">if</span>(SVFUtil::isCallSite(call) == <span class="keyword">false</span>)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  std::string lockName = SVFUtil::getSVFCallSite(call).getArgOperand(0)->getName();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span>(!match(lockName, LS))</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span>(Options::PrintValidRes())</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  outs() << <span class="stringliteral">"\nValidate Stmt's Lock : Wrong at ("</span> << inst->toString() << <span class="stringliteral">")\n"</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  outs() << <span class="stringliteral">"Reason: The number of lock on current stmt is wrong\n"</span>;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  outs() << <span class="stringliteral">"\n Lock "</span> << lockName << <span class="stringliteral">" should not protect current instruction\n"</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  res = <a class="code" href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">LockResultValidator::LOCK_IMPRECISE</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d"> 201</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d">LockResultValidator::analyze</a>()</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  outs() << SVFUtil::pasMsg(<span class="stringliteral">" --- Lock Analysis Result Validation ---\n"</span>);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">if</span>(!collectLockTargets())</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  std::string errstring;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  errstring = getOutput(<span class="stringliteral">"Validate Lock Analysis :"</span>, validateStmtInLock());</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  outs() << <span class="stringliteral">"======"</span> << errstring << <span class="stringliteral">"======\n"</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="classSVF_1_1RaceValidator.html">RaceValidator</a> validator(_la);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  validator.<a class="code" href="classSVF_1_1RaceResultValidator.html#aec8b923a0da580113a13bf94ffb3ebd7">init</a>(_la->getTCT()->getSVFModule());</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  validator.<a class="code" href="classSVF_1_1RaceResultValidator.html#ab8a261120a7f6520d22a6f5cdf2257e9">analyze</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="ttc" id="classSVF_1_1RaceValidator_html_a6982b72e3e2551deab80d9e3fefaab64"><div class="ttname"><a href="classSVF_1_1RaceValidator.html#a6982b72e3e2551deab80d9e3fefaab64">SVF::RaceValidator::lsa</a></div><div class="ttdeci">LockAnalysis * lsa</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00033">LockResultValidator.cpp:33</a></div></div>
|
|
82
70
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_a03589368482d3f7ee7f6734e257dcbdf"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a03589368482d3f7ee7f6734e257dcbdf">SVF::LockResultValidator::LOCK_UNSOUND</a></div><div class="ttdeci">static const LOCK_FLAG LOCK_UNSOUND</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00112">LockResultValidator.h:112</a></div></div>
|
|
83
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
84
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00107">SVFIR.h:107</a></div></div>
|
|
85
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a054c3e668ce8b265bbc5d923f6243ce7"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a054c3e668ce8b265bbc5d923f6243ce7">SVF::SVFUtil::bugMsg2</a></div><div class="ttdeci">std::string bugMsg2(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00085">SVFUtil.cpp:85</a></div></div>
|
|
86
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a6a55f1f8598998a3ffbbc67d32eaf8c4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a6a55f1f8598998a3ffbbc67d32eaf8c4">SVF::SVFUtil::sucMsg</a></div><div class="ttdeci">std::string sucMsg(std::string msg)</div><div class="ttdoc">Returns successful message by converting a string into green string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00053">SVFUtil.cpp:53</a></div></div>
|
|
87
71
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_ab71d89c954395df7d108263b3fa87330"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#ab71d89c954395df7d108263b3fa87330">SVF::LockResultValidator::getOutput</a></div><div class="ttdeci">std::string getOutput(const char *scenario, LOCK_FLAG analysisRes)</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00073">LockResultValidator.cpp:73</a></div></div>
|
|
88
72
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_ab8a6935e1ea6f99d60ead862a7b1782f"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#ab8a6935e1ea6f99d60ead862a7b1782f">SVF::LockResultValidator::split</a></div><div class="ttdeci">Set< std::string > & split(const std::string &s, char delim, Set< std::string > &elems)</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00055">LockResultValidator.cpp:55</a></div></div>
|
|
89
73
|
<div class="ttc" id="classSVF_1_1RaceValidator_html_ab95520388bafe1efae63196400350690"><div class="ttname"><a href="classSVF_1_1RaceValidator.html#ab95520388bafe1efae63196400350690">SVF::RaceValidator::protectedByCommonLocks</a></div><div class="ttdeci">bool protectedByCommonLocks(const Instruction *I1, const Instruction *I2)</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00026">LockResultValidator.cpp:26</a></div></div>
|
|
90
|
-
<div class="ttc" id="
|
|
91
|
-
<div class="ttc" id="
|
|
92
|
-
<div class="ttc" id="classSVF_1_1RaceResultValidator_html_aec8b923a0da580113a13bf94ffb3ebd7"><div class="ttname"><a href="classSVF_1_1RaceResultValidator.html#aec8b923a0da580113a13bf94ffb3ebd7">SVF::RaceResultValidator::init</a></div><div class="ttdeci">void init(SVFModule *M)</div><div class="ttdoc">Initialization. </div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00215">MTAResultValidator.h:215</a></div></div>
|
|
93
|
-
<div class="ttc" id="classSVF_1_1RaceResultValidator_html_ab8a261120a7f6520d22a6f5cdf2257e9"><div class="ttname"><a href="classSVF_1_1RaceResultValidator.html#ab8a261120a7f6520d22a6f5cdf2257e9">SVF::RaceResultValidator::analyze</a></div><div class="ttdeci">void analyze()</div><div class="ttdoc">Analysis. </div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00223">MTAResultValidator.h:223</a></div></div>
|
|
74
|
+
<div class="ttc" id="classSVF_1_1RaceResultValidator_html_aec8b923a0da580113a13bf94ffb3ebd7"><div class="ttname"><a href="classSVF_1_1RaceResultValidator.html#aec8b923a0da580113a13bf94ffb3ebd7">SVF::RaceResultValidator::init</a></div><div class="ttdeci">void init(SVFModule *M)</div><div class="ttdoc">Initialization. </div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00216">MTAResultValidator.h:216</a></div></div>
|
|
75
|
+
<div class="ttc" id="classSVF_1_1RaceResultValidator_html_ab8a261120a7f6520d22a6f5cdf2257e9"><div class="ttname"><a href="classSVF_1_1RaceResultValidator.html#ab8a261120a7f6520d22a6f5cdf2257e9">SVF::RaceResultValidator::analyze</a></div><div class="ttdeci">void analyze()</div><div class="ttdoc">Analysis. </div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00224">MTAResultValidator.h:224</a></div></div>
|
|
94
76
|
<div class="ttc" id="classSVF_1_1RaceValidator_html_a7ec5d97155d170033398757af56691ad"><div class="ttname"><a href="classSVF_1_1RaceValidator.html#a7ec5d97155d170033398757af56691ad">SVF::RaceValidator::RaceValidator</a></div><div class="ttdeci">RaceValidator(LockAnalysis *ls)</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00023">LockResultValidator.cpp:23</a></div></div>
|
|
95
77
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_afec6058866fe334646db78227fb4d6a6"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#afec6058866fe334646db78227fb4d6a6">SVF::LockResultValidator::CxtLockSetStr</a></div><div class="ttdeci">Set< std::string > CxtLockSetStr</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00022">LockResultValidator.h:22</a></div></div>
|
|
96
|
-
<div class="ttc" id="
|
|
97
|
-
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00061">BasicTypes.h:61</a></div></div>
|
|
98
|
-
<div class="ttc" id="classSVF_1_1SVFValue_html_aa678ca4616a3e69b53726b33d0b9c5a2"><div class="ttname"><a href="classSVF_1_1SVFValue.html#aa678ca4616a3e69b53726b33d0b9c5a2">SVF::SVFValue::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdoc">Needs to be implemented by a specific SVF front end (e.g., the implementation in LLVMUtil) ...</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01029">LLVMUtil.cpp:1029</a></div></div>
|
|
78
|
+
<div class="ttc" id="MTAResultValidator_8h_html"><div class="ttname"><a href="MTAResultValidator_8h.html">MTAResultValidator.h</a></div></div>
|
|
99
79
|
<div class="ttc" id="LockResultValidator_8h_html"><div class="ttname"><a href="LockResultValidator_8h.html">LockResultValidator.h</a></div></div>
|
|
100
|
-
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00063">BasicTypes.h:63</a></div></div>
|
|
101
80
|
<div class="ttc" id="namespaceSVFUtil_html"><div class="ttname"><a href="namespaceSVFUtil.html">SVFUtil</a></div></div>
|
|
102
|
-
<div class="ttc" id="namespaceSVF_html_ad9ebd847ed5d901cd30b1cfcdaec3462"><div class="ttname"><a href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">SVF::ConstantDataArray</a></div><div class="ttdeci">llvm::ConstantDataArray ConstantDataArray</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00097">BasicTypes.h:97</a></div></div>
|
|
103
81
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_a760c0f6f891daa4532a44c6594794bb8"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">SVF::LockResultValidator::LOCK_IMPRECISE</a></div><div class="ttdeci">static const LOCK_FLAG LOCK_IMPRECISE</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00111">LockResultValidator.h:111</a></div></div>
|
|
104
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af54e70082388bbd70868250aaa0bc86b"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">SVF::SVFUtil::split</a></div><div class="ttdeci">std::vector< std::string > split(const std::string &s, char seperator)</div><div class="ttdoc">Split into two substrings around the first occurrence of a separator string. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00212">SVFUtil.h:212</a></div></div>
|
|
105
|
-
<div class="ttc" id="classSVF_1_1LockAnalysis_html"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html">SVF::LockAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8h_source.html#l00044">LockAnalysis.h:44</a></div></div>
|
|
106
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00050">SVFUtil.h:50</a></div></div>
|
|
107
|
-
<div class="ttc" id="classSVF_1_1SVFInstruction_html_aef7ad257ea809101df33779463907f3e"><div class="ttname"><a href="classSVF_1_1SVFInstruction.html#aef7ad257ea809101df33779463907f3e">SVF::SVFInstruction::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00619">SVFValue.h:619</a></div></div>
|
|
108
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_afdc3358522417de9a0d3a181a329f722"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#afdc3358522417de9a0d3a181a329f722">SVF::SVFUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const SVFInstruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00173">SVFUtil.h:173</a></div></div>
|
|
109
|
-
<div class="ttc" id="namespaceSVF_html_ac4e93e1fec646ff222940a663843921b"><div class="ttname"><a href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">SVF::GetElementPtrInst</a></div><div class="ttdeci">llvm::GetElementPtrInst GetElementPtrInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00137">BasicTypes.h:137</a></div></div>
|
|
110
|
-
<div class="ttc" id="classSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00087">ICFG.h:87</a></div></div>
|
|
111
82
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_a3b7d25dfe5251f49afbb733c25eee70f"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a3b7d25dfe5251f49afbb733c25eee70f">SVF::LockResultValidator::LOCK_FLAG</a></div><div class="ttdeci">unsigned LOCK_FLAG</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00025">LockResultValidator.h:25</a></div></div>
|
|
112
|
-
<div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00100">BasicTypes.h:100</a></div></div>
|
|
113
|
-
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
114
|
-
<div class="ttc" id="classSVF_1_1Options_html_a944aee270c78d42c998691da283165f1"><div class="ttname"><a href="classSVF_1_1Options.html#a944aee270c78d42c998691da283165f1">SVF::Options::PrintValidRes</a></div><div class="ttdeci">static const Option< bool > PrintValidRes</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00185">Options.h:185</a></div></div>
|
|
115
|
-
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00096">LLVMModule.h:96</a></div></div>
|
|
116
83
|
<div class="ttc" id="classSVF_1_1RaceValidator_html"><div class="ttname"><a href="classSVF_1_1RaceValidator.html">SVF::RaceValidator</a></div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00020">LockResultValidator.cpp:20</a></div></div>
|
|
117
84
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_ae6c8782d10e96951f059789aaa309cc2"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#ae6c8782d10e96951f059789aaa309cc2">SVF::LockResultValidator::collectLockTargets</a></div><div class="ttdeci">bool collectLockTargets()</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00094">LockResultValidator.cpp:94</a></div></div>
|
|
118
|
-
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="
|
|
85
|
+
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00016">LockResultValidator.cpp:16</a></div></div>
|
|
119
86
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_a1b1b841451fe51cb58417e864a28cbfc"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a1b1b841451fe51cb58417e864a28cbfc">SVF::LockResultValidator::getStringArg</a></div><div class="ttdeci">Set< std::string > getStringArg(const Instruction *inst, unsigned int arg_num)</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00038">LockResultValidator.cpp:38</a></div></div>
|
|
120
|
-
<div class="ttc" id="namespaceSVF_html_a5a6e8ab900d5cd17ef72661006a7fbe0"><div class="ttname"><a href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">SVF::LoadInst</a></div><div class="ttdeci">llvm::LoadInst LoadInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00124">BasicTypes.h:124</a></div></div>
|
|
121
87
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_a005c38dd07eb66d52066fa1927b1e19f"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a005c38dd07eb66d52066fa1927b1e19f">SVF::LockResultValidator::LOCK_TRUE</a></div><div class="ttdeci">static const LOCK_FLAG LOCK_TRUE</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00110">LockResultValidator.h:110</a></div></div>
|
|
122
88
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_a88ff3ed1398a0b847d71a4c0352ed66d"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a88ff3ed1398a0b847d71a4c0352ed66d">SVF::LockResultValidator::analyze</a></div><div class="ttdeci">void analyze()</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00201">LockResultValidator.cpp:201</a></div></div>
|
|
123
|
-
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a710aad28484677637367e9098a55c7d7"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a710aad28484677637367e9098a55c7d7">SVF::LockAnalysis::CxtStmtToCxtLockSet</a></div><div class="ttdeci">Map< CxtStmt, CxtLockSet > CxtStmtToCxtLockSet</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8h_source.html#l00076">LockAnalysis.h:76</a></div></div>
|
|
124
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a570ad42ad516e3fabb91a3563b618c0b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">SVF::SVFIR::getSVFStmtList</a></div><div class="ttdeci">SVFStmtList & getSVFStmtList(const ICFGNode *inst)</div><div class="ttdoc">Given an instruction, get all its PAGEdges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00200">SVFIR.h:200</a></div></div>
|
|
125
|
-
<div class="ttc" id="namespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00121">BasicTypes.h:121</a></div></div>
|
|
126
89
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_acddd2f9d118cbf448d92626d281fdaf9"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#acddd2f9d118cbf448d92626d281fdaf9">SVF::LockResultValidator::validateStmtInLock</a></div><div class="ttdeci">LOCK_FLAG validateStmtInLock()</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8cpp_source.html#l00135">LockResultValidator.cpp:135</a></div></div>
|
|
127
|
-
<div class="ttc" id="classSVF_1_1RaceResultValidator_html"><div class="ttname"><a href="classSVF_1_1RaceResultValidator.html">SVF::RaceResultValidator</a></div><div class="ttdoc">Validate the result of concurrent analysis. </div><div class="ttdef"><b>Definition:</b> <a href="
|
|
128
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
|
|
129
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a5d4bb92f5df30417f414397f8e58cf01"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5d4bb92f5df30417f414397f8e58cf01">SVF::SVFUtil::errMsg</a></div><div class="ttdeci">std::string errMsg(std::string msg)</div><div class="ttdoc">Print error message by converting a string into red string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00075">SVFUtil.cpp:75</a></div></div>
|
|
130
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00163">SVFIR.h:163</a></div></div>
|
|
131
|
-
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
132
|
-
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00058">BasicTypes.h:58</a></div></div>
|
|
133
|
-
<div class="ttc" id="cJSON_8h_html_ac76cea59d438ba893d2f82aabb367d14"><div class="ttname"><a href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a></div><div class="ttdeci">cJSON * item</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00222">cJSON.h:222</a></div></div>
|
|
134
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6c66553e2559eebfe4f98c0c7ec4b08"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6c66553e2559eebfe4f98c0c7ec4b08">SVF::SVFUtil::bugMsg1</a></div><div class="ttdeci">std::string bugMsg1(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00080">SVFUtil.cpp:80</a></div></div>
|
|
135
|
-
<div class="ttc" id="classSVF_1_1SVFStmt_html"><div class="ttname"><a href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00051">SVFStatements.h:51</a></div></div>
|
|
136
|
-
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_ae74f307b6f96950ceedb2c375ef1c3a3"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#ae74f307b6f96950ceedb2c375ef1c3a3">SVF::LLVMModuleSet::getSVFInstruction</a></div><div class="ttdeci">SVFInstruction * getSVFInstruction(const Instruction *inst) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00209">LLVMModule.h:209</a></div></div>
|
|
90
|
+
<div class="ttc" id="classSVF_1_1RaceResultValidator_html"><div class="ttname"><a href="classSVF_1_1RaceResultValidator.html">SVF::RaceResultValidator</a></div><div class="ttdoc">Validate the result of concurrent analysis. </div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00169">MTAResultValidator.h:169</a></div></div>
|
|
137
91
|
</div><!-- fragment --></div><!-- contents -->
|
|
138
92
|
<!-- start footer part -->
|
|
139
93
|
<hr class="footer"/><address class="footer"><small>
|
|
@@ -69,8 +69,8 @@ $(function() {
|
|
|
69
69
|
<div class="title">LockResultValidator.h File Reference</div> </div>
|
|
70
70
|
</div><!--header-->
|
|
71
71
|
<div class="contents">
|
|
72
|
-
<div class="textblock"><code>#include "
|
|
73
|
-
<code>#include "
|
|
72
|
+
<div class="textblock"><code>#include "MTA/LockAnalysis.h"</code><br />
|
|
73
|
+
<code>#include "SVF-LLVM/LLVMUtil.h"</code><br />
|
|
74
74
|
</div>
|
|
75
75
|
<p><a href="LockResultValidator_8h_source.html">Go to the source code of this file.</a></p>
|
|
76
76
|
<table class="memberdecls">
|
|
@@ -82,7 +82,6 @@ Classes</h2></td></tr>
|
|
|
82
82
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
|
83
83
|
Namespaces</h2></td></tr>
|
|
84
84
|
<tr class="memitem:namespaceSVF"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceSVF.html">SVF</a></td></tr>
|
|
85
|
-
<tr class="memdesc:namespaceSVF"><td class="mdescLeft"> </td><td class="mdescRight">for isBitcode <br /></td></tr>
|
|
86
85
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
87
86
|
</table>
|
|
88
87
|
</div><!-- contents -->
|