|
Static Value-Flow Analysis
|
#include <LockAnalysis.h>
Public Types | |
| enum | ValDomain { Empty , TDLocked , TDUnlocked } |
| semilattice Empty==>TDUnlocked==>TDLocked More... | |
| typedef CxtStmt | CxtLock |
| typedef CxtProc | CxtLockProc |
| typedef NodeBS | LockSet |
| typedef TCT::InstVec | InstVec |
| typedef Set< const ICFGNode * > | InstSet |
| typedef InstSet | CISpan |
| typedef Map< const ICFGNode *, CISpan > | CILockToSpan |
| typedef Set< const FunObjVar * > | FunSet |
| typedef Map< const ICFGNode *, InstSet > | InstToInstSetMap |
| typedef Map< CxtStmt, ValDomain > | CxtStmtToLockFlagMap |
| typedef FIFOWorkList< CxtStmt > | CxtStmtWorkList |
| typedef Set< CxtStmt > | LockSpan |
| typedef Set< CxtStmt > | CxtStmtSet |
| typedef Set< CxtLock > | CxtLockSet |
| typedef Map< CxtLock, LockSpan > | CxtLockToSpan |
| typedef Map< CxtLock, NodeBS > | CxtLockToLockSet |
| typedef Map< const ICFGNode *, NodeBS > | LockSiteToLockSet |
| typedef Map< const ICFGNode *, CxtStmtSet > | InstToCxtStmtSet |
| typedef Map< CxtStmt, CxtLockSet > | CxtStmtToCxtLockSet |
| typedef FIFOWorkList< CxtLockProc > | CxtLockProcVec |
| typedef Set< CxtLockProc > | CxtLockProcSet |
Public Attributes | |
| double | lockTime |
| u32_t | numOfTotalQueries |
| u32_t | numOfLockedQueries |
| double | lockQueriesTime |
Protected Attributes | |
| TCT * | tct |
| TCT. | |
| CxtStmtWorkList | cxtStmtList |
| context-sensitive statement worklist | |
| InstToCxtStmtSet | instToCxtStmtSet |
| Map a statement to all its context-sensitive statements. | |
| CxtLockSet | cxtLockset |
| Context-sensitive locks. | |
| CxtLockToSpan | cxtLocktoSpan |
| CxtStmtToCxtLockSet | cxtStmtToCxtLockSet |
| CxtLockProcVec | clpList |
| Following data structures are used for collecting context-sensitive locks. | |
| CxtLockProcSet | visitedCTPs |
| CxtLockProc List. | |
| InstSet | locksites |
| Record all visited clps. | |
| InstSet | unlocksites |
| FunSet | lockcandidateFuncSet |
| Candidate functions which relevant to locks/unlocks. | |
| CILockToSpan | ciLocktoSpan |
| Used for context-insensitive intra-procedural locks. | |
| InstToInstSetMap | instCILocksMap |
| InstToInstSetMap | instTocondCILocksMap |
Lock analysis
Definition at line 55 of file LockAnalysis.h.
Definition at line 74 of file LockAnalysis.h.
Definition at line 73 of file LockAnalysis.h.
Definition at line 67 of file LockAnalysis.h.
Definition at line 68 of file LockAnalysis.h.
Definition at line 89 of file LockAnalysis.h.
Definition at line 88 of file LockAnalysis.h.
Definition at line 81 of file LockAnalysis.h.
Definition at line 84 of file LockAnalysis.h.
Definition at line 83 of file LockAnalysis.h.
Definition at line 80 of file LockAnalysis.h.
Definition at line 87 of file LockAnalysis.h.
Definition at line 77 of file LockAnalysis.h.
Definition at line 78 of file LockAnalysis.h.
Definition at line 75 of file LockAnalysis.h.
Definition at line 72 of file LockAnalysis.h.
Definition at line 86 of file LockAnalysis.h.
Definition at line 76 of file LockAnalysis.h.
Definition at line 71 of file LockAnalysis.h.
Definition at line 70 of file LockAnalysis.h.
Definition at line 85 of file LockAnalysis.h.
Definition at line 79 of file LockAnalysis.h.
semilattice Empty==>TDUnlocked==>TDLocked
| Enumerator | |
|---|---|
| Empty | |
| TDLocked | |
| TDUnlocked | |
Definition at line 60 of file LockAnalysis.h.
|
inline |
Definition at line 91 of file LockAnalysis.h.
|
default |
|
inline |
Add intra-procedural lock.
Definition at line 134 of file LockAnalysis.h.
|
inline |
Context-sensitive locks.
Add inter-procedural context-sensitive lock
Definition at line 173 of file LockAnalysis.h.
Add context-sensitive statement.
Definition at line 254 of file LockAnalysis.h.
Add intra-procedural lock.
Definition at line 124 of file LockAnalysis.h.
|
inline |
Return true if two locksets has at least one alias lock.
Definition at line 201 of file LockAnalysis.h.
| template void LockAnalysis::analyze< const SlicedICFGView *, const SlicedThreadCallGraphView * > | ( | ICFGGraph | icfg, |
| CGGraph | cg | ||
| ) |
context-sensitive forward traversal from each lock site. Generate following results (1) context-sensitive lock site, (2) maps a context-sensitive lock site to its corresponding lock span. One implementation for the whole program and a slice: GraphT is SVFIR* (whole) or const SlicedSVFIRView* (sliced). Per-graph queries resolve at compile time via the graph* overloads in Graphs/SlicedGraphs.h.
Definition at line 52 of file LockAnalysis.cpp.
Analyze intraprocedural locks A lock is intraprocedural if its lock span is within a procedural
FIXME:Should we intersect forwardInsts and backwardInsts?
Definition at line 160 of file LockAnalysis.cpp.
Definition at line 364 of file LockAnalysis.cpp.
| void LockAnalysis::buildCandidateFuncSetforLock | ( | ) |
Collect candidate functions for context-sensitive lock analysis
Definition at line 111 of file LockAnalysis.cpp.
|
inlineprotected |
Clear flags.
Definition at line 406 of file LockAnalysis.h.
Definition at line 283 of file LockAnalysis.cpp.
Collect lock/unlock sites
Definition at line 81 of file LockAnalysis.cpp.
|
inline |
Definition at line 271 of file LockAnalysis.h.
|
inline |
Definition at line 247 of file LockAnalysis.h.
|
inline |
Definition at line 241 of file LockAnalysis.h.
|
inline |
Definition at line 230 of file LockAnalysis.h.
Definition at line 162 of file LockAnalysis.h.
Get lock value.
Definition at line 489 of file LockAnalysis.h.
|
inline |
Definition at line 335 of file LockAnalysis.h.
Definition at line 284 of file LockAnalysis.h.
|
inlineprotected |
Definition at line 494 of file LockAnalysis.h.
|
inline |
Handle call.
Definition at line 470 of file LockAnalysis.cpp.
|
protected |
Handle call relations.
Handling call relations when collecting context-sensitive locks
Definition at line 333 of file LockAnalysis.cpp.
Handle fork.
Definition at line 446 of file LockAnalysis.cpp.
Handle intra.
Definition at line 594 of file LockAnalysis.cpp.
Handle return.
Definition at line 513 of file LockAnalysis.cpp.
Definition at line 307 of file LockAnalysis.h.
Get context-sensitive lock.
Definition at line 181 of file LockAnalysis.h.
Definition at line 236 of file LockAnalysis.h.
Context-sensitive statement and lock spans.
Get LockSet and LockSpan
Definition at line 225 of file LockAnalysis.h.
Whether a statement has an (unconditional) intra-procedural lock set, i.e. getIntraLockSet is valid for it. A statement can be locked (isInsideIntraLock) via a conditional intra lock or a context lock without being here.
Definition at line 157 of file LockAnalysis.h.
Check if one instruction's context stmt is in a lock span.
Definition at line 292 of file LockAnalysis.h.
Definition at line 280 of file LockAnalysis.h.
|
inlineprotected |
Definition at line 390 of file LockAnalysis.h.
|
inline |
Return true if the intersection of two locksets is not empty.
Definition at line 187 of file LockAnalysis.h.
| bool LockAnalysis::intraBackwardTraverse | ( | ICFGGraph | icfg, |
| CGGraph | cg, | ||
| const InstSet & | unlockSet, | ||
| InstSet & | backwardInsts | ||
| ) |
Intra-procedural backward traversal
Definition at line 236 of file LockAnalysis.cpp.
| bool LockAnalysis::intraForwardTraverse | ( | ICFGGraph | icfg, |
| CGGraph | cg, | ||
| const ICFGNode * | lockSite, | ||
| InstSet & | unlockSet, | ||
| InstSet & | forwardInsts | ||
| ) |
Intra-procedural forward traversal
Definition at line 189 of file LockAnalysis.cpp.
Return true it a lock matches an unlock.
Definition at line 364 of file LockAnalysis.h.
todo: must alias
Definition at line 357 of file LockAnalysis.cpp.
Whether it is a callsite.
Definition at line 479 of file LockAnalysis.h.
|
protected |
If lhs is a suffix of rhs, including equal.
Definition at line 641 of file LockAnalysis.cpp.
Whether it is calling an external function.
Definition at line 484 of file LockAnalysis.h.
Return true if two instructions are inside same context-insensitive lock span
Definition at line 754 of file LockAnalysis.cpp.
Return true if two context-sensitive instructions are inside same context-insensitive lock spa
Definition at line 775 of file LockAnalysis.cpp.
Return true if two instructions are inside at least one common context-sensitive lock span
Definition at line 786 of file LockAnalysis.cpp.
Return true if two instructions are inside at least one common lock span
Definition at line 736 of file LockAnalysis.cpp.
Return true if a statement is inside a partial lock/unlock pair (conditional lock with unconditional unlock)
Definition at line 149 of file LockAnalysis.h.
Return true if a statement is inside an intra-procedural lock.
Definition at line 143 of file LockAnalysis.h.
Intraprocedural locks.
Return true if the lock is an intra-procedural lock
Definition at line 117 of file LockAnalysis.h.
Return true if it is a candidate function.
Definition at line 217 of file LockAnalysis.h.
| bool LockAnalysis::isProtectedByCommonCxtLock | ( | const CxtStmt & | cxtStmt1, |
| const CxtStmt & | cxtStmt2 | ||
| ) |
Protected by at least one common context-sensitive lock
Definition at line 689 of file LockAnalysis.cpp.
Protected by at least one common context-sensitive lock under each context
Definition at line 701 of file LockAnalysis.cpp.
Check if two Instructions are protected by common locks echo inst may have multiple cxt stmt we check whether every cxt stmt of instructions is protected by a common lock.
Protected by at least one common lock under every context
Definition at line 650 of file LockAnalysis.cpp.
Whether it is a lock site.
Definition at line 465 of file LockAnalysis.h.
Whether it is a lock site.
Definition at line 458 of file LockAnalysis.h.
Whether it is a unlock site.
Definition at line 472 of file LockAnalysis.h.
|
inlineprotected |
Definition at line 428 of file LockAnalysis.h.
|
inlineprotected |
Mark thread flags for cxtStmt.
Transfer function for marking context-sensitive statement
Definition at line 373 of file LockAnalysis.h.
|
protected |
Match context.
partial match
Definition at line 617 of file LockAnalysis.cpp.
|
inlineprotected |
Definition at line 423 of file LockAnalysis.h.
|
inlineprotected |
Definition at line 440 of file LockAnalysis.h.
Print locks and spans.
Print context-insensitive and context-sensitive locks
Definition at line 432 of file LockAnalysis.cpp.
|
protected |
Context helper functions.
Push calling context
Definition at line 612 of file LockAnalysis.cpp.
|
inlineprotected |
WorkList helper functions.
Definition at line 414 of file LockAnalysis.h.
Worklist operations.
Definition at line 436 of file LockAnalysis.h.
Add context-sensitive statement.
Definition at line 260 of file LockAnalysis.h.
|
inline |
Touch this context statement.
Definition at line 276 of file LockAnalysis.h.
|
protected |
Used for context-insensitive intra-procedural locks.
Definition at line 537 of file LockAnalysis.h.
|
protected |
Following data structures are used for collecting context-sensitive locks.
Definition at line 520 of file LockAnalysis.h.
|
protected |
Context-sensitive locks.
Definition at line 509 of file LockAnalysis.h.
|
protected |
Map a context-sensitive lock to its lock span statements Map a context-sensitive statement to its context-sensitive lock
Definition at line 514 of file LockAnalysis.h.
|
protected |
context-sensitive statement worklist
Definition at line 503 of file LockAnalysis.h.
|
protected |
Definition at line 515 of file LockAnalysis.h.
|
protected |
Definition at line 538 of file LockAnalysis.h.
|
protected |
Definition at line 539 of file LockAnalysis.h.
|
protected |
Map a statement to all its context-sensitive statements.
Definition at line 506 of file LockAnalysis.h.
|
protected |
Candidate functions which relevant to locks/unlocks.
Definition at line 532 of file LockAnalysis.h.
| double SVF::LockAnalysis::lockQueriesTime |
Definition at line 546 of file LockAnalysis.h.
|
protected |
Record all visited clps.
Collecting lock/unlock sites
Definition at line 526 of file LockAnalysis.h.
| double SVF::LockAnalysis::lockTime |
Definition at line 543 of file LockAnalysis.h.
| u32_t SVF::LockAnalysis::numOfLockedQueries |
Definition at line 545 of file LockAnalysis.h.
| u32_t SVF::LockAnalysis::numOfTotalQueries |
Definition at line 544 of file LockAnalysis.h.
|
protected |
TCT.
Definition at line 500 of file LockAnalysis.h.
|
protected |
Definition at line 527 of file LockAnalysis.h.
|
protected |
CxtLockProc List.
Definition at line 521 of file LockAnalysis.h.