|
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 |
Private 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 44 of file LockAnalysis.h.
Definition at line 63 of file LockAnalysis.h.
Definition at line 62 of file LockAnalysis.h.
Definition at line 56 of file LockAnalysis.h.
Definition at line 57 of file LockAnalysis.h.
Definition at line 78 of file LockAnalysis.h.
Definition at line 77 of file LockAnalysis.h.
Definition at line 70 of file LockAnalysis.h.
Definition at line 73 of file LockAnalysis.h.
Definition at line 72 of file LockAnalysis.h.
Definition at line 69 of file LockAnalysis.h.
Definition at line 76 of file LockAnalysis.h.
Definition at line 66 of file LockAnalysis.h.
Definition at line 67 of file LockAnalysis.h.
Definition at line 64 of file LockAnalysis.h.
Definition at line 61 of file LockAnalysis.h.
Definition at line 75 of file LockAnalysis.h.
Definition at line 65 of file LockAnalysis.h.
Definition at line 60 of file LockAnalysis.h.
Definition at line 59 of file LockAnalysis.h.
Definition at line 74 of file LockAnalysis.h.
Definition at line 68 of file LockAnalysis.h.
semilattice Empty==>TDUnlocked==>TDLocked
| Enumerator | |
|---|---|
| Empty | |
| TDLocked | |
| TDUnlocked | |
Definition at line 49 of file LockAnalysis.h.
|
inline |
Definition at line 80 of file LockAnalysis.h.
|
inline |
Add intra-procedural lock.
Definition at line 118 of file LockAnalysis.h.
|
inline |
Context-sensitive locks.
Add inter-procedural context-sensitive lock
Definition at line 149 of file LockAnalysis.h.
Add context-sensitive statement.
Definition at line 230 of file LockAnalysis.h.
Add intra-procedural lock.
Definition at line 108 of file LockAnalysis.h.
|
inline |
Return true if two locksets has at least one alias lock.
Definition at line 177 of file LockAnalysis.h.
| void LockAnalysis::analyze | ( | ) |
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.
Definition at line 41 of file LockAnalysis.cpp.
| void LockAnalysis::analyzeIntraProcedualLock | ( | ) |
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 145 of file LockAnalysis.cpp.
| void LockAnalysis::analyzeLockSpanCxtStmt | ( | ) |
Definition at line 332 of file LockAnalysis.cpp.
| void LockAnalysis::buildCandidateFuncSetforLock | ( | ) |
Collect candidate functions for context-sensitive lock analysis
Definition at line 97 of file LockAnalysis.cpp.
|
inlineprivate |
Clear flags.
Definition at line 389 of file LockAnalysis.h.
| void LockAnalysis::collectCxtLock | ( | ) |
Definition at line 261 of file LockAnalysis.cpp.
| void LockAnalysis::collectLockUnlocksites | ( | ) |
Collect lock/unlock sites
Definition at line 69 of file LockAnalysis.cpp.
|
inline |
Definition at line 247 of file LockAnalysis.h.
|
inline |
Definition at line 223 of file LockAnalysis.h.
|
inline |
Definition at line 217 of file LockAnalysis.h.
|
inline |
Definition at line 206 of file LockAnalysis.h.
Definition at line 138 of file LockAnalysis.h.
Get lock value.
Definition at line 472 of file LockAnalysis.h.
|
inline |
Definition at line 314 of file LockAnalysis.h.
Definition at line 260 of file LockAnalysis.h.
|
inlineprivate |
Definition at line 477 of file LockAnalysis.h.
|
inline |
Handle call.
Definition at line 430 of file LockAnalysis.cpp.
|
private |
Handle call relations.
Handling call relations when collecting context-sensitive locks
Definition at line 310 of file LockAnalysis.cpp.
Handle intra.
Definition at line 526 of file LockAnalysis.cpp.
Handle return.
Definition at line 453 of file LockAnalysis.cpp.
Definition at line 285 of file LockAnalysis.h.
Get context-sensitive lock.
Definition at line 157 of file LockAnalysis.h.
Definition at line 212 of file LockAnalysis.h.
Context-sensitive statement and lock spans.
Get LockSet and LockSpan
Definition at line 201 of file LockAnalysis.h.
Check if one instruction's context stmt is in a lock span.
Definition at line 270 of file LockAnalysis.h.
Definition at line 256 of file LockAnalysis.h.
|
inlineprivate |
Definition at line 373 of file LockAnalysis.h.
|
inline |
Return true if the intersection of two locksets is not empty.
Definition at line 163 of file LockAnalysis.h.
Intra-procedural backward traversal
Definition at line 217 of file LockAnalysis.cpp.
| bool LockAnalysis::intraForwardTraverse | ( | const ICFGNode * | lockSite, |
| InstSet & | unlockSet, | ||
| InstSet & | forwardInsts | ||
| ) |
Intra-procedural forward traversal
Definition at line 173 of file LockAnalysis.cpp.
Return true it a lock matches an unlock.
Definition at line 343 of file LockAnalysis.h.
todo: must alias
Definition at line 347 of file LockAnalysis.h.
Whether it is a callsite.
Definition at line 462 of file LockAnalysis.h.
|
private |
If lhs is a suffix of rhs, including equal.
Definition at line 571 of file LockAnalysis.cpp.
Whether it is calling an external function.
Definition at line 467 of file LockAnalysis.h.
Return true if two instructions are inside same context-insensitive lock span
Definition at line 673 of file LockAnalysis.cpp.
Return true if two context-sensitive instructions are inside same context-insensitive lock spa
Definition at line 694 of file LockAnalysis.cpp.
Return true if two instructions are inside at least one common context-sensitive lock span
Definition at line 705 of file LockAnalysis.cpp.
Return true if two instructions are inside at least one common lock span
Definition at line 655 of file LockAnalysis.cpp.
Return true if a statement is inside a partial lock/unlock pair (conditional lock with unconditional unlock)
Definition at line 133 of file LockAnalysis.h.
Return true if a statement is inside an intra-procedural lock.
Definition at line 127 of file LockAnalysis.h.
Intraprocedural locks.
Return true if the lock is an intra-procedural lock
Definition at line 101 of file LockAnalysis.h.
Return true if it is a candidate function.
Definition at line 193 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 619 of file LockAnalysis.cpp.
Protected by at least one common context-sensitive lock under each context
Definition at line 631 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 580 of file LockAnalysis.cpp.
Whether it is a lock site.
Definition at line 448 of file LockAnalysis.h.
Whether it is a lock site.
Definition at line 441 of file LockAnalysis.h.
Whether it is a unlock site.
Definition at line 455 of file LockAnalysis.h.
|
inlineprivate |
Definition at line 411 of file LockAnalysis.h.
Mark thread flags for cxtStmt.
Transfer function for marking context-sensitive statement
Definition at line 356 of file LockAnalysis.h.
|
private |
Match context.
partial match
Definition at line 547 of file LockAnalysis.cpp.
|
inlineprivate |
Definition at line 406 of file LockAnalysis.h.
|
inlineprivate |
Definition at line 423 of file LockAnalysis.h.
Print locks and spans.
Print context-insensitive and context-sensitive locks
Definition at line 396 of file LockAnalysis.cpp.
|
private |
Context helper functions.
Push calling context
Definition at line 542 of file LockAnalysis.cpp.
|
inlineprivate |
WorkList helper functions.
Definition at line 397 of file LockAnalysis.h.
Worklist operations.
Definition at line 419 of file LockAnalysis.h.
Add context-sensitive statement.
Definition at line 236 of file LockAnalysis.h.
|
inline |
Touch this context statement.
Definition at line 252 of file LockAnalysis.h.
|
private |
Used for context-insensitive intra-procedural locks.
Definition at line 521 of file LockAnalysis.h.
|
private |
Following data structures are used for collecting context-sensitive locks.
Definition at line 504 of file LockAnalysis.h.
|
private |
Context-sensitive locks.
Definition at line 493 of file LockAnalysis.h.
|
private |
Map a context-sensitive lock to its lock span statements Map a context-sensitive statement to its context-sensitive lock
Definition at line 498 of file LockAnalysis.h.
|
private |
context-sensitive statement worklist
Definition at line 486 of file LockAnalysis.h.
|
private |
Definition at line 499 of file LockAnalysis.h.
|
private |
Definition at line 522 of file LockAnalysis.h.
|
private |
Definition at line 523 of file LockAnalysis.h.
|
private |
Map a statement to all its context-sensitive statements.
Definition at line 489 of file LockAnalysis.h.
|
private |
Candidate functions which relevant to locks/unlocks.
Definition at line 516 of file LockAnalysis.h.
| double SVF::LockAnalysis::lockQueriesTime |
Definition at line 531 of file LockAnalysis.h.
|
private |
Record all visited clps.
Collecting lock/unlock sites
Definition at line 510 of file LockAnalysis.h.
| double SVF::LockAnalysis::lockTime |
Definition at line 528 of file LockAnalysis.h.
| u32_t SVF::LockAnalysis::numOfLockedQueries |
Definition at line 530 of file LockAnalysis.h.
| u32_t SVF::LockAnalysis::numOfTotalQueries |
Definition at line 529 of file LockAnalysis.h.
|
private |
TCT.
Definition at line 483 of file LockAnalysis.h.
|
private |
Definition at line 511 of file LockAnalysis.h.
|
private |
CxtLockProc List.
Definition at line 505 of file LockAnalysis.h.