public class BamCpa<CfaNodeT extends CfaNode<CfaEdgeT,SignatureT>,CfaEdgeT extends CfaEdge<CfaNodeT>,SignatureT extends Signature> extends java.lang.Object implements ConfigurableProgramAnalysis
ConfigurableProgramAnalysis
for inter-procedural analysis using block abstraction
memoization as described in https://dl.acm.org/doi/pdf/10.1145/3368089.3409718
, which is
defined by a domain-dependent CpaWithBamOperators
that adds three operators: reduce,
expand, and rebuild. This allows an inter-procedural analysis running this CPA to be conducted by
the standard CpaAlgorithm
.
A BAM CPA works on a domain-independent level and its abstract domain, merge operator, and
stop operator are defined by the domain-dependent wrapped CPA. The main feature of a BAM CPA is
its transfer relation (see BamTransferRelation
for details) that is able to extend the
analysis of the wrapped CPA to the inter-procedural level.
Constructor and Description |
---|
BamCpa(BamTransferRelation<CfaNodeT,CfaEdgeT,SignatureT> transferRelation)
Create a BamCpa with a specific transfer relation.
|
BamCpa(CpaWithBamOperators<CfaNodeT,CfaEdgeT,SignatureT> wrappedCpa,
Cfa<CfaNodeT,CfaEdgeT,SignatureT> cfa,
SignatureT mainFunction,
BamCache<SignatureT> cache)
Create a BamCpa with default transfer relation.
|
BamCpa(CpaWithBamOperators<CfaNodeT,CfaEdgeT,SignatureT> wrappedCpa,
Cfa<CfaNodeT,CfaEdgeT,SignatureT> cfa,
SignatureT mainFunction,
BamCache<SignatureT> cache,
int maxCallStackDepth,
AbortOperator abortOperator)
Create a BamCpa with default transfer relation with a limited call depth.
|
Modifier and Type | Method and Description |
---|---|
AbstractDomain |
getAbstractDomain()
Returns the abstract domain of the wrapped CPA.
|
BamCache<SignatureT> |
getCache()
Returns the BAM cache used by the CPA.
|
Cfa<CfaNodeT,CfaEdgeT,SignatureT> |
getCfa()
Returns the CFA used by the CPA.
|
ExpandOperator<CfaNodeT,CfaEdgeT,SignatureT> |
getExpandOperator()
Returns the expand operator of the wrapped CPA.
|
MergeOperator |
getMergeOperator()
Returns the merge operator of the wrapped CPA.
|
PrecisionAdjustment |
getPrecisionAdjustment()
Returns the precision adjustment of the wrapped CPA.
|
RebuildOperator |
getRebuildOperator()
Returns the rebuild operator of the wrapped CPA.
|
ReduceOperator<CfaNodeT,CfaEdgeT,SignatureT> |
getReduceOperator()
Returns the reduce operator of the wrapped CPA.
|
StopOperator |
getStopOperator()
Returns the stop operator of the wrapped CPA.
|
BamTransferRelation<CfaNodeT,CfaEdgeT,SignatureT> |
getTransferRelation()
Returns the BAM transfer relation, more details in
BamTransferRelation . |
public BamCpa(CpaWithBamOperators<CfaNodeT,CfaEdgeT,SignatureT> wrappedCpa, Cfa<CfaNodeT,CfaEdgeT,SignatureT> cfa, SignatureT mainFunction, BamCache<SignatureT> cache)
wrappedCpa
- a wrapped CPA with BAM operatorscfa
- a control flow automatonmainFunction
- the signature of the main function of an analyzed programcache
- a cache for the block abstractionspublic BamCpa(CpaWithBamOperators<CfaNodeT,CfaEdgeT,SignatureT> wrappedCpa, Cfa<CfaNodeT,CfaEdgeT,SignatureT> cfa, SignatureT mainFunction, BamCache<SignatureT> cache, int maxCallStackDepth, AbortOperator abortOperator)
wrappedCpa
- a wrapped cpa with BAM operatorscfa
- a control flow automatonmainFunction
- the signature of a main functioncache
- a cache for the block abstractionsmaxCallStackDepth
- maximum depth of the call stack analyzed inter-procedurally. 0 means
intra-procedural analysis. < 0 means no maximum depth.abortOperator
- an abort operator used for computing block abstractionspublic BamCpa(BamTransferRelation<CfaNodeT,CfaEdgeT,SignatureT> transferRelation)
transferRelation
- The transfer relation of the BamCpapublic AbstractDomain getAbstractDomain()
getAbstractDomain
in interface ConfigurableProgramAnalysis
public BamTransferRelation<CfaNodeT,CfaEdgeT,SignatureT> getTransferRelation()
BamTransferRelation
.getTransferRelation
in interface ConfigurableProgramAnalysis
public MergeOperator getMergeOperator()
getMergeOperator
in interface ConfigurableProgramAnalysis
public StopOperator getStopOperator()
getStopOperator
in interface ConfigurableProgramAnalysis
public PrecisionAdjustment getPrecisionAdjustment()
getPrecisionAdjustment
in interface ConfigurableProgramAnalysis
public ReduceOperator<CfaNodeT,CfaEdgeT,SignatureT> getReduceOperator()
public ExpandOperator<CfaNodeT,CfaEdgeT,SignatureT> getExpandOperator()
public RebuildOperator getRebuildOperator()
public BamCache<SignatureT> getCache()
public Cfa<CfaNodeT,CfaEdgeT,SignatureT> getCfa()