|
Static Value-Flow Analysis
|
#include <MTASlicer.h>
Public Member Functions | |
| MultiStageSlicer (SVFIR *svfir, AndersenBase *pta, MHP *mhp, LockAnalysis *lockAnalysis, SVFG *svfg=nullptr) | |
| OrderedSet< const ICFGNode * > | runILASlicing (const OrderedSet< const SVFStmt * > &vulnerableStatements, const OrderedSet< const ICFGNode * > &threadVFSources={}) |
| ValueFlowSlice | runPTASlicing (const OrderedSet< const SVFStmt * > &vulnerableStatements, SVFG *refinedMainVFG) |
| void | computePreCandidateSlice (const OrderedSet< const SVFStmt * > &vulnerableStatements) |
| const ValueFlowSlice & | getPreCandidateSlice () const |
| Return the pre-candidate slice after computePreCandidateSlice(). | |
| Public Member Functions inherited from SVF::MTASlicerBase | |
| MTASlicerBase (SVFIR *svfir, AndersenBase *pta, MHP *mhp, LockAnalysis *lockAnalysis, SVFG *svfg=nullptr) | |
Private Attributes | |
| ValueFlowSlice | preCandidateSlice |
| bool | preCandidateComputed = false |
Additional Inherited Members | |
| Protected Member Functions inherited from SVF::MTASlicerBase | |
| OrderedSet< const VFGNode * > | computeDataDependenceSVFGNodes (const OrderedSet< const SVFStmt * > &seeds, SVFG *svfg) |
| OrderedSet< const ICFGNode * > | svfgNodesToICFGNodes (const OrderedSet< const VFGNode * > &nodes, const OrderedSet< const SVFStmt * > &seeds) |
| Project the retained VFG nodes (plus the seeds) onto their ICFG nodes. | |
| OrderedSet< const CallICFGNode * > | getDependentThreadCreate (const ICFGNode *node) |
| OrderedSet< const TCTNode * > | getTCTNodeSetFromNode (const ICFGNode *node) |
| OrderedSet< const ICFGNode * > | getLockSet (const ICFGNode *node) |
| OrderedSet< const CallICFGNode * > | collectPthreadStatements (const OrderedSet< const ICFGNode * > &sourceNodes) |
| OrderedSet< const CallICFGNode * > | collectMutexStatements (const OrderedSet< const ICFGNode * > &sourceNodes) |
| std::pair< OrderedSet< const CallICFGNode * >, OrderedSet< const CallICFGNode * > > | collectCommonThreadStatements (const OrderedSet< const ICFGNode * > &sourceNodes) |
| void | addSynchronizationDependencies (const OrderedSet< const CallICFGNode * > &pthreadCallNodes, const OrderedSet< const CallICFGNode * > &mutexCallNodes, OrderedSet< const ICFGNode * > &retainedNodes) |
| OrderedSet< const ICFGNode * > | expandCallDependence (const OrderedSet< const ICFGNode * > &nodes) |
| Static Protected Member Functions inherited from SVF::MTASlicerBase | |
| static void | enqueueSVFGNode (const SVFGNode *node, OrderedSet< const SVFGNode * > &visited, std::deque< const SVFGNode * > &worklist) |
| Protected Attributes inherited from SVF::MTASlicerBase | |
| SVFIR * | svfir |
| AndersenBase * | pta |
| MHP * | mhp |
| LockAnalysis * | lockAnalysis |
| CallGraph * | callGraph |
| SVFG * | svfg |
| thread-aware VFG_pre (PTA/Single slicers; null for MTA) | |
MultiStageSlicer - the multi-stage (differential) slicer of MSli. The pre-candidate closure scopes ILA queries and the Main-TVF overlay; the final closure is recomputed over that refined main graph. Stage 1 (ILA): runILASlicing – synchronization slicing + function expansion, feeding the sliced MHP/lock. Stage 2 (FSPTA): runPTASlicing – backward data-dependence slice feeding the sliced flow-sensitive solve. Contrast: SingleSlicer below folds everything into ONE unified slice.
Definition at line 201 of file MTASlicer.h.
| SVF::MultiStageSlicer::MultiStageSlicer | ( | SVFIR * | svfir, |
| AndersenBase * | pta, | ||
| MHP * | mhp, | ||
| LockAnalysis * | lockAnalysis, | ||
| SVFG * | svfg = nullptr ) |
Definition at line 793 of file MTASlicer.cpp.
| void SVF::MultiStageSlicer::computePreCandidateSlice | ( | const OrderedSet< const SVFStmt * > & | vulnerableStatements | ) |
Compute the pre-candidate slice used to restrict [THREAD-VF] sources and scope construction of the refined main overlay.
Definition at line 858 of file MTASlicer.cpp.
| const ValueFlowSlice & SVF::MultiStageSlicer::getPreCandidateSlice | ( | ) | const |
Return the pre-candidate slice after computePreCandidateSlice().
Definition at line 869 of file MTASlicer.cpp.
| OrderedSet< const ICFGNode * > SVF::MultiStageSlicer::runILASlicing | ( | const OrderedSet< const SVFStmt * > & | vulnerableStatements, |
| const OrderedSet< const ICFGNode * > & | threadVFSources = {} ) |
Stage 1: the ILA slice (synchronization + function expansion for the IRView).
| vulnerableStatements | Set of vulnerable statements to start slicing from (the [INIT] rule: pre-analysis race statements). |
| threadVFSources | Extra ILA slicing sources from the [THREAD-VF] rule (MSli 4.2): statements whose MHP/lock-span results are queried during the main-phase thread-aware value-flow construction (endpoints and in-span non-interference witnesses collected while building VFG_pre). |
Definition at line 800 of file MTASlicer.cpp.
| ValueFlowSlice SVF::MultiStageSlicer::runPTASlicing | ( | const OrderedSet< const SVFStmt * > & | vulnerableStatements, |
| SVFG * | refinedMainVFG ) |
Stage 2: the FSPTA slice (backward data dependence over the refined main value-flow graph; node set only, no function expansion).
Definition at line 876 of file MTASlicer.cpp.
|
private |
Definition at line 239 of file MTASlicer.h.
|
private |
Definition at line 238 of file MTASlicer.h.