svf-tools 1.0.758 → 1.0.760
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 +7 -0
- package/SVF-doxygen/html/html/AccessPath_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AddressValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CFBasicBlockG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/CFBasicBlockG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CFGrammar_8cpp_source.html +11 -8
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CommandLine_8h_source.html +2 -1
- package/SVF-doxygen/html/html/ConsExeState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/DCHG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp.html +0 -196
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +121 -786
- package/SVF-doxygen/html/html/ExtAPI_8h.html +2 -67
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +69 -654
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/IntervalExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IntervalValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp.html +3 -4
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1408 -1289
- package/SVF-doxygen/html/html/LLVMModule_8h.html +1 -0
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +418 -400
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +744 -616
- package/SVF-doxygen/html/html/LLVMUtil_8h.html +9 -1
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +485 -472
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/MHP_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/NumericLiteral_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +2 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +1 -1
- package/SVF-doxygen/html/html/RelExeState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFBugReport_8cpp_source.html +362 -365
- package/SVF-doxygen/html/html/SVFBugReport_8h_source.html +24 -24
- package/SVF-doxygen/html/html/SVFFileSystem_8cpp_source.html +2087 -2084
- package/SVF-doxygen/html/html/SVFFileSystem_8h.html +1 -1
- package/SVF-doxygen/html/html/SVFFileSystem_8h_source.html +60 -60
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIR2ConsExeState_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +454 -527
- package/SVF-doxygen/html/html/SVFIRBuilder_8h.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +211 -233
- package/SVF-doxygen/html/html/SVFIRExtAPI_8cpp.html +2 -0
- package/SVF-doxygen/html/html/SVFIRExtAPI_8cpp_source.html +286 -682
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFModule_8h.html +0 -1
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +258 -260
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFType_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +7 -6
- package/SVF-doxygen/html/html/SVFUtil_8h.html +4 -9
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +392 -405
- package/SVF-doxygen/html/html/SVFValue_8cpp_source.html +11 -10
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +1038 -1030
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +6 -6
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymState_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +28 -28
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/TCT_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/WTO_8h_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +1 -4
- package/SVF-doxygen/html/html/cJSON_8cpp.html +2 -1
- package/SVF-doxygen/html/html/cJSON_8cpp_source.html +2 -1
- package/SVF-doxygen/html/html/cfl_8cpp.html +2 -2
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classOption.html +2 -1
- package/SVF-doxygen/html/html/classSVF_1_1AccessPath.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddressValue.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BufferOverflowBug.html +50 -50
- package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockGWTO.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockGWTOCycle.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFBasicBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +95 -95
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConsExeState.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtDPItem.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThreadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeBug.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +8 -77
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +130 -1337
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FileNeverCloseBug.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1FilePartialCloseBug.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FullNullPtrDereferenceBug.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GenericBug.html +9 -13
- package/SVF-doxygen/html/html/classSVF_1_1GenericGraphReader.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +11 -8
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFGWriter.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntervalExeState.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntervalValue.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +42 -40
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1583 -1452
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1NeverFreeBug.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1NumericLiteral.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PartialLeakBug.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1PartialNullPtrDereferenceBug.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1RaceValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ReaderIDToObjMap.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ReaderPtrPool.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RelExeState.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFArgument.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +73 -73
- package/SVF-doxygen/html/html/classSVF_1_1SVFBlackHoleValue.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1SVFBugEvent.html +50 -50
- package/SVF-doxygen/html/html/classSVF_1_1SVFBugReport.html +87 -87
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +67 -67
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstant.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantData.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantFP.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantInt.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantNullPtr.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +15 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +222 -153
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobalValue.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ConsExeState.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +64 -73
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +905 -1767
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRReader.html +1126 -1124
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRWriter.html +547 -546
- package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1SVFLoopAndDomInfo.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFMetadataAsValue.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +173 -173
- package/SVF-doxygen/html/html/classSVF_1_1SVFModuleReader.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFModuleWriter.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherType.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherValue.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFStructType.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1SVFVirtualCallInst.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymState.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfoReader.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1iter__adaptor__base.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1iter__facade__base_1_1ReferenceProxy.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1iter__range.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1mapped__iter.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1pointer__iterator.html +1 -1
- package/SVF-doxygen/html/html/classes.html +335 -338
- package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/dir_3bbf4ce25bc1411b817b5643b794c8fb.html +2 -0
- package/SVF-doxygen/html/html/extapi_8c.html +1950 -0
- package/SVF-doxygen/html/html/extapi_8c_source.html +1488 -0
- package/SVF-doxygen/html/html/files.html +29 -28
- package/SVF-doxygen/html/html/functions_a.html +17 -27
- package/SVF-doxygen/html/html/functions_b.html +9 -12
- package/SVF-doxygen/html/html/functions_c.html +26 -70
- package/SVF-doxygen/html/html/functions_d.html +3 -7
- package/SVF-doxygen/html/html/functions_e.html +4 -121
- package/SVF-doxygen/html/html/functions_enum.html +0 -6
- package/SVF-doxygen/html/html/functions_eval.html +0 -1
- package/SVF-doxygen/html/html/functions_eval_c.html +1 -15
- package/SVF-doxygen/html/html/functions_eval_e.html +0 -96
- package/SVF-doxygen/html/html/functions_eval_g.html +1 -2
- package/SVF-doxygen/html/html/functions_eval_l.html +0 -1
- package/SVF-doxygen/html/html/functions_eval_m.html +0 -6
- package/SVF-doxygen/html/html/functions_eval_o.html +0 -3
- package/SVF-doxygen/html/html/functions_eval_r.html +0 -6
- package/SVF-doxygen/html/html/functions_eval_s.html +0 -1
- package/SVF-doxygen/html/html/functions_f.html +16 -19
- package/SVF-doxygen/html/html/functions_func.html +6 -18
- package/SVF-doxygen/html/html/functions_func_e.html +1 -13
- package/SVF-doxygen/html/html/functions_func_g.html +24 -91
- package/SVF-doxygen/html/html/functions_func_h.html +9 -12
- package/SVF-doxygen/html/html/functions_func_i.html +16 -28
- package/SVF-doxygen/html/html/functions_func_n.html +0 -3
- package/SVF-doxygen/html/html/functions_func_p.html +3 -12
- package/SVF-doxygen/html/html/functions_func_s.html +20 -83
- package/SVF-doxygen/html/html/functions_g.html +32 -100
- package/SVF-doxygen/html/html/functions_h.html +6 -9
- package/SVF-doxygen/html/html/functions_i.html +16 -28
- package/SVF-doxygen/html/html/functions_l.html +0 -1
- package/SVF-doxygen/html/html/functions_m.html +1 -7
- package/SVF-doxygen/html/html/functions_n.html +4 -7
- package/SVF-doxygen/html/html/functions_o.html +31 -44
- package/SVF-doxygen/html/html/functions_p.html +18 -29
- package/SVF-doxygen/html/html/functions_r.html +9 -16
- package/SVF-doxygen/html/html/functions_s.html +16 -84
- package/SVF-doxygen/html/html/functions_t.html +4 -10
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_a.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_b.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_c.html +1 -23
- package/SVF-doxygen/html/html/functions_vars_d.html +1 -5
- package/SVF-doxygen/html/html/functions_vars_e.html +2 -8
- package/SVF-doxygen/html/html/functions_vars_f.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_o.html +0 -9
- package/SVF-doxygen/html/html/functions_vars_r.html +1 -2
- package/SVF-doxygen/html/html/functions_vars_s.html +1 -5
- package/SVF-doxygen/html/html/functions_vars_t.html +0 -6
- package/SVF-doxygen/html/html/globals.html +22 -4
- package/SVF-doxygen/html/html/globals_a.html +3 -0
- package/SVF-doxygen/html/html/globals_b.html +3 -0
- package/SVF-doxygen/html/html/globals_defs.html +3 -9
- package/SVF-doxygen/html/html/globals_e.html +0 -3
- package/SVF-doxygen/html/html/globals_f.html +11 -2
- package/SVF-doxygen/html/html/globals_func.html +159 -15
- package/SVF-doxygen/html/html/globals_g.html +13 -4
- package/SVF-doxygen/html/html/globals_i.html +41 -2
- package/SVF-doxygen/html/html/globals_j.html +3 -6
- package/SVF-doxygen/html/html/globals_l.html +3 -0
- package/SVF-doxygen/html/html/globals_m.html +8 -2
- package/SVF-doxygen/html/html/globals_n.html +2 -1
- package/SVF-doxygen/html/html/globals_p.html +1 -4
- package/SVF-doxygen/html/html/globals_r.html +12 -6
- package/SVF-doxygen/html/html/globals_s.html +33 -0
- package/SVF-doxygen/html/html/globals_t.html +3 -0
- package/SVF-doxygen/html/html/hierarchy.html +526 -529
- package/SVF-doxygen/html/html/iterator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/iterator__range_8h_source.html +1 -1
- package/SVF-doxygen/html/html/llvm2svf_8cpp.html +1 -1
- package/SVF-doxygen/html/html/llvm2svf_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/menudata.js +3 -0
- package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +152 -151
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +1003 -776
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +298 -368
- package/SVF-doxygen/html/html/namespacemembers_func_g.html +11 -5
- package/SVF-doxygen/html/html/namespacemembers_func_i.html +11 -14
- package/SVF-doxygen/html/html/namespacemembers_func_r.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_g.html +11 -5
- package/SVF-doxygen/html/html/namespacemembers_i.html +8 -11
- package/SVF-doxygen/html/html/namespacemembers_r.html +6 -0
- package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/search/all_0.js +153 -147
- package/SVF-doxygen/html/html/search/all_1.js +476 -478
- package/SVF-doxygen/html/html/search/all_10.js +323 -327
- package/SVF-doxygen/html/html/search/all_11.js +212 -209
- package/SVF-doxygen/html/html/search/all_12.js +536 -547
- package/SVF-doxygen/html/html/search/all_13.js +188 -189
- package/SVF-doxygen/html/html/search/all_14.js +66 -66
- package/SVF-doxygen/html/html/search/all_15.js +170 -170
- package/SVF-doxygen/html/html/search/all_16.js +60 -60
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_18.js +1 -1
- package/SVF-doxygen/html/html/search/all_19.js +10 -10
- package/SVF-doxygen/html/html/search/all_1a.js +169 -169
- package/SVF-doxygen/html/html/search/all_2.js +159 -159
- package/SVF-doxygen/html/html/search/all_3.js +597 -608
- package/SVF-doxygen/html/html/search/all_4.js +226 -227
- package/SVF-doxygen/html/html/search/all_5.js +116 -156
- package/SVF-doxygen/html/html/search/all_6.js +225 -223
- package/SVF-doxygen/html/html/search/all_7.js +996 -1012
- package/SVF-doxygen/html/html/search/all_8.js +191 -192
- package/SVF-doxygen/html/html/search/all_9.js +605 -597
- package/SVF-doxygen/html/html/search/all_a.js +46 -47
- package/SVF-doxygen/html/html/search/all_b.js +26 -26
- package/SVF-doxygen/html/html/search/all_c.js +114 -113
- package/SVF-doxygen/html/html/search/all_d.js +196 -196
- package/SVF-doxygen/html/html/search/all_e.js +205 -206
- package/SVF-doxygen/html/html/search/all_f.js +116 -122
- package/SVF-doxygen/html/html/search/classes_0.js +26 -26
- package/SVF-doxygen/html/html/search/classes_1.js +9 -9
- package/SVF-doxygen/html/html/search/classes_10.js +73 -73
- package/SVF-doxygen/html/html/search/classes_11.js +15 -15
- package/SVF-doxygen/html/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/html/search/classes_13.js +10 -10
- package/SVF-doxygen/html/html/search/classes_14.js +14 -14
- package/SVF-doxygen/html/html/search/classes_15.js +1 -1
- package/SVF-doxygen/html/html/search/classes_2.js +76 -76
- package/SVF-doxygen/html/html/search/classes_3.js +35 -35
- package/SVF-doxygen/html/html/search/classes_4.js +8 -10
- package/SVF-doxygen/html/html/search/classes_5.js +28 -28
- package/SVF-doxygen/html/html/search/classes_6.js +98 -98
- package/SVF-doxygen/html/html/search/classes_7.js +33 -33
- package/SVF-doxygen/html/html/search/classes_8.js +56 -56
- package/SVF-doxygen/html/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/html/search/classes_a.js +12 -12
- package/SVF-doxygen/html/html/search/classes_b.js +29 -29
- package/SVF-doxygen/html/html/search/classes_c.js +6 -6
- package/SVF-doxygen/html/html/search/classes_d.js +18 -19
- package/SVF-doxygen/html/html/search/classes_e.js +36 -36
- package/SVF-doxygen/html/html/search/classes_f.js +25 -25
- package/SVF-doxygen/html/html/search/defines_0.js +3 -3
- package/SVF-doxygen/html/html/search/defines_1.js +2 -2
- package/SVF-doxygen/html/html/search/defines_2.js +30 -30
- package/SVF-doxygen/html/html/search/defines_3.js +20 -20
- package/SVF-doxygen/html/html/search/defines_4.js +2 -3
- package/SVF-doxygen/html/html/search/defines_5.js +4 -4
- package/SVF-doxygen/html/html/search/defines_6.js +2 -2
- package/SVF-doxygen/html/html/search/defines_7.js +5 -5
- package/SVF-doxygen/html/html/search/defines_8.js +11 -13
- package/SVF-doxygen/html/html/search/defines_9.js +9 -9
- package/SVF-doxygen/html/html/search/defines_a.js +2 -2
- package/SVF-doxygen/html/html/search/defines_b.js +1 -1
- package/SVF-doxygen/html/html/search/defines_c.js +3 -2
- package/SVF-doxygen/html/html/search/defines_d.js +2 -2
- package/SVF-doxygen/html/html/search/defines_e.js +6 -6
- package/SVF-doxygen/html/html/search/defines_f.js +3 -3
- package/SVF-doxygen/html/html/search/enums_0.js +3 -3
- package/SVF-doxygen/html/html/search/enums_1.js +2 -2
- package/SVF-doxygen/html/html/search/enums_10.js +1 -1
- package/SVF-doxygen/html/html/search/enums_11.js +1 -1
- package/SVF-doxygen/html/html/search/enums_2.js +8 -8
- package/SVF-doxygen/html/html/search/enums_3.js +1 -1
- package/SVF-doxygen/html/html/search/enums_4.js +3 -4
- package/SVF-doxygen/html/html/search/enums_5.js +1 -1
- package/SVF-doxygen/html/html/search/enums_6.js +2 -2
- package/SVF-doxygen/html/html/search/enums_7.js +2 -2
- package/SVF-doxygen/html/html/search/enums_8.js +4 -4
- package/SVF-doxygen/html/html/search/enums_9.js +1 -1
- package/SVF-doxygen/html/html/search/enums_a.js +1 -2
- package/SVF-doxygen/html/html/search/enums_b.js +7 -7
- package/SVF-doxygen/html/html/search/enums_c.js +1 -1
- package/SVF-doxygen/html/html/search/enums_d.js +4 -4
- package/SVF-doxygen/html/html/search/enums_e.js +2 -2
- package/SVF-doxygen/html/html/search/enums_f.js +4 -4
- package/SVF-doxygen/html/html/search/enumvalues_0.js +14 -14
- package/SVF-doxygen/html/html/search/enumvalues_1.js +14 -14
- package/SVF-doxygen/html/html/search/enumvalues_10.js +35 -35
- package/SVF-doxygen/html/html/search/enumvalues_11.js +3 -3
- package/SVF-doxygen/html/html/search/enumvalues_12.js +10 -10
- package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_14.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_15.js +3 -3
- package/SVF-doxygen/html/html/search/enumvalues_2.js +36 -40
- package/SVF-doxygen/html/html/search/enumvalues_3.js +13 -13
- package/SVF-doxygen/html/html/search/enumvalues_4.js +2 -34
- package/SVF-doxygen/html/html/search/enumvalues_5.js +48 -48
- package/SVF-doxygen/html/html/search/enumvalues_6.js +6 -6
- package/SVF-doxygen/html/html/search/enumvalues_7.js +9 -9
- package/SVF-doxygen/html/html/search/enumvalues_8.js +23 -23
- package/SVF-doxygen/html/html/search/enumvalues_9.js +6 -6
- package/SVF-doxygen/html/html/search/enumvalues_a.js +15 -17
- package/SVF-doxygen/html/html/search/enumvalues_b.js +11 -11
- package/SVF-doxygen/html/html/search/enumvalues_c.js +5 -6
- package/SVF-doxygen/html/html/search/enumvalues_d.js +18 -18
- package/SVF-doxygen/html/html/search/enumvalues_e.js +9 -11
- package/SVF-doxygen/html/html/search/enumvalues_f.js +45 -45
- package/SVF-doxygen/html/html/search/files_0.js +13 -13
- package/SVF-doxygen/html/html/search/files_1.js +7 -7
- package/SVF-doxygen/html/html/search/files_10.js +8 -8
- package/SVF-doxygen/html/html/search/files_11.js +8 -8
- package/SVF-doxygen/html/html/search/files_12.js +2 -2
- package/SVF-doxygen/html/html/search/files_2.js +49 -49
- package/SVF-doxygen/html/html/search/files_3.js +14 -14
- package/SVF-doxygen/html/html/search/files_4.js +5 -4
- package/SVF-doxygen/html/html/search/files_5.js +13 -13
- package/SVF-doxygen/html/html/search/files_6.js +9 -9
- package/SVF-doxygen/html/html/search/files_7.js +14 -14
- package/SVF-doxygen/html/html/search/files_8.js +13 -13
- package/SVF-doxygen/html/html/search/files_9.js +18 -18
- package/SVF-doxygen/html/html/search/files_a.js +3 -3
- package/SVF-doxygen/html/html/search/files_b.js +2 -2
- package/SVF-doxygen/html/html/search/files_c.js +20 -20
- package/SVF-doxygen/html/html/search/files_d.js +4 -4
- package/SVF-doxygen/html/html/search/files_e.js +62 -62
- package/SVF-doxygen/html/html/search/files_f.js +8 -8
- package/SVF-doxygen/html/html/search/functions_0.js +6 -351
- package/SVF-doxygen/html/html/search/functions_1.js +348 -81
- package/SVF-doxygen/html/html/search/functions_10.js +139 -122
- package/SVF-doxygen/html/html/search/functions_11.js +126 -283
- package/SVF-doxygen/html/html/search/functions_12.js +273 -55
- package/SVF-doxygen/html/html/search/functions_13.js +56 -38
- package/SVF-doxygen/html/html/search/functions_14.js +38 -71
- package/SVF-doxygen/html/html/search/functions_15.js +71 -29
- package/SVF-doxygen/html/html/search/functions_16.js +29 -2
- package/SVF-doxygen/html/html/search/functions_17.js +2 -169
- package/SVF-doxygen/html/html/search/functions_18.html +30 -0
- package/SVF-doxygen/html/html/search/functions_18.js +172 -0
- package/SVF-doxygen/html/html/search/functions_2.js +82 -251
- package/SVF-doxygen/html/html/search/functions_3.js +251 -71
- package/SVF-doxygen/html/html/search/functions_4.js +71 -55
- package/SVF-doxygen/html/html/search/functions_5.js +51 -55
- package/SVF-doxygen/html/html/search/functions_6.js +58 -832
- package/SVF-doxygen/html/html/search/functions_7.js +816 -144
- package/SVF-doxygen/html/html/search/functions_8.js +143 -417
- package/SVF-doxygen/html/html/search/functions_9.js +425 -29
- package/SVF-doxygen/html/html/search/functions_a.js +30 -2
- package/SVF-doxygen/html/html/search/functions_b.js +2 -23
- package/SVF-doxygen/html/html/search/functions_c.js +24 -75
- package/SVF-doxygen/html/html/search/functions_d.js +77 -35
- package/SVF-doxygen/html/html/search/functions_e.js +34 -56
- package/SVF-doxygen/html/html/search/functions_f.js +56 -143
- package/SVF-doxygen/html/html/search/namespaces_0.js +1 -1
- package/SVF-doxygen/html/html/search/namespaces_1.js +7 -7
- package/SVF-doxygen/html/html/search/related_0.js +2 -2
- package/SVF-doxygen/html/html/search/related_1.js +1 -1
- package/SVF-doxygen/html/html/search/related_2.js +2 -2
- package/SVF-doxygen/html/html/search/related_3.js +2 -2
- package/SVF-doxygen/html/html/search/related_4.js +2 -2
- package/SVF-doxygen/html/html/search/related_5.js +1 -1
- package/SVF-doxygen/html/html/search/related_6.js +2 -2
- package/SVF-doxygen/html/html/search/related_7.js +4 -4
- package/SVF-doxygen/html/html/search/related_8.js +2 -2
- package/SVF-doxygen/html/html/search/related_9.js +4 -4
- package/SVF-doxygen/html/html/search/related_a.js +19 -19
- package/SVF-doxygen/html/html/search/related_b.js +4 -4
- package/SVF-doxygen/html/html/search/related_c.js +1 -1
- package/SVF-doxygen/html/html/search/related_d.js +11 -11
- package/SVF-doxygen/html/html/search/related_e.js +2 -2
- package/SVF-doxygen/html/html/search/related_f.js +2 -2
- package/SVF-doxygen/html/html/search/searchdata.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_0.js +18 -18
- package/SVF-doxygen/html/html/search/typedefs_1.js +25 -25
- package/SVF-doxygen/html/html/search/typedefs_10.js +60 -60
- package/SVF-doxygen/html/html/search/typedefs_11.js +13 -13
- package/SVF-doxygen/html/html/search/typedefs_12.js +11 -11
- package/SVF-doxygen/html/html/search/typedefs_13.js +35 -35
- package/SVF-doxygen/html/html/search/typedefs_14.js +8 -8
- package/SVF-doxygen/html/html/search/typedefs_2.js +126 -126
- package/SVF-doxygen/html/html/search/typedefs_3.js +39 -39
- package/SVF-doxygen/html/html/search/typedefs_4.js +16 -16
- package/SVF-doxygen/html/html/search/typedefs_5.js +41 -41
- package/SVF-doxygen/html/html/search/typedefs_6.js +52 -52
- package/SVF-doxygen/html/html/search/typedefs_7.js +40 -40
- package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_9.js +6 -6
- package/SVF-doxygen/html/html/search/typedefs_a.js +29 -29
- package/SVF-doxygen/html/html/search/typedefs_b.js +29 -29
- package/SVF-doxygen/html/html/search/typedefs_c.js +40 -40
- package/SVF-doxygen/html/html/search/typedefs_d.js +15 -15
- package/SVF-doxygen/html/html/search/typedefs_e.js +52 -52
- package/SVF-doxygen/html/html/search/typedefs_f.js +14 -14
- package/SVF-doxygen/html/html/search/variables_0.js +147 -147
- package/SVF-doxygen/html/html/search/variables_1.js +75 -74
- package/SVF-doxygen/html/html/search/variables_10.js +97 -97
- package/SVF-doxygen/html/html/search/variables_11.js +46 -46
- package/SVF-doxygen/html/html/search/variables_12.js +92 -93
- package/SVF-doxygen/html/html/search/variables_13.js +75 -77
- package/SVF-doxygen/html/html/search/variables_14.js +14 -14
- package/SVF-doxygen/html/html/search/variables_15.js +48 -48
- package/SVF-doxygen/html/html/search/variables_16.js +9 -9
- package/SVF-doxygen/html/html/search/variables_17.js +1 -1
- package/SVF-doxygen/html/html/search/variables_18.js +2 -2
- package/SVF-doxygen/html/html/search/variables_2.js +34 -35
- package/SVF-doxygen/html/html/search/variables_3.js +141 -148
- package/SVF-doxygen/html/html/search/variables_4.js +55 -56
- package/SVF-doxygen/html/html/search/variables_5.js +38 -40
- package/SVF-doxygen/html/html/search/variables_6.js +66 -67
- package/SVF-doxygen/html/html/search/variables_7.js +33 -33
- package/SVF-doxygen/html/html/search/variables_8.js +7 -7
- package/SVF-doxygen/html/html/search/variables_9.js +77 -77
- package/SVF-doxygen/html/html/search/variables_a.js +4 -4
- package/SVF-doxygen/html/html/search/variables_b.js +10 -10
- package/SVF-doxygen/html/html/search/variables_c.js +45 -45
- package/SVF-doxygen/html/html/search/variables_d.js +56 -56
- package/SVF-doxygen/html/html/search/variables_e.js +123 -123
- package/SVF-doxygen/html/html/search/variables_f.js +30 -33
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__iterable.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__iterable_3_01T_00_01void__t_3_01decltype_07std_1_1begin_07std_1_1dec794949348c8e1e00603fd8633b6dd1f3.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map_3_01std_1_1map_3_01Ts_8_8_8_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__map_3_01std_1_1unordered__map_3_01Ts_8_8_8_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1deque_3_01Ts_8_8_8_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1list_3_01Ts_8_8_8_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__sequence__container_3_01std_1_1vector_3_01Ts_8_8_8_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set_3_01std_1_1set_3_01Ts_8_8_8_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__set_3_01std_1_1unordered__set_3_01Ts_8_8_8_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1make__void.html +2 -2
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +7 -7
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +3 -3
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +9 -9
- package/SVF-doxygen/html/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +9 -9
- package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/build.sh +1 -1
- package/package.json +1 -1
- package/svf/include/SVFIR/SVFModule.h +0 -1
- package/svf/include/SVFIR/SVFValue.h +7 -1
- package/svf/include/Util/ExtAPI.h +11 -457
- package/svf/include/Util/SVFUtil.h +7 -22
- package/svf/lib/SVFIR/SVFFileSystem.cpp +3 -1
- package/svf/lib/SVFIR/SVFValue.cpp +2 -2
- package/svf/lib/Util/ExtAPI.cpp +36 -595
- package/svf/lib/Util/Options.cpp +1 -1
- package/svf/lib/Util/SVFBugReport.cpp +0 -2
- package/svf-llvm/include/SVF-LLVM/LLVMModule.h +17 -0
- package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +14 -1
- package/svf-llvm/include/SVF-LLVM/SVFIRBuilder.h +5 -14
- package/svf-llvm/lib/LLVMModule.cpp +157 -43
- package/svf-llvm/lib/LLVMUtil.cpp +121 -0
- package/svf-llvm/lib/SVFIRBuilder.cpp +7 -76
- package/svf-llvm/lib/SVFIRExtAPI.cpp +161 -536
- package/svf-llvm/lib/extapi.c +1348 -0
- package/svf/include/Util/ExtAPI.json +0 -5853
package/svf/lib/Util/Options.cpp
CHANGED
|
@@ -772,7 +772,7 @@ const Option<bool> Options::VtableInSVFIR(
|
|
|
772
772
|
|
|
773
773
|
//WPAPass.cpp
|
|
774
774
|
const Option<std::string> Options::ExtAPIInput(
|
|
775
|
-
"extapi", "External API
|
|
775
|
+
"extapi", "External API extapi.bc", std::string(EXTAPI_PATH) + "/extapi.bc"
|
|
776
776
|
);
|
|
777
777
|
|
|
778
778
|
const Option<bool> Options::AnderSVFG(
|
|
@@ -51,14 +51,12 @@ const std::map<GenericBug::BugType, std::string> GenericBug::BugType2Str =
|
|
|
51
51
|
const std::string GenericBug::getLoc() const
|
|
52
52
|
{
|
|
53
53
|
const SVFBugEvent&sourceInstEvent = bugEventStack.at(bugEventStack.size() -1);
|
|
54
|
-
assert(sourceInstEvent.getEventType() == SVFBugEvent::SourceInst && "bugEventStack top should be a SourceInst event");
|
|
55
54
|
return sourceInstEvent.getEventLoc();
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
const std::string GenericBug::getFuncName() const
|
|
59
58
|
{
|
|
60
59
|
const SVFBugEvent&sourceInstEvent = bugEventStack.at(bugEventStack.size() -1);
|
|
61
|
-
assert(sourceInstEvent.getEventType() == SVFBugEvent::SourceInst && "bugEventStack top should be a SourceInst event");
|
|
62
60
|
return sourceInstEvent.getFuncName();
|
|
63
61
|
}
|
|
64
62
|
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
#include "Util/CppUtil.h"
|
|
35
35
|
#include "SVFIR/SVFValue.h"
|
|
36
36
|
#include "SVFIR/SVFModule.h"
|
|
37
|
+
#include "Util/Options.h"
|
|
37
38
|
|
|
38
39
|
namespace SVF
|
|
39
40
|
{
|
|
@@ -74,6 +75,8 @@ private:
|
|
|
74
75
|
FunDeclToDefMapTy FunDeclToDefMap;
|
|
75
76
|
/// Function definition to function declaration map
|
|
76
77
|
FunDefToDeclsMapTy FunDefToDeclsMap;
|
|
78
|
+
/// Record some "sse_" function declarations used in other ext function definition, e.g., svf_ext_foo(), and svf_ext_foo() used in app functions
|
|
79
|
+
FunctionSetType ExtFuncsVec;
|
|
77
80
|
/// Global definition to a rep definition map
|
|
78
81
|
GlobalDefToRepMapTy GlobalDefToRepMap;
|
|
79
82
|
|
|
@@ -233,6 +236,20 @@ public:
|
|
|
233
236
|
|
|
234
237
|
SVFOtherValue* getSVFOtherValue(const Value* ov);
|
|
235
238
|
|
|
239
|
+
/// Remove unused function in extapi.bc module
|
|
240
|
+
bool isUsedExtFunction(Function* func)
|
|
241
|
+
{
|
|
242
|
+
/// if this function func defined in extapi.bc but never used in application code (without any corresponding declared functions).
|
|
243
|
+
if (func->getParent()->getName().str() == Options::ExtAPIInput()
|
|
244
|
+
&& func->getName().str() != "svf__main"
|
|
245
|
+
&& FunDefToDeclsMap.find(func) == FunDefToDeclsMap.end()
|
|
246
|
+
&& std::find(ExtFuncsVec.begin(), ExtFuncsVec.end(), func) == ExtFuncsVec.end())
|
|
247
|
+
{
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
|
|
236
253
|
/// Get the corresponding Function based on its name
|
|
237
254
|
inline const SVFFunction* getSVFFunction(const std::string& name)
|
|
238
255
|
{
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
#include "SVF-LLVM/BasicTypes.h"
|
|
35
35
|
#include "SVF-LLVM/LLVMModule.h"
|
|
36
36
|
#include "SVFIR/SVFValue.h"
|
|
37
|
-
#include "Util/ExtAPI.h"
|
|
38
37
|
#include "Util/ThreadAPI.h"
|
|
39
38
|
|
|
40
39
|
namespace SVF
|
|
@@ -373,6 +372,20 @@ const std::string getSourceLocOfFunction(const Function* F);
|
|
|
373
372
|
bool isIntrinsicInst(const Instruction* inst);
|
|
374
373
|
bool isIntrinsicFun(const Function* func);
|
|
375
374
|
|
|
375
|
+
/// Get all called funcions in a parent function
|
|
376
|
+
std::vector<const Function *> getCalledFunctions(const Function *F);
|
|
377
|
+
std::vector<std::string> getFunAnnotations(const Function* fun);
|
|
378
|
+
void removeFunAnnotations(std::vector<Function*>& removedFuncList);
|
|
379
|
+
|
|
380
|
+
inline void removeUnusedFuncsAndAnnotations(std::vector<Function*> removedFuncList)
|
|
381
|
+
{
|
|
382
|
+
/// Remove unused function annotations in extapi.bc
|
|
383
|
+
LLVMUtil::removeFunAnnotations(removedFuncList);
|
|
384
|
+
/// Remove unused function in extapi.bc
|
|
385
|
+
for (Function* func : removedFuncList)
|
|
386
|
+
func->eraseFromParent();
|
|
387
|
+
}
|
|
388
|
+
|
|
376
389
|
/// Get the corresponding Function based on its name
|
|
377
390
|
inline const SVFFunction* getFunction(const std::string& name)
|
|
378
391
|
{
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
#define PAGBUILDER_H_
|
|
32
32
|
|
|
33
33
|
#include "SVFIR/SVFIR.h"
|
|
34
|
-
#include "Util/ExtAPI.h"
|
|
35
34
|
#include "SVF-LLVM/BasicTypes.h"
|
|
36
35
|
#include "SVF-LLVM/ICFGBuilder.h"
|
|
37
36
|
#include "SVF-LLVM/LLVMModule.h"
|
|
37
|
+
#include "SVF-LLVM/LLVMUtil.h"
|
|
38
38
|
|
|
39
39
|
namespace SVF
|
|
40
40
|
{
|
|
@@ -232,18 +232,9 @@ protected:
|
|
|
232
232
|
|
|
233
233
|
/// Handle external call
|
|
234
234
|
//@{
|
|
235
|
-
virtual
|
|
236
|
-
virtual void
|
|
237
|
-
virtual
|
|
238
|
-
virtual void extFuncAtomaticOperation(ExtAPI::Operand& atomicOp, const SVFCallInst* svfInst);
|
|
239
|
-
virtual SVFBasicBlock* extFuncInitialization(const SVFCallInst* svfInst, SVFFunction* svfCaller);
|
|
240
|
-
virtual void handleExtCallStat(ExtAPI::ExtFunctionOps &extFunctionOps, const SVFCallInst* svfInst);
|
|
241
|
-
virtual NodeID getExtID(ExtAPI::OperationType operationType, const std::string &s, const SVFCallInst* svfCall);
|
|
242
|
-
virtual void parseAtomaticOp(SVF::ExtAPI::Operand &atomaticOp, const SVFCallInst* svfCall, std::map<std::string, NodeID> &nodeIDMap);
|
|
243
|
-
virtual void parseExtFunctionOps(ExtAPI::ExtFunctionOps &extFunctionOps, const SVFCallInst* svfCall);
|
|
244
|
-
virtual void preProcessExtCall(CallBase* cs);
|
|
245
|
-
virtual void handleExtCall(const SVFInstruction* svfInst, const SVFFunction* svfCallee);
|
|
246
|
-
void addComplexConsForExt(const SVFValue* D, const SVFValue* S, const SVFValue* sz);
|
|
235
|
+
virtual const Type *getBaseTypeAndFlattenedFields(const Value *V, std::vector<AccessPath> &fields, const Value* szValue);
|
|
236
|
+
virtual void addComplexConsForExt(Value *D, Value *S, const Value* sz);
|
|
237
|
+
virtual void handleExtCall(const CallBase* cs, const SVFFunction* svfCallee);
|
|
247
238
|
//@}
|
|
248
239
|
|
|
249
240
|
/// Set current basic block in order to keep track of control flow information
|
|
@@ -287,7 +278,7 @@ protected:
|
|
|
287
278
|
return nullPtr;
|
|
288
279
|
}
|
|
289
280
|
|
|
290
|
-
NodeID getGepValVar(const
|
|
281
|
+
NodeID getGepValVar(const Value* val, const AccessPath& ap, const SVFType* elementType);
|
|
291
282
|
|
|
292
283
|
void setCurrentBBAndValueForPAGEdge(PAGEdge* edge);
|
|
293
284
|
|
|
@@ -29,7 +29,6 @@
|
|
|
29
29
|
|
|
30
30
|
#include <queue>
|
|
31
31
|
#include <algorithm>
|
|
32
|
-
#include "Util/Options.h"
|
|
33
32
|
#include "SVFIR/SVFModule.h"
|
|
34
33
|
#include "Util/SVFUtil.h"
|
|
35
34
|
#include "SVF-LLVM/BasicTypes.h"
|
|
@@ -153,48 +152,27 @@ void LLVMModuleSet::build()
|
|
|
153
152
|
void LLVMModuleSet::createSVFDataStructure()
|
|
154
153
|
{
|
|
155
154
|
getSVFType(IntegerType::getInt8Ty(getContext()));
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
// Functions need to be retrieved in the order of insertion
|
|
156
|
+
std::vector<const Function*> candidateFuncs;
|
|
159
157
|
for (Module& mod : modules)
|
|
160
158
|
{
|
|
161
159
|
std::vector<Function*> removedFuncList;
|
|
162
160
|
/// Function
|
|
163
161
|
for (Function& func : mod.functions())
|
|
164
162
|
{
|
|
165
|
-
if (func
|
|
163
|
+
if (isUsedExtFunction(&func))
|
|
166
164
|
{
|
|
167
|
-
|
|
168
|
-
candidateDecls.insert(&func);
|
|
165
|
+
removedFuncList.push_back(&func);
|
|
169
166
|
}
|
|
170
167
|
else
|
|
171
168
|
{
|
|
172
|
-
|
|
173
|
-
if (mod.getName().str() == Options::ExtAPIInput() && FunDefToDeclsMap[&func].empty() && func.getName().str() != "svf__main")
|
|
174
|
-
{
|
|
175
|
-
/// if this function func defined in ExtAPI but never used in application code (without any corresponding declared functions).
|
|
176
|
-
removedFuncList.push_back(&func);
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
else
|
|
180
|
-
{
|
|
181
|
-
/// if this function is in app bc, any def func should be added.
|
|
182
|
-
/// if this function is in ext bc, only functions which have declarations(should be used by app bc) can be inserted.
|
|
183
|
-
candidateDefs.insert(&func);
|
|
184
|
-
}
|
|
169
|
+
candidateFuncs.push_back(&func);
|
|
185
170
|
}
|
|
186
171
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
mod.getFunctionList().remove(func);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
for (const Function* func: candidateDefs)
|
|
193
|
-
{
|
|
194
|
-
createSVFFunction(func);
|
|
172
|
+
/// Remove unused functions and annotations in extapi.bc
|
|
173
|
+
LLVMUtil::removeUnusedFuncsAndAnnotations(removedFuncList);
|
|
195
174
|
}
|
|
196
|
-
|
|
197
|
-
for (const Function* func: candidateDecls)
|
|
175
|
+
for (const Function* func: candidateFuncs)
|
|
198
176
|
{
|
|
199
177
|
createSVFFunction(func);
|
|
200
178
|
}
|
|
@@ -238,7 +216,7 @@ void LLVMModuleSet::createSVFFunction(const Function* func)
|
|
|
238
216
|
SVFUtil::cast<SVFFunctionType>(
|
|
239
217
|
getSVFType(func->getFunctionType())),
|
|
240
218
|
func->isDeclaration(), LLVMUtil::isIntrinsicFun(func),
|
|
241
|
-
func->hasAddressTaken(), func->isVarArg(), new SVFLoopAndDomInfo);
|
|
219
|
+
func->hasAddressTaken(), func->isVarArg(), new SVFLoopAndDomInfo, LLVMUtil::getFunAnnotations(func));
|
|
242
220
|
svfFunc->setName(func->getName().str());
|
|
243
221
|
svfModule->addFunctionSet(svfFunc);
|
|
244
222
|
addFunctionMap(func, svfFunc);
|
|
@@ -553,8 +531,10 @@ void LLVMModuleSet::loadExtAPIModules()
|
|
|
553
531
|
Err.print("SVFModuleLoader", llvm::errs());
|
|
554
532
|
abort();
|
|
555
533
|
}
|
|
556
|
-
modules.
|
|
557
|
-
|
|
534
|
+
// The module of extapi.bc needs to be inserted before applications modules, like std::vector<std::reference_wrapper<Module>> modules{extapi_module, app_module}.
|
|
535
|
+
// Otherwise, when overwriting the app function with SVF extern function, the corresponding SVFFunction of the extern function will not be found.
|
|
536
|
+
modules.insert(modules.begin(), *mod);
|
|
537
|
+
owned_modules.insert(owned_modules.begin(),std::move(mod));
|
|
558
538
|
}
|
|
559
539
|
}
|
|
560
540
|
|
|
@@ -741,28 +721,111 @@ void LLVMModuleSet::addSVFMain()
|
|
|
741
721
|
}
|
|
742
722
|
}
|
|
743
723
|
|
|
744
|
-
|
|
724
|
+
/*
|
|
725
|
+
For a more detailed explanation of the Function declaration and definition mapping relationships and how External APIs are handled,
|
|
726
|
+
please refer to the SVF Wiki: https://github.com/SVF-tools/SVF/wiki/Handling-External-APIs-with-extapi.c
|
|
727
|
+
|
|
728
|
+
Table 1
|
|
729
|
+
| ------- | ----------------- | --------------- | ----------------- | ----------- |
|
|
730
|
+
| | AppDef | AppDecl | ExtDef | ExtDecl |
|
|
731
|
+
| ------- | ----------------- | --------------- | ----------------- | ----------- |
|
|
732
|
+
| AppDef | X | FunDefToDeclsMap| FunDeclToDefMap | X |
|
|
733
|
+
| ------- | ----------------- | --------------- | ----------------- | ----------- |
|
|
734
|
+
| AppDecl | FunDeclToDefMap | X | FunDeclToDefMap | X |
|
|
735
|
+
| ------- | ----------------- | --------------- | ----------------- | ----------- |
|
|
736
|
+
| ExtDef | FunDefToDeclsMap | FunDefToDeclsMap| X | X |
|
|
737
|
+
| ------- | ----------------- | --------------- | ----------------- | ----------- |
|
|
738
|
+
| ExtDecl | FunDeclToDefMap | X | X | ExtFuncsVec |
|
|
739
|
+
| ------- | ----------------- | --------------- | ----------------- | ----------- |
|
|
740
|
+
|
|
741
|
+
When a user wants to use functions in extapi.c to overwrite the functions defined in the app code, two relationships, "AppDef -> ExtDef" and "ExtDef -> AppDef," are used.
|
|
742
|
+
Use Ext function definition to override the App function definition (Ext function with "__attribute__((annotate("OVERWRITE")))" in extapi.c).
|
|
743
|
+
The app function definition will be changed to an app function declaration.
|
|
744
|
+
Then, put the app function declaration and its corresponding Ext function definition into FunDeclToDefMap/FunDefToDeclsMap.
|
|
745
|
+
------------------------------------------------------
|
|
746
|
+
AppDef -> ExtDef (overwrite):
|
|
747
|
+
For example,
|
|
748
|
+
App function:
|
|
749
|
+
char* foo(char *a, char *b){return a;}
|
|
750
|
+
Ext function:
|
|
751
|
+
__attribute__((annotate("OVERWRITE")))
|
|
752
|
+
char* foo(char *a, char *b){return b;}
|
|
753
|
+
|
|
754
|
+
When SVF handles the foo function in the App module,
|
|
755
|
+
the definition of
|
|
756
|
+
foo: char* foo(char *a, char *b){return a;}
|
|
757
|
+
will be changed to a declaration
|
|
758
|
+
foo: char* foo(char *a, char *b);
|
|
759
|
+
Then,
|
|
760
|
+
foo: char* foo(char *a, char *b);
|
|
761
|
+
and
|
|
762
|
+
__attribute__((annotate("OVERWRITE")))
|
|
763
|
+
char* foo(char *a, char *b){return b;}
|
|
764
|
+
will be put into FunDeclToDefMap
|
|
765
|
+
------------------------------------------------------
|
|
766
|
+
ExtDef -> AppDef (overwrite):
|
|
767
|
+
__attribute__((annotate("OVERWRITE")))
|
|
768
|
+
char* foo(char *a, char *b){return b;}
|
|
769
|
+
and
|
|
770
|
+
foo: char* foo(char *a, char *b);
|
|
771
|
+
are put into FunDefToDeclsMap;
|
|
772
|
+
------------------------------------------------------
|
|
773
|
+
In principle, all functions in extapi.c have bodies (definitions), but some functions (those starting with "sse_")
|
|
774
|
+
have only function declarations without definitions. ExtFuncsVec is used to record function declarations starting with "sse_" that are used.
|
|
775
|
+
|
|
776
|
+
ExtDecl -> ExtDecl:
|
|
777
|
+
For example,
|
|
778
|
+
App function:
|
|
779
|
+
foo(){call memcpy();}
|
|
780
|
+
Ext function:
|
|
781
|
+
declare sse_check_overflow();
|
|
782
|
+
memcpy(){sse_check_overflow();}
|
|
783
|
+
|
|
784
|
+
sse_check_overflow() used in the Ext function but not in the App function.
|
|
785
|
+
sse_check_overflow should be kept in ExtFuncsVec.
|
|
786
|
+
*/
|
|
745
787
|
void LLVMModuleSet::buildFunToFunMap()
|
|
746
788
|
{
|
|
747
|
-
Set<const Function*> funDecls, funDefs;
|
|
789
|
+
Set<const Function*> funDecls, funDefs, extFuncs, overwriteExtFuncs;
|
|
748
790
|
OrderedSet<string> declNames, defNames, intersectNames;
|
|
749
791
|
typedef Map<string, const Function*> NameToFunDefMapTy;
|
|
750
792
|
typedef Map<string, Set<const Function*>> NameToFunDeclsMapTy;
|
|
751
793
|
|
|
752
794
|
for (Module& mod : modules)
|
|
753
795
|
{
|
|
754
|
-
|
|
755
|
-
|
|
796
|
+
// extapi.bc functions
|
|
797
|
+
if (mod.getName().str() == Options::ExtAPIInput())
|
|
756
798
|
{
|
|
757
|
-
|
|
799
|
+
for (const Function& fun : mod.functions())
|
|
758
800
|
{
|
|
759
|
-
|
|
760
|
-
|
|
801
|
+
extFuncs.insert(&fun);
|
|
802
|
+
// Find overwrite functions in extapi.bc
|
|
803
|
+
std::vector<std::string> annotations = LLVMUtil::getFunAnnotations(&fun);
|
|
804
|
+
auto it = std::find_if(annotations.begin(), annotations.end(), [&](const std::string& annotation)
|
|
805
|
+
{
|
|
806
|
+
return annotation.find("OVERWRITE") != std::string::npos;
|
|
807
|
+
});
|
|
808
|
+
if (it != annotations.end())
|
|
809
|
+
{
|
|
810
|
+
overwriteExtFuncs.insert(&fun);
|
|
811
|
+
}
|
|
761
812
|
}
|
|
762
|
-
|
|
813
|
+
}
|
|
814
|
+
else
|
|
815
|
+
{
|
|
816
|
+
/// app functions
|
|
817
|
+
for (const Function& fun : mod.functions())
|
|
763
818
|
{
|
|
764
|
-
|
|
765
|
-
|
|
819
|
+
if (fun.isDeclaration())
|
|
820
|
+
{
|
|
821
|
+
funDecls.insert(&fun);
|
|
822
|
+
declNames.insert(fun.getName().str());
|
|
823
|
+
}
|
|
824
|
+
else
|
|
825
|
+
{
|
|
826
|
+
funDefs.insert(&fun);
|
|
827
|
+
defNames.insert(fun.getName().str());
|
|
828
|
+
}
|
|
766
829
|
}
|
|
767
830
|
}
|
|
768
831
|
}
|
|
@@ -827,6 +890,57 @@ void LLVMModuleSet::buildFunToFunMap()
|
|
|
827
890
|
decls.push_back(decl);
|
|
828
891
|
}
|
|
829
892
|
}
|
|
893
|
+
|
|
894
|
+
/// App Func decl -> SVF extern Func def
|
|
895
|
+
for (const Function* fdecl : funDecls)
|
|
896
|
+
{
|
|
897
|
+
for (const Function* extfun : extFuncs)
|
|
898
|
+
{
|
|
899
|
+
std::string declName = fdecl->getName().str();
|
|
900
|
+
// Since C function names cannot include '.', change the function name from llvm.memcpy.p0i8.p0i8.i64 to llvm_memcpy_p0i8_p0i8_i64."
|
|
901
|
+
std::replace(declName.begin(), declName.end(), '.', '_');
|
|
902
|
+
if (extfun->getName().str().compare(declName) == 0)
|
|
903
|
+
{
|
|
904
|
+
// AppDecl -> ExtDef in Table 1
|
|
905
|
+
FunDeclToDefMap[fdecl] = extfun;
|
|
906
|
+
// ExtDef -> AppDecl in Table 1
|
|
907
|
+
std::vector<const Function*>& decls = FunDefToDeclsMap[extfun];
|
|
908
|
+
decls.push_back(fdecl);
|
|
909
|
+
// Keep all called functions in extfun
|
|
910
|
+
// ExtDecl -> ExtDecl in Table 1
|
|
911
|
+
ExtFuncsVec = LLVMUtil::getCalledFunctions(extfun);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
/// Overwrite
|
|
917
|
+
/// App Func def -> SVF extern Func def
|
|
918
|
+
for (const Function* appfunc : funDefs)
|
|
919
|
+
{
|
|
920
|
+
for (const Function* owfunc : overwriteExtFuncs)
|
|
921
|
+
{
|
|
922
|
+
if (appfunc->getName().str().compare(owfunc->getName().str()) == 0)
|
|
923
|
+
{
|
|
924
|
+
Function* fun = const_cast<Function*>(appfunc);
|
|
925
|
+
Module* mod = fun->getParent();
|
|
926
|
+
FunctionType* funType = fun->getFunctionType();
|
|
927
|
+
std::string funName = fun->getName().str();
|
|
928
|
+
// Replace app function definition with declaration
|
|
929
|
+
Function* declaration = Function::Create(funType, GlobalValue::ExternalLinkage, funName, mod);
|
|
930
|
+
fun->replaceAllUsesWith(declaration);
|
|
931
|
+
fun->eraseFromParent();
|
|
932
|
+
declaration->setName(funName);
|
|
933
|
+
// AppDef -> ExtDef in Table 1, AppDef has been changed to AppDecl
|
|
934
|
+
FunDeclToDefMap[declaration] = owfunc;
|
|
935
|
+
// ExtDef -> AppDef in Table 1
|
|
936
|
+
std::vector<const Function*>& decls = FunDefToDeclsMap[owfunc];
|
|
937
|
+
decls.push_back(declaration);
|
|
938
|
+
// Keep all called functions in owfunc
|
|
939
|
+
// ExtDecl -> ExtDecl in Table 1
|
|
940
|
+
ExtFuncsVec = LLVMUtil::getCalledFunctions(owfunc);
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
}
|
|
830
944
|
}
|
|
831
945
|
|
|
832
946
|
void LLVMModuleSet::buildGlobalDefToRepMap()
|
|
@@ -443,6 +443,127 @@ void LLVMUtil::processArguments(int argc, char **argv, int &arg_num, char **arg_
|
|
|
443
443
|
}
|
|
444
444
|
}
|
|
445
445
|
|
|
446
|
+
std::vector<std::string> LLVMUtil::getFunAnnotations(const Function* fun)
|
|
447
|
+
{
|
|
448
|
+
std::vector<std::string> annotations;
|
|
449
|
+
// Get annotation variable
|
|
450
|
+
GlobalVariable *glob = fun->getParent()->getGlobalVariable("llvm.global.annotations");
|
|
451
|
+
if (glob == nullptr || !glob->hasInitializer())
|
|
452
|
+
return annotations;
|
|
453
|
+
|
|
454
|
+
ConstantArray *ca = SVFUtil::dyn_cast<ConstantArray>(glob->getInitializer());
|
|
455
|
+
if (ca == nullptr)
|
|
456
|
+
return annotations;
|
|
457
|
+
|
|
458
|
+
for (unsigned i = 0; i < ca->getNumOperands(); ++i)
|
|
459
|
+
{
|
|
460
|
+
ConstantStruct *structAn = SVFUtil::dyn_cast<ConstantStruct>(ca->getOperand(i));
|
|
461
|
+
if (structAn == nullptr)
|
|
462
|
+
continue;
|
|
463
|
+
|
|
464
|
+
ConstantExpr *expr = SVFUtil::dyn_cast<ConstantExpr>(structAn->getOperand(0));
|
|
465
|
+
if (expr == nullptr || expr->getOpcode() != Instruction::BitCast || expr->getOperand(0) != fun)
|
|
466
|
+
continue;
|
|
467
|
+
|
|
468
|
+
ConstantExpr *note = SVFUtil::cast<ConstantExpr>(structAn->getOperand(1));
|
|
469
|
+
if (note->getOpcode() != Instruction::GetElementPtr)
|
|
470
|
+
continue;
|
|
471
|
+
|
|
472
|
+
GlobalVariable *annotateStr = SVFUtil::dyn_cast<GlobalVariable>(note->getOperand(0));
|
|
473
|
+
if (annotateStr == nullptr || !annotateStr->hasInitializer())
|
|
474
|
+
continue;
|
|
475
|
+
|
|
476
|
+
ConstantDataSequential *data = SVFUtil::dyn_cast<ConstantDataSequential>(annotateStr->getInitializer());
|
|
477
|
+
if (data->isString())
|
|
478
|
+
{
|
|
479
|
+
std::string annotation = data->getAsString().str();
|
|
480
|
+
if (!annotation.empty())
|
|
481
|
+
annotations.push_back(annotation);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
return annotations;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
void LLVMUtil::removeFunAnnotations(std::vector<Function*>& removedFuncList)
|
|
488
|
+
{
|
|
489
|
+
if (removedFuncList.empty())
|
|
490
|
+
return; // No functions to remove annotations in extapi.bc module
|
|
491
|
+
|
|
492
|
+
Module* module = removedFuncList[0]->getParent();
|
|
493
|
+
GlobalVariable* glob = module->getGlobalVariable("llvm.global.annotations");
|
|
494
|
+
if (glob == nullptr || !glob->hasInitializer())
|
|
495
|
+
return;
|
|
496
|
+
|
|
497
|
+
ConstantArray* ca = SVFUtil::dyn_cast<ConstantArray>(glob->getInitializer());
|
|
498
|
+
if (ca == nullptr)
|
|
499
|
+
return;
|
|
500
|
+
|
|
501
|
+
std::vector<Constant*> newAnnotations;
|
|
502
|
+
for (unsigned i = 0; i < ca->getNumOperands(); ++i)
|
|
503
|
+
{
|
|
504
|
+
ConstantStruct* structAn = SVFUtil::dyn_cast<ConstantStruct>(ca->getOperand(i));
|
|
505
|
+
if (structAn == nullptr)
|
|
506
|
+
continue;
|
|
507
|
+
|
|
508
|
+
ConstantExpr* expr = SVFUtil::dyn_cast<ConstantExpr>(structAn->getOperand(0));
|
|
509
|
+
if (expr == nullptr || expr->getOpcode() != Instruction::BitCast)
|
|
510
|
+
{
|
|
511
|
+
// Keep the annotation if it's not created using BitCast
|
|
512
|
+
newAnnotations.push_back(structAn);
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
Function* annotatedFunc = SVFUtil::dyn_cast<Function>(expr->getOperand(0));
|
|
517
|
+
if (annotatedFunc == nullptr || std::find(removedFuncList.begin(), removedFuncList.end(), annotatedFunc) != removedFuncList.end())
|
|
518
|
+
continue;
|
|
519
|
+
|
|
520
|
+
// Keep the annotation for all other functions
|
|
521
|
+
newAnnotations.push_back(structAn);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
if (newAnnotations.size() == ca->getNumOperands())
|
|
525
|
+
return; // No annotations to remove
|
|
526
|
+
|
|
527
|
+
ArrayType* annotationsType = ArrayType::get(ca->getType()->getElementType(), newAnnotations.size());
|
|
528
|
+
Constant* newCA = ConstantArray::get(annotationsType, newAnnotations);
|
|
529
|
+
|
|
530
|
+
// Check if a global variable with the name llvm.global.annotations already exists
|
|
531
|
+
GlobalVariable* existingGlobal = module->getGlobalVariable("llvm.global.annotations");
|
|
532
|
+
if (existingGlobal)
|
|
533
|
+
// Rename the existing llvm.global.annotations to llvm.global.annotations_old
|
|
534
|
+
existingGlobal->setName("llvm.global.annotations_old");
|
|
535
|
+
|
|
536
|
+
// Create a new global variable with the updated annotations
|
|
537
|
+
GlobalVariable* newGlobal = new GlobalVariable(*module, newCA->getType(), glob->isConstant(),
|
|
538
|
+
glob->getLinkage(), newCA, "llvm.global.annotations", glob, glob->getThreadLocalMode());
|
|
539
|
+
|
|
540
|
+
// Copy other properties from the old global variable to the new one
|
|
541
|
+
newGlobal->setSection(glob->getSection());
|
|
542
|
+
newGlobal->setAlignment(llvm::MaybeAlign(glob->getAlignment()));
|
|
543
|
+
|
|
544
|
+
// Remove the old global variable
|
|
545
|
+
glob->eraseFromParent();
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/// Get all called funcions in a parent function
|
|
549
|
+
std::vector<const Function *> LLVMUtil::getCalledFunctions(const Function *F)
|
|
550
|
+
{
|
|
551
|
+
std::vector<const Function *> calledFunctions;
|
|
552
|
+
for (const Instruction &I : instructions(F))
|
|
553
|
+
{
|
|
554
|
+
if (const CallBase *callInst = SVFUtil::dyn_cast<CallBase>(&I))
|
|
555
|
+
{
|
|
556
|
+
Function *calledFunction = callInst->getCalledFunction();
|
|
557
|
+
if (calledFunction)
|
|
558
|
+
{
|
|
559
|
+
calledFunctions.push_back(calledFunction);
|
|
560
|
+
std::vector<const Function *> nestedCalledFunctions = getCalledFunctions(calledFunction);
|
|
561
|
+
calledFunctions.insert(calledFunctions.end(), nestedCalledFunctions.begin(), nestedCalledFunctions.end());
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
return calledFunctions;
|
|
566
|
+
}
|
|
446
567
|
|
|
447
568
|
u32_t LLVMUtil::getTypeSizeInBytes(const Type* type)
|
|
448
569
|
{
|
|
@@ -470,7 +470,7 @@ NodeID SVFIRBuilder::getGlobalVarField(const GlobalVariable *gvar, u32_t offset,
|
|
|
470
470
|
/// then we need to create a gep node for this field
|
|
471
471
|
else
|
|
472
472
|
{
|
|
473
|
-
return getGepValVar(
|
|
473
|
+
return getGepValVar(gvar, AccessPath(offset), tpy);
|
|
474
474
|
}
|
|
475
475
|
}
|
|
476
476
|
|
|
@@ -847,9 +847,7 @@ void SVFIRBuilder::visitCallSite(CallBase* cs)
|
|
|
847
847
|
const SVFFunction* svfcallee = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);
|
|
848
848
|
if (isExtCall(svfcallee))
|
|
849
849
|
{
|
|
850
|
-
|
|
851
|
-
preProcessExtCall(cs);
|
|
852
|
-
handleExtCall(svfcall, svfcallee);
|
|
850
|
+
handleExtCall(cs, svfcallee);
|
|
853
851
|
}
|
|
854
852
|
else
|
|
855
853
|
{
|
|
@@ -1115,73 +1113,6 @@ const Value* SVFIRBuilder::getBaseValueForExtArg(const Value* V)
|
|
|
1115
1113
|
return value;
|
|
1116
1114
|
}
|
|
1117
1115
|
|
|
1118
|
-
void SVFIRBuilder::preProcessExtCall(CallBase* cs)
|
|
1119
|
-
{
|
|
1120
|
-
const SVFInstruction* svfinst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(cs);
|
|
1121
|
-
const SVFCallInst* svfcall = SVFUtil::cast<SVFCallInst>(svfinst);
|
|
1122
|
-
/// Currently focusing on providing specialized treatment for the extern function void *dlsym(void *handle, const char *funname)
|
|
1123
|
-
/// and generalization will be done later.
|
|
1124
|
-
if (svfcall->getCalledFunction()->getName() == "dlsym")
|
|
1125
|
-
{
|
|
1126
|
-
const Value* src = cs->getArgOperand(1);
|
|
1127
|
-
if(const GetElementPtrInst* gep = SVFUtil::dyn_cast<GetElementPtrInst>(src))
|
|
1128
|
-
src = stripConstantCasts(gep->getPointerOperand());
|
|
1129
|
-
|
|
1130
|
-
auto getHookFn = [](const Value* src)->const Function*
|
|
1131
|
-
{
|
|
1132
|
-
if (!SVFUtil::isa<GlobalVariable>(src))
|
|
1133
|
-
return nullptr;
|
|
1134
|
-
|
|
1135
|
-
auto *glob = SVFUtil::cast<GlobalVariable>(src);
|
|
1136
|
-
if (!glob->hasInitializer() || !SVFUtil::isa<ConstantDataArray>(glob->getInitializer()))
|
|
1137
|
-
return nullptr;
|
|
1138
|
-
|
|
1139
|
-
auto *constarray = SVFUtil::cast<ConstantDataArray>(glob->getInitializer());
|
|
1140
|
-
return LLVMUtil::getProgFunction(constarray->getAsCString().str());
|
|
1141
|
-
};
|
|
1142
|
-
|
|
1143
|
-
if (const Function *fn = getHookFn(src))
|
|
1144
|
-
{
|
|
1145
|
-
NodeID srcNode = getValueNode(fn);
|
|
1146
|
-
addCopyEdge(srcNode, getValueNode(cs));
|
|
1147
|
-
}
|
|
1148
|
-
return;
|
|
1149
|
-
}
|
|
1150
|
-
/// Preprocess the arguments of functions such as memset() and memcpy() that involve arrays or structures,
|
|
1151
|
-
/// and identify the original data types of these arguments, flattening each subfield.
|
|
1152
|
-
if (isMemSetOrCpyExtFun(svfcall->getCalledFunction()))
|
|
1153
|
-
{
|
|
1154
|
-
for (u32_t i = 0; i < cs->arg_size(); i++)
|
|
1155
|
-
{
|
|
1156
|
-
const Type* T = getBaseValueForExtArg(cs->getArgOperand(i))->getType();
|
|
1157
|
-
while (const PointerType *ptype = SVFUtil::dyn_cast<PointerType>(T))
|
|
1158
|
-
T = getPtrElementType(ptype);
|
|
1159
|
-
const SVFType *st = LLVMModuleSet::getLLVMModuleSet()->getSVFType(T);
|
|
1160
|
-
std::vector<AccessPath> fields;
|
|
1161
|
-
u32_t numOfElems = pag->getSymbolInfo()->getNumOfFlattenElements(st);
|
|
1162
|
-
LLVMContext& context = LLVMModuleSet::getLLVMModuleSet()->getContext();
|
|
1163
|
-
for(u32_t ei = 0; ei < numOfElems; ei++)
|
|
1164
|
-
{
|
|
1165
|
-
AccessPath ap(ei);
|
|
1166
|
-
// make a ConstantInt and create char for the content type due to byte-wise copy
|
|
1167
|
-
const ConstantInt* offset = ConstantInt::get(context, llvm::APInt(32, ei));
|
|
1168
|
-
const SVFValue* svfOffset = LLVMModuleSet::getLLVMModuleSet()->getSVFValue(offset);
|
|
1169
|
-
if (!pag->getSymbolInfo()->hasValSym(svfOffset))
|
|
1170
|
-
{
|
|
1171
|
-
SymbolTableBuilder builder(pag->getSymbolInfo());
|
|
1172
|
-
builder.collectSym(offset);
|
|
1173
|
-
pag->addValNode(svfOffset, pag->getSymbolInfo()->getValSym(svfOffset));
|
|
1174
|
-
}
|
|
1175
|
-
ap.addOffsetVarAndGepTypePair(getPAG()->getGNode(getPAG()->getValueNode(svfOffset)), nullptr);
|
|
1176
|
-
fields.push_back(ap);
|
|
1177
|
-
}
|
|
1178
|
-
NodeID argId = pag->getValueNode(svfcall->getArgOperand(i));
|
|
1179
|
-
std::pair<const SVFType*, std::vector<AccessPath>> pairToInsert = std::make_pair(st, fields);
|
|
1180
|
-
pag->addToTypeLocSetsMap(argId, pairToInsert);
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
|
|
1185
1116
|
/*!
|
|
1186
1117
|
* Indirect call is resolved on-the-fly during pointer analysis
|
|
1187
1118
|
*/
|
|
@@ -1211,9 +1142,8 @@ void SVFIRBuilder::updateCallGraph(PTACallGraph* callgraph)
|
|
|
1211
1142
|
if (isExtCall(*func_iter))
|
|
1212
1143
|
{
|
|
1213
1144
|
setCurrentLocation(callee, callee->empty() ? nullptr : &callee->getEntryBlock());
|
|
1214
|
-
SVFInstruction* svfinst = LLVMModuleSet::getLLVMModuleSet()->getSVFInstruction(callbase);
|
|
1215
1145
|
const SVFFunction* svfcallee = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);
|
|
1216
|
-
handleExtCall(
|
|
1146
|
+
handleExtCall(callbase, svfcallee);
|
|
1217
1147
|
}
|
|
1218
1148
|
else
|
|
1219
1149
|
{
|
|
@@ -1257,9 +1187,9 @@ void SVFIRBuilder::sanityCheck()
|
|
|
1257
1187
|
* Add a temp field value node according to base value and offset
|
|
1258
1188
|
* this node is after the initial node method, it is out of scope of symInfo table
|
|
1259
1189
|
*/
|
|
1260
|
-
NodeID SVFIRBuilder::getGepValVar(const
|
|
1190
|
+
NodeID SVFIRBuilder::getGepValVar(const Value* val, const AccessPath& ap, const SVFType* elementType)
|
|
1261
1191
|
{
|
|
1262
|
-
NodeID base = pag->getBaseValVar(
|
|
1192
|
+
NodeID base = pag->getBaseValVar(getValueNode(val));
|
|
1263
1193
|
NodeID gepval = pag->getGepValVar(curVal, base, ap);
|
|
1264
1194
|
if (gepval==UINT_MAX)
|
|
1265
1195
|
{
|
|
@@ -1279,7 +1209,8 @@ NodeID SVFIRBuilder::getGepValVar(const SVFValue* val, const AccessPath& ap, con
|
|
|
1279
1209
|
const SVFValue* cval = getCurrentValue();
|
|
1280
1210
|
const SVFBasicBlock* cbb = getCurrentBB();
|
|
1281
1211
|
setCurrentLocation(curVal, nullptr);
|
|
1282
|
-
|
|
1212
|
+
LLVMModuleSet* llvmmodule = LLVMModuleSet::getLLVMModuleSet();
|
|
1213
|
+
NodeID gepNode= pag->addGepValNode(curVal, llvmmodule->getSVFValue(val),ap, NodeIDAllocator::get()->allocateValueId(),elementType->getPointerTo());
|
|
1283
1214
|
addGepEdge(base, gepNode, ap, true);
|
|
1284
1215
|
setCurrentLocation(cval, cbb);
|
|
1285
1216
|
return gepNode;
|