Search in sources :

Example 41 with Node

use of soot.jimple.spark.pag.Node in project soot by Sable.

the class PropWorklist method handleFieldRefNode.

/**
 * Propagates new points-to information of node src to all its successors.
 */
protected final void handleFieldRefNode(FieldRefNode src, final HashSet<Object[]> edgesToPropagate) {
    final Node[] loadTargets = pag.loadLookup(src);
    if (loadTargets.length == 0)
        return;
    final SparkField field = src.getField();
    src.getBase().getP2Set().forall(new P2SetVisitor() {

        public final void visit(Node n) {
            AllocDotField nDotF = pag.makeAllocDotField((AllocNode) n, field);
            if (nDotF != null) {
                PointsToSetInternal p2Set = nDotF.getP2Set();
                if (!p2Set.getNewSet().isEmpty()) {
                    for (Node element : loadTargets) {
                        Object[] pair = { p2Set, element };
                        edgesToPropagate.add(pair);
                    }
                }
            }
        }
    });
}
Also used : AllocDotField(soot.jimple.spark.pag.AllocDotField) AllocNode(soot.jimple.spark.pag.AllocNode) PointsToSetInternal(soot.jimple.spark.sets.PointsToSetInternal) ClassConstantNode(soot.jimple.spark.pag.ClassConstantNode) FieldRefNode(soot.jimple.spark.pag.FieldRefNode) NewInstanceNode(soot.jimple.spark.pag.NewInstanceNode) Node(soot.jimple.spark.pag.Node) VarNode(soot.jimple.spark.pag.VarNode) AllocNode(soot.jimple.spark.pag.AllocNode) SparkField(soot.jimple.spark.pag.SparkField) P2SetVisitor(soot.jimple.spark.sets.P2SetVisitor)

Example 42 with Node

use of soot.jimple.spark.pag.Node in project soot by Sable.

the class PropWorklist method handleAllocNode.

/* End of public methods. */
/* End of package methods. */
/**
 * Propagates new points-to information of node src to all its successors.
 */
protected final boolean handleAllocNode(AllocNode src) {
    boolean ret = false;
    Node[] targets = pag.allocLookup(src);
    for (Node element : targets) {
        if (element.makeP2Set().add(src)) {
            varNodeWorkList.add((VarNode) element);
            ret = true;
        }
    }
    return ret;
}
Also used : ClassConstantNode(soot.jimple.spark.pag.ClassConstantNode) FieldRefNode(soot.jimple.spark.pag.FieldRefNode) NewInstanceNode(soot.jimple.spark.pag.NewInstanceNode) Node(soot.jimple.spark.pag.Node) VarNode(soot.jimple.spark.pag.VarNode) AllocNode(soot.jimple.spark.pag.AllocNode)

Example 43 with Node

use of soot.jimple.spark.pag.Node in project soot by Sable.

the class MergeChecker method handleStores.

protected void handleStores(final VarNode src) {
    final PointsToSetInternal srcSet = src.getP2Set();
    if (srcSet.isEmpty())
        return;
    Node[] storeTargets = pag.storeLookup(src);
    for (Node element : storeTargets) {
        final FieldRefNode fr = (FieldRefNode) element;
        checkAll(fr, srcSet, src);
    }
}
Also used : FieldRefNode(soot.jimple.spark.pag.FieldRefNode) PointsToSetInternal(soot.jimple.spark.sets.PointsToSetInternal) FieldRefNode(soot.jimple.spark.pag.FieldRefNode) Node(soot.jimple.spark.pag.Node) VarNode(soot.jimple.spark.pag.VarNode) AllocNode(soot.jimple.spark.pag.AllocNode)

Example 44 with Node

use of soot.jimple.spark.pag.Node in project soot by Sable.

the class GeomPointsTo method getMethodIDFromPtr.

/**
 * Get the index of the enclosing function of the specified node.
 */
