public final class DemandCSPointsTo extends java.lang.Object implements PointsToAnalysis
Modifier and Type | Class and Description |
---|---|
protected static class |
DemandCSPointsTo.AllocAndContextCache |
protected static class |
DemandCSPointsTo.CallingContextSet |
protected static class |
DemandCSPointsTo.CallSiteAndContext |
protected static class |
DemandCSPointsTo.CallSiteToTargetsMap |
protected static class |
DemandCSPointsTo.IncomingEdgeHandler |
protected static class |
DemandCSPointsTo.VarAndContext |
protected static class |
DemandCSPointsTo.VarContextAndUp |
ARRAY_ELEMENTS_NODE, CANONICAL_PATH, CANONICAL_PATH_LOCAL, CAST_NODE, DEFAULT_CLASS_LOADER, DEFAULT_CLASS_LOADER_LOCAL, EXCEPTION_NODE, FINALIZE_QUEUE, MAIN_CLASS_NAME_STRING, MAIN_CLASS_NAME_STRING_LOCAL, MAIN_THREAD_GROUP_NODE, MAIN_THREAD_GROUP_NODE_LOCAL, MAIN_THREAD_NODE, MAIN_THREAD_NODE_LOCAL, PHI_NODE, PRIVILEGED_ACTION_EXCEPTION, PRIVILEGED_ACTION_EXCEPTION_LOCAL, RETURN_NODE, RETURN_STRING_CONSTANT_NODE, STRING_ARRAY_NODE, STRING_ARRAY_NODE_LOCAL, STRING_NODE, STRING_NODE_LOCAL, THIS_NODE, THROW_NODE
Constructor and Description |
---|
DemandCSPointsTo(ContextSensitiveInfo csInfo,
PAG pag) |
DemandCSPointsTo(ContextSensitiveInfo csInfo,
PAG pag,
int maxTraversal,
int maxPasses,
boolean lazy) |
Modifier and Type | Method and Description |
---|---|
protected boolean |
callEdgeInSCC(AssignEdge assignEdge) |
protected DemandCSPointsTo.CallingContextSet |
checkAllocAndContextCache(AllocAndContext allocAndContext,
VarNode targetVar) |
protected PointsToSetInternal |
checkContextsForAllocsCache(DemandCSPointsTo.VarAndContext varAndContext,
AllocAndContextSet ret,
PointsToSetInternal locs) |
protected boolean |
checkP2Set(VarNode v,
HeuristicType heuristic,
Predicate<java.util.Set<AllocAndContext>> p2setPred)
check the computed points-to set of a variable against some predicate
|
protected DemandCSPointsTo.CallingContextSet |
checkUpContextCache(DemandCSPointsTo.VarContextAndUp varContextAndUp,
AllocAndContext allocAndContext) |
void |
clearCache()
clears the cache
|
protected void |
clearState() |
protected java.util.Set<VarNode> |
computeFlowsTo(AllocNode alloc,
HeuristicType heuristic)
compute a flows-to set for an allocation site.
|
protected PointsToSet |
computeReachingObjects(Local l)
Computes the possibly refined set of reaching objects for l.
|
protected PointsToSet |
computeRefinedReachingObjects(VarNode v)
Computes the refined set of reaching objects for l.
|
protected void |
debugPrint(java.lang.String str) |
void |
disableCache()
disables caching
|
PointsToSet |
doReachingObjects(Local l) |
protected void |
dumpPathForLoc(VarNode v,
AllocNode badLoc,
java.lang.String filePrefix) |
void |
enableCache()
enables caching
|
protected java.util.Collection<AssignEdge> |
filterAssigns(VarNode v,
ImmutableStack<java.lang.Integer> callingContext,
boolean forward,
boolean refineVirtCalls) |
protected AllocAndContextSet |
findContextsForAllocs(DemandCSPointsTo.VarAndContext varAndContext,
PointsToSetInternal locs) |
protected DemandCSPointsTo.CallingContextSet |
findUpContextsForVar(AllocAndContext allocAndContext,
DemandCSPointsTo.VarContextAndUp varContextAndUp) |
protected DemandCSPointsTo.CallingContextSet |
findVarContextsFromAlloc(AllocAndContext allocAndContext,
VarNode targetVar) |
protected java.util.Set<SootMethod> |
getCallTargets(PointsToSetInternal p2Set,
NumberedString methodStr,
Type receiverType,
java.util.Set<SootMethod> possibleTargets) |
protected java.util.Set<SootMethod> |
getCallTargetsForType(Type type,
NumberedString methodStr,
Type receiverType,
java.util.Set<SootMethod> possibleTargets) |
protected java.util.Set<VarNode> |
getFlowsToHelper(AllocAndContext allocAndContext) |
HeuristicType |
getHeuristicType() |
protected int |
getMaxPasses() |
PAG |
getPAG() |
protected void |
incrementNodesTraversed() |
protected boolean |
isRecursive(ImmutableStack<java.lang.Integer> context,
AssignEdge assignEdge) |
protected boolean |
isRecursiveCallSite(java.lang.Integer callSite) |
boolean |
isRefineCallGraph() |
static DemandCSPointsTo |
makeDefault()
Make a default analysis.
|
static DemandCSPointsTo |
makeWithBudget(int maxTraversal,
int maxPasses,
boolean lazy) |
protected java.util.Set<VarNode> |
nodesPropagatedThrough(VarNode source,
PointsToSetInternal allocs) |
protected ImmutableStack<java.lang.Integer> |
popRecursiveCallSites(ImmutableStack<java.lang.Integer> context) |
protected void |
processIncomingEdges(DemandCSPointsTo.IncomingEdgeHandler h,
Stack<DemandCSPointsTo.VarAndContext> worklist) |
protected ImmutableStack<java.lang.Integer> |
pushWithRecursionCheck(ImmutableStack<java.lang.Integer> context,
AssignEdge assignEdge) |
PointsToSet |
reachingObjects(Context c,
Local l)
Currently not implemented.
|
PointsToSet |
reachingObjects(Context c,
Local l,
SootField f)
Currently not implemented.
|
PointsToSet |
reachingObjects(Local l)
Returns the set of objects pointed to by variable l.
|
PointsToSet |
reachingObjects(Local l,
SootField f)
Currently not implemented.
|
PointsToSet |
reachingObjects(PointsToSet s,
SootField f)
Currently not implemented.
|
PointsToSet |
reachingObjects(SootField f)
Currently not implemented.
|
PointsToSet |
reachingObjectsOfArrayElement(PointsToSet s)
Currently not implemented.
|
protected boolean |
refineAlias(VarNode v1,
VarNode v2,
PointsToSetInternal intersection,
HeuristicType heuristic) |
protected boolean |
refineAliasInternal(VarNode v1,
VarNode v2,
PointsToSetInternal intersection,
HeuristicType heuristic) |
protected java.util.Set<SootMethod> |
refineCallSite(java.lang.Integer callSite,
ImmutableStack<java.lang.Integer> origContext) |
protected boolean |
refineP2Set(DemandCSPointsTo.VarAndContext varAndContext,
PointsToSetInternal badLocs) |
protected boolean |
refineP2Set(VarNode v,
PointsToSetInternal badLocs,
HeuristicType heuristic) |
void |
setHeuristicType(HeuristicType heuristicType) |
void |
setRefineCallGraph(boolean refineCallGraph) |
boolean |
usesCache() |
protected boolean |
weirdCall(java.lang.Integer callSite) |
public static boolean DEBUG
protected static final int DEBUG_NESTING
protected static final int DEBUG_PASS
protected static final boolean DEBUG_VIRT
protected static final int DEFAULT_MAX_PASSES
protected static final int DEFAULT_MAX_TRAVERSAL
protected static final boolean DEFAULT_LAZY
protected static final ImmutableStack<java.lang.Integer> EMPTY_CALLSTACK
protected final DemandCSPointsTo.AllocAndContextCache allocAndContextCache
protected Stack<Pair<java.lang.Integer,ImmutableStack<java.lang.Integer>>> callGraphStack
protected final DemandCSPointsTo.CallSiteToTargetsMap callSiteToResolvedTargets
protected java.util.HashMap<java.util.List<java.lang.Object>,java.util.Set<SootMethod>> callTargetsArgCache
protected final Stack<DemandCSPointsTo.VarAndContext> contextForAllocsStack
protected java.util.Map<DemandCSPointsTo.VarAndContext,Pair<PointsToSetInternal,AllocAndContextSet>> contextsForAllocsCache
protected final ContextSensitiveInfo csInfo
protected boolean doPointsTo
true
, compute full points-to set for queried
variableprotected FieldCheckHeuristic fieldCheckHeuristic
protected HeuristicType heuristicType
protected SootUtil.FieldToEdgesMap fieldToLoads
protected SootUtil.FieldToEdgesMap fieldToStores
protected final int maxNodesPerPass
protected final int maxPasses
protected int nesting
protected int numNodesTraversed
protected int numPasses
protected final PAG pag
protected AllocAndContextSet pointsTo
protected final java.util.Set<DemandCSPointsTo.CallSiteAndContext> queriedCallSites
protected int recursionDepth
protected boolean refiningCallSite
protected OTFMethodSCCManager sccManager
protected java.util.Map<DemandCSPointsTo.VarContextAndUp,java.util.Map<AllocAndContext,DemandCSPointsTo.CallingContextSet>> upContextCache
protected ValidMatches vMatches
protected java.util.Map<Local,PointsToSet> reachingObjectsCache
protected java.util.Map<Local,PointsToSet> reachingObjectsCacheNoCGRefinement
protected boolean useCache
public DemandCSPointsTo(ContextSensitiveInfo csInfo, PAG pag)
public DemandCSPointsTo(ContextSensitiveInfo csInfo, PAG pag, int maxTraversal, int maxPasses, boolean lazy)
public static DemandCSPointsTo makeDefault()
public static DemandCSPointsTo makeWithBudget(int maxTraversal, int maxPasses, boolean lazy)
public PointsToSet reachingObjects(Local l)
PointsToAnalysis
reachingObjects
in interface PointsToAnalysis
public PointsToSet doReachingObjects(Local l)
protected PointsToSet computeReachingObjects(Local l)
protected PointsToSet computeRefinedReachingObjects(VarNode v)
null
if refinement failed.protected boolean callEdgeInSCC(AssignEdge assignEdge)
protected DemandCSPointsTo.CallingContextSet checkAllocAndContextCache(AllocAndContext allocAndContext, VarNode targetVar)
protected PointsToSetInternal checkContextsForAllocsCache(DemandCSPointsTo.VarAndContext varAndContext, AllocAndContextSet ret, PointsToSetInternal locs)
protected boolean checkP2Set(VarNode v, HeuristicType heuristic, Predicate<java.util.Set<AllocAndContext>> p2setPred)
v
- the variableheuristic
- how to refine match edgesp2setPred
- the predicate on the points-to setprotected DemandCSPointsTo.CallingContextSet checkUpContextCache(DemandCSPointsTo.VarContextAndUp varContextAndUp, AllocAndContext allocAndContext)
protected void clearState()
protected java.util.Set<VarNode> computeFlowsTo(AllocNode alloc, HeuristicType heuristic)
alloc
- heuristic
- protected void debugPrint(java.lang.String str)
protected void dumpPathForLoc(VarNode v, AllocNode badLoc, java.lang.String filePrefix)
protected java.util.Collection<AssignEdge> filterAssigns(VarNode v, ImmutableStack<java.lang.Integer> callingContext, boolean forward, boolean refineVirtCalls)
protected AllocAndContextSet findContextsForAllocs(DemandCSPointsTo.VarAndContext varAndContext, PointsToSetInternal locs)
protected DemandCSPointsTo.CallingContextSet findUpContextsForVar(AllocAndContext allocAndContext, DemandCSPointsTo.VarContextAndUp varContextAndUp)
protected DemandCSPointsTo.CallingContextSet findVarContextsFromAlloc(AllocAndContext allocAndContext, VarNode targetVar)
protected java.util.Set<SootMethod> getCallTargets(PointsToSetInternal p2Set, NumberedString methodStr, Type receiverType, java.util.Set<SootMethod> possibleTargets)
protected java.util.Set<SootMethod> getCallTargetsForType(Type type, NumberedString methodStr, Type receiverType, java.util.Set<SootMethod> possibleTargets)
protected java.util.Set<VarNode> getFlowsToHelper(AllocAndContext allocAndContext)
protected int getMaxPasses()
protected void incrementNodesTraversed()
protected boolean isRecursive(ImmutableStack<java.lang.Integer> context, AssignEdge assignEdge)
protected boolean isRecursiveCallSite(java.lang.Integer callSite)
protected java.util.Set<VarNode> nodesPropagatedThrough(VarNode source, PointsToSetInternal allocs)
protected ImmutableStack<java.lang.Integer> popRecursiveCallSites(ImmutableStack<java.lang.Integer> context)
protected void processIncomingEdges(DemandCSPointsTo.IncomingEdgeHandler h, Stack<DemandCSPointsTo.VarAndContext> worklist)
protected ImmutableStack<java.lang.Integer> pushWithRecursionCheck(ImmutableStack<java.lang.Integer> context, AssignEdge assignEdge)
protected boolean refineAlias(VarNode v1, VarNode v2, PointsToSetInternal intersection, HeuristicType heuristic)
protected boolean refineAliasInternal(VarNode v1, VarNode v2, PointsToSetInternal intersection, HeuristicType heuristic)
protected java.util.Set<SootMethod> refineCallSite(java.lang.Integer callSite, ImmutableStack<java.lang.Integer> origContext)
protected boolean refineP2Set(DemandCSPointsTo.VarAndContext varAndContext, PointsToSetInternal badLocs)
protected boolean refineP2Set(VarNode v, PointsToSetInternal badLocs, HeuristicType heuristic)
protected boolean weirdCall(java.lang.Integer callSite)
public PointsToSet reachingObjects(Context c, Local l)
reachingObjects
in interface PointsToAnalysis
java.lang.UnsupportedOperationException
- alwayspublic PointsToSet reachingObjects(Context c, Local l, SootField f)
reachingObjects
in interface PointsToAnalysis
java.lang.UnsupportedOperationException
- alwayspublic PointsToSet reachingObjects(Local l, SootField f)
reachingObjects
in interface PointsToAnalysis
java.lang.UnsupportedOperationException
- alwayspublic PointsToSet reachingObjects(PointsToSet s, SootField f)
reachingObjects
in interface PointsToAnalysis
java.lang.UnsupportedOperationException
- alwayspublic PointsToSet reachingObjects(SootField f)
reachingObjects
in interface PointsToAnalysis
java.lang.UnsupportedOperationException
- alwayspublic PointsToSet reachingObjectsOfArrayElement(PointsToSet s)
reachingObjectsOfArrayElement
in interface PointsToAnalysis
java.lang.UnsupportedOperationException
- alwayspublic PAG getPAG()
public boolean usesCache()
true
is caching is enabledpublic void enableCache()
public void disableCache()
public void clearCache()
public boolean isRefineCallGraph()
public void setRefineCallGraph(boolean refineCallGraph)
public HeuristicType getHeuristicType()
public void setHeuristicType(HeuristicType heuristicType)