Package soot.jimple.spark.geom.geomE
Class FullSensitiveNode
- java.lang.Object
-
- soot.jimple.spark.geom.geomPA.IVarAbstraction
-
- soot.jimple.spark.geom.geomE.FullSensitiveNode
-
- All Implemented Interfaces:
Numberable
public class FullSensitiveNode extends IVarAbstraction
This class defines an abstract pointer in the geometric points-to solver. All the points-to/flows-to information and the load/store constraints related to this pointer are stored here. The pointer assignment inference rules and the complex constraints initialization rules are also implemented here.- Author:
- xiao
-
-
Field Summary
Fields Modifier and Type Field Description Vector<PlainConstraint>complex_consMap<FullSensitiveNode,GeometricManager>flowtoMap<AllocNode,GeometricManager>new_ptsMap<AllocNode,GeometricManager>pt_objsstatic String[]symbols-
Fields inherited from class soot.jimple.spark.geom.geomPA.IVarAbstraction
deadManager, id, lrf_value, me, parent, pres, Qpos, stubManager, top_value, willUpdate
-
-
Constructor Summary
Constructors Constructor Description FullSensitiveNode(Node thisVar)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanadd_points_to_3(AllocNode obj, long I1, long I2, long L)booleanadd_points_to_4(AllocNode obj, long I1, long I2, long L1, long L2)booleanadd_simple_constraint_3(IVarAbstraction qv, long I1, long I2, long L)booleanadd_simple_constraint_4(IVarAbstraction qv, long I1, long I2, long L1, long L2)intcount_flow_intervals(IVarAbstraction qv)intcount_new_pts_intervals()intcount_pts_intervals(AllocNode obj)voiddeleteAll()voiddo_after_propagation()voiddo_before_propagation()voiddrop_duplicates()voidget_all_context_sensitive_objects(long l, long r, PtSensVisitor visitor)Given the pointers falling in the context range [l, r), we compute the set of context sensitive objects pointed to by those pointers.Set<AllocNode>get_all_points_to_objects()Obtain context insensitive points-to result (by removing contexts).booleanheap_sensitive_intersection(IVarAbstraction qv)Perform context sensitive alias checking with qv.voidinjectPts()We transfer the SPARK results to current pointer if this pointer is not involved in the geometric analysis.booleanisDeadObject(AllocNode obj)Test if the particular object has been obsoleted.voidkeepPointsToOnly()intnum_of_diff_edges()intnum_of_diff_objs()Return -1 if this pointer does not have points-to information.booleanpointer_interval_points_to(long l, long r, AllocNode obj)Test if the pointer in the context range [l, R) points to object obj.voidprint_context_sensitive_points_to(PrintStream outPrintStream)voidpropagate(GeomPointsTo ptAnalyzer, IWorklist worklist)The place where you implement the pointer assignment reasoning.voidput_complex_constraint(PlainConstraint cons)voidreconstruct()voidremove_points_to(AllocNode obj)-
Methods inherited from class soot.jimple.spark.geom.geomPA.IVarAbstraction
enclosingMethod, getNumber, getRepresentative, getType, getWrappedNode, hasPTResult, isLocalPointer, lessThan, merge, reachable, setNumber, toString
-
-
-
-
Field Detail
-
flowto
public Map<FullSensitiveNode,GeometricManager> flowto
-
pt_objs
public Map<AllocNode,GeometricManager> pt_objs
-
new_pts
public Map<AllocNode,GeometricManager> new_pts
-
complex_cons
public Vector<PlainConstraint> complex_cons
-
symbols
public static String[] symbols
-
-
Constructor Detail
-
FullSensitiveNode
public FullSensitiveNode(Node thisVar)
-
-
Method Detail
-
deleteAll
public void deleteAll()
- Specified by:
deleteAllin classIVarAbstraction
-
reconstruct
public void reconstruct()
- Specified by:
reconstructin classIVarAbstraction
-
keepPointsToOnly
public void keepPointsToOnly()
- Specified by:
keepPointsToOnlyin classIVarAbstraction
-
do_before_propagation
public void do_before_propagation()
- Specified by:
do_before_propagationin classIVarAbstraction
-
do_after_propagation
public void do_after_propagation()
- Specified by:
do_after_propagationin classIVarAbstraction
-
num_of_diff_objs
public int num_of_diff_objs()
Description copied from class:IVarAbstractionReturn -1 if this pointer does not have points-to information. This function can be used for testing if the pointer has been processed by geomPTA.- Specified by:
num_of_diff_objsin classIVarAbstraction
-
num_of_diff_edges
public int num_of_diff_edges()
- Specified by:
num_of_diff_edgesin classIVarAbstraction
-
add_points_to_3
public boolean add_points_to_3(AllocNode obj, long I1, long I2, long L)
- Specified by:
add_points_to_3in classIVarAbstraction
-
add_points_to_4
public boolean add_points_to_4(AllocNode obj, long I1, long I2, long L1, long L2)
- Specified by:
add_points_to_4in classIVarAbstraction
-
add_simple_constraint_3
public boolean add_simple_constraint_3(IVarAbstraction qv, long I1, long I2, long L)
- Specified by:
add_simple_constraint_3in classIVarAbstraction
-
add_simple_constraint_4
public boolean add_simple_constraint_4(IVarAbstraction qv, long I1, long I2, long L1, long L2)
- Specified by:
add_simple_constraint_4in classIVarAbstraction
-
put_complex_constraint
public void put_complex_constraint(PlainConstraint cons)
- Specified by:
put_complex_constraintin classIVarAbstraction
-
drop_duplicates
public void drop_duplicates()
- Specified by:
drop_duplicatesin classIVarAbstraction
-
propagate
public void propagate(GeomPointsTo ptAnalyzer, IWorklist worklist)
The place where you implement the pointer assignment reasoning.- Specified by:
propagatein classIVarAbstraction
-
isDeadObject
public boolean isDeadObject(AllocNode obj)
Description copied from class:IVarAbstractionTest if the particular object has been obsoleted. It's mainly for points-to developer use.- Specified by:
isDeadObjectin classIVarAbstraction- Returns:
-
count_pts_intervals
public int count_pts_intervals(AllocNode obj)
- Specified by:
count_pts_intervalsin classIVarAbstraction
-
count_flow_intervals
public int count_flow_intervals(IVarAbstraction qv)
- Specified by:
count_flow_intervalsin classIVarAbstraction
-
heap_sensitive_intersection
public boolean heap_sensitive_intersection(IVarAbstraction qv)
Description copied from class:IVarAbstractionPerform context sensitive alias checking with qv.- Specified by:
heap_sensitive_intersectionin classIVarAbstraction- Returns:
-
get_all_points_to_objects
public Set<AllocNode> get_all_points_to_objects()
Description copied from class:IVarAbstractionObtain context insensitive points-to result (by removing contexts).- Specified by:
get_all_points_to_objectsin classIVarAbstraction- Returns:
-
print_context_sensitive_points_to
public void print_context_sensitive_points_to(PrintStream outPrintStream)
- Specified by:
print_context_sensitive_points_toin classIVarAbstraction
-
injectPts
public void injectPts()
We transfer the SPARK results to current pointer if this pointer is not involved in the geometric analysis. Note that, the unreachable objects will not be inserted.- Specified by:
injectPtsin classIVarAbstraction
-
pointer_interval_points_to
public boolean pointer_interval_points_to(long l, long r, AllocNode obj)Description copied from class:IVarAbstractionTest if the pointer in the context range [l, R) points to object obj.- Specified by:
pointer_interval_points_toin classIVarAbstraction- Returns:
-
remove_points_to
public void remove_points_to(AllocNode obj)
- Specified by:
remove_points_toin classIVarAbstraction
-
get_all_context_sensitive_objects
public void get_all_context_sensitive_objects(long l, long r, PtSensVisitor visitor)Description copied from class:IVarAbstractionGiven the pointers falling in the context range [l, r), we compute the set of context sensitive objects pointed to by those pointers. This function is designed in visitor pattern.- Specified by:
get_all_context_sensitive_objectsin classIVarAbstraction- See Also:
Obj_1cfa_extractor,Obj_full_extractor
-
count_new_pts_intervals
public int count_new_pts_intervals()
- Specified by:
count_new_pts_intervalsin classIVarAbstraction
-
-