|
Static Value-Flow Analysis
|
#include <MTASlicer.h>
Public Member Functions | |
| MultiStageSlicer (SVFIR *svfIr, AndersenBase *pta, MHP *mhp, LockAnalysis *lockAnalysis, SVFG *vfg=nullptr) | |
| OrderedSet< const ICFGNode * > | runILASlicing (const OrderedSet< const SVFStmt * > &vulnerableStatements, const OrderedSet< const ICFGNode * > &threadVFSources={}) |
| OrderedSet< const ICFGNode * > | runPTASlicing (const OrderedSet< const SVFStmt * > &vulnerableStatements) |
| const OrderedSet< const VFGNode * > & | getRetainedSVFGNodes (const OrderedSet< const SVFStmt * > &vulnerableStatements) |
Public Member Functions inherited from SVF::MTASlicerBase | |
| MTASlicerBase (SVFIR *svfIr, AndersenBase *pta, MHP *mhp, LockAnalysis *lockAnalysis, SVFG *vfg=nullptr) | |
| virtual | ~MTASlicerBase () |
Private Attributes | |
| OrderedSet< const VFGNode * > | retainedSVFGNodes |
| memoised data-dependence slice | |
| bool | retainedComputed = false |
MultiStageSlicer - the multi-stage (differential) slicer of MSli: one class, two stages sharing one memoised data-dependence closure over VFG_pre. Stage 1 (ILA): runILASlicing – synchronization/dual 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 207 of file MTASlicer.h.
| SVF::MultiStageSlicer::MultiStageSlicer | ( | SVFIR * | svfIr, |
| AndersenBase * | pta, | ||
| MHP * | mhp, | ||
| LockAnalysis * | lockAnalysis, | ||
| SVFG * | vfg = nullptr |
||
| ) |
Definition at line 942 of file MTASlicer.cpp.
| const OrderedSet< const SVFGNode * > & SVF::MultiStageSlicer::getRetainedSVFGNodes | ( | const OrderedSet< const SVFStmt * > & | vulnerableStatements | ) |
The FSPTA data-dependence slice at SVFG-node granularity (memoised). The ILA stage queries this first, to restrict the [THREAD-VF] sources to ThreadVF(VFG'_pre); runPTASlicing reuses the same set, so the backward closure over VFG_pre is computed once and shared across both stages.
Definition at line 1010 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 (dual slicing + 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 949 of file MTASlicer.cpp.
| OrderedSet< const ICFGNode * > SVF::MultiStageSlicer::runPTASlicing | ( | const OrderedSet< const SVFStmt * > & | vulnerableStatements | ) |
Stage 2: the FSPTA slice (backward data dependence over the thread-aware VFG_pre; node set only, no function expansion).
Definition at line 1022 of file MTASlicer.cpp.
Definition at line 245 of file MTASlicer.h.
|
private |
memoised data-dependence slice
Definition at line 244 of file MTASlicer.h.