|
Static Value-Flow Analysis
|
#include <AbstractStateManager.h>
Private Attributes | |
| SVFIR * | svfir |
| SVFG * | svfg |
| Map< const ICFGNode *, AbstractState > | abstractTrace |
Manages abstract states across ICFG nodes and provides a unified API for reading/writing abstract values. Encapsulates the dense vs. semi-sparse lookup strategy so that all consumers (updateStateOnXxx, AEDetector, AbsExtAPI) are sparsity-agnostic.
Two sparsity-dependent behaviors live here:
Definition at line 48 of file AbstractStateManager.h.
| AbstractStateManager::AbstractStateManager | ( | SVFIR * | svfir, |
| AndersenWaveDiff * | pta | ||
| ) |
Definition at line 35 of file AbstractStateManager.cpp.
| AbstractStateManager::~AbstractStateManager | ( | ) |
Definition at line 45 of file AbstractStateManager.cpp.
| AbstractState & AbstractStateManager::getAbstractState | ( | const ICFGNode * | node | ) |
Retrieve the abstract state for a given ICFG node. Asserts if absent.
Definition at line 54 of file AbstractStateManager.cpp.
| void AbstractStateManager::getAbstractState | ( | const Set< const ObjVar * > & | vars, |
| AbstractState & | result, | ||
| const ICFGNode * | node | ||
| ) |
Definition at line 290 of file AbstractStateManager.cpp.
| void AbstractStateManager::getAbstractState | ( | const Set< const SVFVar * > & | vars, |
| AbstractState & | result, | ||
| const ICFGNode * | node | ||
| ) |
Definition at line 300 of file AbstractStateManager.cpp.
| void AbstractStateManager::getAbstractState | ( | const Set< const ValVar * > & | vars, |
| AbstractState & | result, | ||
| const ICFGNode * | node | ||
| ) |
Retrieve abstract state filtered to specific variable sets.
Definition at line 280 of file AbstractStateManager.cpp.
| const AbstractValue & AbstractStateManager::getAbstractValue | ( | const ObjVar * | var, |
| const ICFGNode * | node | ||
| ) |
Read an address-taken variable's content via virtual-address load.
Definition at line 158 of file AbstractStateManager.cpp.
| const AbstractValue & AbstractStateManager::getAbstractValue | ( | const SVFVar * | var, |
| const ICFGNode * | node | ||
| ) |
Dispatch to ValVar or ObjVar overload (checks ObjVar first due to inheritance).
Definition at line 165 of file AbstractStateManager.cpp.
| const AbstractValue & AbstractStateManager::getAbstractValue | ( | const ValVar * | var, |
| const ICFGNode * | node | ||
| ) |
Read a top-level variable's abstract value. Dense: reads from abstractTrace[node]. Semi-sparse: checks current state first, then pulls from def-site. Returns top if absent everywhere.
Definition at line 87 of file AbstractStateManager.cpp.
Get the byte size of a stack allocation.
Definition at line 504 of file AbstractStateManager.cpp.
| const ICFGNode * AbstractStateManager::getDefSiteOfObjVar | ( | const ObjVar * | obj, |
| const ICFGNode * | node | ||
| ) | const |
Given an ObjVar and its use-site ICFGNode, find the definition-site ICFGNode.
Definition at line 577 of file AbstractStateManager.cpp.
Given a ValVar, find its definition-site ICFGNode.
Definition at line 567 of file AbstractStateManager.cpp.
| IntervalValue AbstractStateManager::getGepByteOffset | ( | const GepStmt * | gep | ) |
Compute the byte offset for a GepStmt.
Definition at line 379 of file AbstractStateManager.cpp.
| IntervalValue AbstractStateManager::getGepElementIndex | ( | const GepStmt * | gep | ) |
Compute the flattened element index for a GepStmt.
Definition at line 322 of file AbstractStateManager.cpp.
| AddressValue AbstractStateManager::getGepObjAddrs | ( | const ValVar * | pointer, |
| IntervalValue | offset | ||
| ) |
Compute GEP object addresses for a pointer at a given element offset.
Definition at line 439 of file AbstractStateManager.cpp.
| const SVFType * AbstractStateManager::getPointeeElement | ( | const ObjVar * | var, |
| const ICFGNode * | node | ||
| ) |
Get the pointee type for a pointer variable.
Definition at line 489 of file AbstractStateManager.cpp.
|
inline |
Definition at line 154 of file AbstractStateManager.h.
| Set< const ICFGNode * > AbstractStateManager::getUseSitesOfObjVar | ( | const ObjVar * | obj, |
| const ICFGNode * | node | ||
| ) | const |
Given an ObjVar and its use-site ICFGNode, find all downstream use-site ICFGNodes.
Definition at line 538 of file AbstractStateManager.cpp.
Given a ValVar, find all use-site ICFGNodes.
Definition at line 551 of file AbstractStateManager.cpp.
Check if an abstract state exists for a given ICFG node.
Definition at line 78 of file AbstractStateManager.cpp.
Check whether an ObjVar has a stored value at node.
Definition at line 223 of file AbstractStateManager.cpp.
Dispatch to ValVar or ObjVar overload.
Definition at line 232 of file AbstractStateManager.cpp.
Check whether a ValVar has a real stored value reachable by getAbstractValue. Unlike getAbstractValue, this is side-effect free and does NOT treat the final top-fallback as "present" — so callers that plan to write the fetched value back (e.g. cycle widen/narrow) can distinguish a genuine stored value from the top sentinel.
Definition at line 184 of file AbstractStateManager.cpp.
| AbstractValue AbstractStateManager::loadValue | ( | const ValVar * | pointer, |
| const ICFGNode * | node | ||
| ) |
Load value through a pointer: resolve pointer's address set via getAbstractValue (sparsity-aware), then load from each ObjVar address.
Definition at line 467 of file AbstractStateManager.cpp.
|
inline |
Definition at line 158 of file AbstractStateManager.h.
| void AbstractStateManager::storeValue | ( | const ValVar * | pointer, |
| const AbstractValue & | val, | ||
| const ICFGNode * | node | ||
| ) |
Store value through a pointer: resolve pointer's address set via getAbstractValue (sparsity-aware), then store to each ObjVar address.
| pointer | The pointer SVFVar (ValVar). |
| val | The value to store. |
| node | The ICFG node providing context. |
Definition at line 477 of file AbstractStateManager.cpp.
| void AbstractStateManager::updateAbstractState | ( | const ICFGNode * | node, |
| const AbstractState & | state | ||
| ) |
Definition at line 64 of file AbstractStateManager.cpp.
| void AbstractStateManager::updateAbstractValue | ( | const ObjVar * | var, |
| const AbstractValue & | val, | ||
| const ICFGNode * | node | ||
| ) |
Write an address-taken variable's content via virtual-address store.
Definition at line 259 of file AbstractStateManager.cpp.
| void AbstractStateManager::updateAbstractValue | ( | const SVFVar * | var, |
| const AbstractValue & | val, | ||
| const ICFGNode * | node | ||
| ) |
Dispatch to ValVar or ObjVar overload.
Definition at line 266 of file AbstractStateManager.cpp.
| void AbstractStateManager::updateAbstractValue | ( | const ValVar * | var, |
| const AbstractValue & | val, | ||
| const ICFGNode * | node | ||
| ) |
Write a top-level variable's abstract value into abstractTrace[node].
Definition at line 245 of file AbstractStateManager.cpp.
|
private |
Definition at line 182 of file AbstractStateManager.h.
|
private |
Definition at line 181 of file AbstractStateManager.h.
|
private |
Definition at line 180 of file AbstractStateManager.h.