public int getMethodIDFromPtr(IVarAbstraction pn) {
    SootMethod sm = null;
    int ret = Constants.SUPER_MAIN;
    Node node = pn.getWrappedNode();
    if (node instanceof AllocNode) {
        sm = ((AllocNode) node).getMethod();
    } else if (node instanceof LocalVarNode) {
        sm = ((LocalVarNode) node).getMethod();
    } else if (node instanceof AllocDotField) {
        sm = ((AllocDotField) node).getBase().getMethod();
    }
    if (sm != null && func2int.containsKey(sm)) {
        int id = func2int.get(sm);
        if (vis_cg[id] == 0)
            ret = Constants.UNKNOWN_FUNCTION;
        else
            ret = id;
    }
    return ret;
}
Also used : AllocDotField(soot.jimple.spark.pag.AllocDotField) AllocNode(soot.jimple.spark.pag.AllocNode) FieldRefNode(soot.jimple.spark.pag.FieldRefNode) ContextVarNode(soot.jimple.spark.pag.ContextVarNode) LocalVarNode(soot.jimple.spark.pag.LocalVarNode) Node(soot.jimple.spark.pag.Node) VarNode(soot.jimple.spark.pag.VarNode) AllocNode(soot.jimple.spark.pag.AllocNode) SootMethod(soot.SootMethod) LocalVarNode(soot.jimple.spark.pag.LocalVarNode) PlainConstraint(soot.jimple.spark.geom.dataRep.PlainConstraint)

Example 45 with Node

use of soot.jimple.spark.pag.Node in project soot by Sable.

the class OfflineProcessor method defaultFeedPtsRoutines.

public void defaultFeedPtsRoutines() {
    switch(Parameters.seedPts) {
        case Constants.seedPts_allUser:
            setAllUserCodeVariablesUseful();
            break;
        case Constants.seedPts_all:
            // All pointers will be processed
            for (int i = 0; i < n_var; ++i) {
                IVarAbstraction pn = int2var.get(i);
                if (pn != null && pn.getRepresentative() == pn)
                    pn.willUpdate = true;
            }
            return;
    }
    // We always refine the callsites that have multiple call targets
    Set<Node> multiBaseptrs = new HashSet<Node>();
    for (Stmt callsite : geomPTA.multiCallsites) {
        InstanceInvokeExpr iie = (InstanceInvokeExpr) callsite.getInvokeExpr();
        VarNode vn = geomPTA.findLocalVarNode(iie.getBase());
        multiBaseptrs.add(vn);
    }
    addUserDefPts(multiBaseptrs);
}
Also used : GlobalVarNode(soot.jimple.spark.pag.GlobalVarNode) LocalVarNode(soot.jimple.spark.pag.LocalVarNode) VarNode(soot.jimple.spark.pag.VarNode) GlobalVarNode(soot.jimple.spark.pag.GlobalVarNode) LocalVarNode(soot.jimple.spark.pag.LocalVarNode) Node(soot.jimple.spark.pag.Node) VarNode(soot.jimple.spark.pag.VarNode) AllocNode(soot.jimple.spark.pag.AllocNode) InstanceInvokeExpr(soot.jimple.InstanceInvokeExpr) PlainConstraint(soot.jimple.spark.geom.dataRep.PlainConstraint) HashSet(java.util.HashSet) Stmt(soot.jimple.Stmt) AssignStmt(soot.jimple.AssignStmt)

Aggregations

Node (soot.jimple.spark.pag.Node)65 AllocNode (soot.jimple.spark.pag.AllocNode)62 VarNode (soot.jimple.spark.pag.VarNode)54 FieldRefNode (soot.jimple.spark.pag.FieldRefNode)36 LocalVarNode (soot.jimple.spark.pag.LocalVarNode)36 PointsToSetInternal (soot.jimple.spark.sets.PointsToSetInternal)25 P2SetVisitor (soot.jimple.spark.sets.P2SetVisitor)23 GlobalVarNode (soot.jimple.spark.pag.GlobalVarNode)18 ClassConstantNode (soot.jimple.spark.pag.ClassConstantNode)17 NewInstanceNode (soot.jimple.spark.pag.NewInstanceNode)17 SparkField (soot.jimple.spark.pag.SparkField)17 SootMethod (soot.SootMethod)15 RefType (soot.RefType)12 Type (soot.Type)11 StringConstantNode (soot.jimple.spark.pag.StringConstantNode)11 PlainConstraint (soot.jimple.spark.geom.dataRep.PlainConstraint)10 AllocDotField (soot.jimple.spark.pag.AllocDotField)10 HashSet (java.util.HashSet)9 SootClass (soot.SootClass)9 Value (soot.Value)6