<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.core"/>\r
<classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.util"/>\r
- <classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.core.tests"/>\r
<classpathentry combineaccessrules="false" kind="src" path="/soba"/>\r
<classpathentry combineaccessrules="false" kind="src" path="/com.ibm.wala.shrike"/>\r
+ <classpathentry combineaccessrules="false" kind="src" path="/soot"/>\r
<classpathentry kind="output" path="bin"/>\r
</classpath>\r
--- /dev/null
+package demo.testdata;\r
+\r
+public class TestClass {\r
+\r
+ public static void main(String[] args) {\r
+ int x = add(10, 20);\r
+ int v = method1(1, 2, 3, 4);\r
+ int w = method2(5, true);\r
+// System.out.println(v);\r
+ }\r
+\r
+ private static int add(int x, int y) {\r
+ int r = method1(x, y, 1, 2);\r
+ return r;\r
+ }\r
+ \r
+ public static int method1(int a, int b, int c, int d) {\r
+ int x;\r
+ if (a > b) {\r
+ x = c * 10;\r
+ } else {\r
+ x = d / 10;\r
+ }\r
+ x = x + 5;\r
+ return x;\r
+ }\r
+ \r
+ public static int method2(int a, boolean b) {\r
+ int x;\r
+ if (b) {\r
+ x = 1;\r
+ } else {\r
+ x = 2;\r
+ int temp1 = x; // x = 2\r
+ x = 3;\r
+ }\r
+ int temp2 = x; // x = 1 or 3\r
+ return temp2;\r
+ }\r
+}\r
--- /dev/null
+package testers;\r
+\r
+public class CallGraphs\r
+{\r
+ public static void main(String[] args) {\r
+ doStuff();\r
+ }\r
+ \r
+ public static void doStuff() {\r
+ new A().foo();\r
+ }\r
+}\r
+\r
+class A\r
+{\r
+ public void foo() {\r
+ bar();\r
+ }\r
+ \r
+ public void bar() {\r
+ }\r
+}
\ No newline at end of file
package demo.soba;\r
\r
+import demo.util.MemoryInfo;\r
import soba.core.ClassHierarchy;\r
import soba.core.ClassInfo;\r
import soba.core.JavaProgram;\r
public class ClassHierarchyPerformance {\r
\r
public static void main(String[] args) {\r
+ long start = System.currentTimeMillis();\r
+ \r
JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
ClassHierarchy ch = program.getClassHierarchy();\r
\r
for (ClassInfo c: program.getClasses()) {\r
for (MethodInfo m: c.getMethods()) {\r
- System.out.println(m.toLongString());\r
for (CallSite cs: m.getCallSites()) {\r
MethodInfo[] callees = ch.resolveCall(cs);\r
if (callees.length > 0) {\r
for (MethodInfo callee: callees) {\r
- System.out.println(" [inside] " + callee.toLongString());\r
+// System.out.println(m.toString() + " may call " + callee.toString());\r
}\r
} else {\r
- System.out.println(" [outside] " + cs.toString());\r
+// System.out.println(m.toString() + " may call " + cs.toString());\r
}\r
}\r
}\r
}\r
+ \r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.out.println((end - start) + " [ms]");\r
+ System.out.println(MemoryInfo.getMemoryInfo());\r
}\r
\r
}\r
--- /dev/null
+package demo.soot;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.function.Consumer;\r
+\r
+import demo.util.MemoryInfo;\r
+import soot.PackManager;\r
+import soot.Scene;\r
+import soot.SceneTransformer;\r
+import soot.Transform;\r
+import soot.jimple.toolkits.callgraph.CallGraph;\r
+import soot.jimple.toolkits.callgraph.Edge;\r
+\r
+public class ClassHierarchyPerformance {\r
+\r
+ public static void main(String[] args) {\r
+// List<String> argsList = new ArrayList<String>(Arrays.asList(args));\r
+ List<String> argsList = Arrays.asList(new String[]{\r
+ "-cp",\r
+ "bin" + File.pathSeparator + \r
+ "bin/testers" + File.pathSeparator + \r
+ "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\rt.jar" + File.pathSeparator +\r
+ "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\jce.jar",\r
+ "-whole-program",\r
+ "-main-class",\r
+ "testers.CallGraphs",//main-class\r
+// "-app",\r
+// "testers.CallGraphs",\r
+ "-p",\r
+ "cg.cha",\r
+ "apponly:true,verbose:true",\r
+ "testers.CallGraphs",//argument classes\r
+ "testers.A" //\r
+ });\r
+\r
+\r
+ long start = System.currentTimeMillis();\r
+ \r
+ PackManager.v().getPack("wjtp").add(new Transform("wjtp.myTrans", new SceneTransformer() {\r
+ @Override\r
+ protected void internalTransform(String phaseName, Map options) {\r
+ CallGraph cg = Scene.v().getCallGraph();\r
+ cg.forEach(new Consumer<Edge>() {\r
+ @Override\r
+ public void accept(Edge edge) {\r
+// System.out.println(edge.getSrc().method().toString() + " -> " + edge.getTgt().method().toString());\r
+ }\r
+ });\r
+ \r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.out.println((end - start) + " [ms]");\r
+ System.out.println(MemoryInfo.getMemoryInfo());\r
+ }\r
+ }));\r
+\r
+ args = argsList.toArray(new String[0]);\r
+\r
+ soot.Main.main(args);\r
+ }\r
+\r
+}\r
--- /dev/null
+package demo.soot;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import soot.Body;\r
+import soot.BodyTransformer;\r
+import soot.Local;\r
+import soot.PackManager;\r
+import soot.PhaseOptions;\r
+import soot.SootMethod;\r
+import soot.Transform;\r
+import soot.Unit;\r
+import soot.Value;\r
+import soot.ValueBox;\r
+import soot.toolkits.graph.Block;\r
+import soot.toolkits.graph.BlockGraph;\r
+import soot.toolkits.graph.BlockGraphConverter;\r
+import soot.toolkits.graph.DirectedGraph;\r
+import soot.toolkits.graph.DominatorsFinder;\r
+import soot.toolkits.graph.ExceptionalUnitGraph;\r
+import soot.toolkits.graph.MHGDominatorsFinder;\r
+import soot.toolkits.graph.MHGPostDominatorsFinder;\r
+import soot.toolkits.graph.UnitGraph;\r
+import soot.toolkits.graph.pdg.ConditionalPDGNode;\r
+import soot.toolkits.graph.pdg.EnhancedBlockGraph;\r
+import soot.toolkits.graph.pdg.HashMutablePDG;\r
+import soot.toolkits.graph.pdg.PDGNode;\r
+import soot.toolkits.graph.pdg.ProgramDependenceGraph;\r
+import soot.toolkits.scalar.LiveLocals;\r
+import soot.toolkits.scalar.LocalDefs;\r
+import soot.toolkits.scalar.SimpleLiveLocals;\r
+import soot.toolkits.scalar.SmartLocalDefs;\r
+\r
+public class ControlDependencePerformance {\r
+\r
+ public static void main(String[] args) {\r
+ List<String> argsList = Arrays.asList(new String[]{\r
+ "-cp",\r
+ "bin" + File.pathSeparator + \r
+ "bin/demo/testdata" + File.pathSeparator + \r
+ "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\rt.jar" + File.pathSeparator +\r
+ "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\jce.jar",\r
+ "-whole-program",\r
+ "-main-class",\r
+ "demo.testdata.TestClass",//main-class\r
+ "-app",\r
+ "demo.testdata.TestClass",\r
+ "demo.testdata.TestClass",//argument classes\r
+ "-p",\r
+ "cg.cha",\r
+ "apponly:true,verbose:true",\r
+ "-keep-line-number"\r
+ });\r
+\r
+ PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
+ @Override\r
+ protected void internalTransform(Body body, String phase, Map options) {\r
+ SootMethod method = body.getMethod();\r
+ if (method.getName().equals("method1")) {\r
+ BlockGraph graph = new EnhancedBlockGraph(body);\r
+ DominatorsFinder<Block> domFinder = new MHGPostDominatorsFinder<>(graph);\r
+ for (Block b2: graph.getBlocks()) {\r
+ List<Block> nodes = new ArrayList<>(graph.getBlocks());\r
+ List<Block> doms = domFinder.getDominators(b2);\r
+ nodes.retainAll(doms);\r
+ nodes.remove(b2);\r
+ for (Block b1: nodes) {\r
+ System.out.println(b1.toShortString() + " -> " + b2.toShortString());\r
+ }\r
+ }\r
+// DominatorsFinder<Block> domFinder = new MHGDominatorsFinder<>(graph);\r
+// DirectedGraph<Block> postDomGraph = domFinder.getGraph();\r
+// for (Iterator<Block> itr = postDomGraph.iterator(); itr.hasNext();) {\r
+// Block b1 = itr.next();\r
+// for (Block b2: postDomGraph.getSuccsOf(b1)) {\r
+// System.out.println(b1.toShortString() + " -> " + b2.toShortString());\r
+// }\r
+// }\r
+ }\r
+ }\r
+ }));\r
+// Options.v().set_verbose(true);\r
+ PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
+ \r
+ args = argsList.toArray(new String[0]);\r
+ soot.Main.main(args);\r
+ }\r
+\r
+}\r
--- /dev/null
+package demo.soot;\r
+\r
+import java.io.File;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import soot.Body;\r
+import soot.BodyTransformer;\r
+import soot.Local;\r
+import soot.PackManager;\r
+import soot.PhaseOptions;\r
+import soot.Transform;\r
+import soot.Unit;\r
+import soot.Value;\r
+import soot.ValueBox;\r
+import soot.toolkits.graph.ExceptionalUnitGraph;\r
+import soot.toolkits.graph.UnitGraph;\r
+import soot.toolkits.scalar.LiveLocals;\r
+import soot.toolkits.scalar.LocalDefs;\r
+import soot.toolkits.scalar.SimpleLiveLocals;\r
+import soot.toolkits.scalar.SmartLocalDefs;\r
+\r
+public class DataDependencePerformance {\r
+\r
+ public static void main(String[] args) {\r
+ List<String> argsList = Arrays.asList(new String[]{\r
+ "-cp",\r
+ "bin" + File.pathSeparator + \r
+ "bin/demo/testdata" + File.pathSeparator + \r
+ "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\rt.jar" + File.pathSeparator +\r
+ "C:\\Program Files\\Java\\jre1.8.0_71\\lib\\jce.jar",\r
+ "-whole-program",\r
+ "-main-class",\r
+ "demo.testdata.TestClass",//main-class\r
+ "-app",\r
+ "demo.testdata.TestClass",\r
+ "demo.testdata.TestClass",//argument classes\r
+ "-p",\r
+ "cg.cha",\r
+ "apponly:true,verbose:true",\r
+// "-keep-line-number"\r
+ });\r
+\r
+ PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
+ @Override\r
+ protected void internalTransform(Body body, String phase, Map options) {\r
+ UnitGraph graph = new ExceptionalUnitGraph(body);\r
+ LiveLocals live = new SimpleLiveLocals(graph);\r
+ LocalDefs defs = new SmartLocalDefs(graph, live);\r
+\r
+ for (Unit u: body.getUnits()) {\r
+ for (ValueBox vb: u.getUseBoxes()) {\r
+ Value v = vb.getValue();\r
+ if (v instanceof Local) {\r
+ List<Unit> defUnits = defs.getDefsOfAt((Local) v, u);\r
+ for (Unit def: defUnits) {\r
+// System.out.println(def.toString() + " -> " + u.toString());\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }));\r
+// Options.v().set_verbose(true);\r
+ PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
+ \r
+ args = argsList.toArray(new String[0]);\r
+ soot.Main.main(args);\r
+ }\r
+\r
+}\r
--- /dev/null
+package demo.util;\r
+\r
+public class DemoUtil {\r
+\r
+ public static final String REGRESSION_EXCLUSIONS = "Java60RegressionExclusions.txt";\r
+}\r
--- /dev/null
+package demo.util;\r
+\r
+import java.text.DecimalFormat;\r
+\r
+public class MemoryInfo {\r
+\r
+ public static String getMemoryInfo() {\r
+ DecimalFormat f1 = new DecimalFormat("#,###KB");\r
+ DecimalFormat f2 = new DecimalFormat("##.#");\r
+ long free = Runtime.getRuntime().freeMemory() / 1024;\r
+ long total = Runtime.getRuntime().totalMemory() / 1024;\r
+ long max = Runtime.getRuntime().maxMemory() / 1024;\r
+ long used = total - free;\r
+ double ratio = (used * 100 / (double)total);\r
+ String info = \r
+ "Java Memory: total=" + f1.format(total) + "\81A" +\r
+ "used=" + f1.format(used) + " (" + f2.format(ratio) + "%)\81A" +\r
+ "available="+f1.format(max);\r
+ return info;\r
+ }\r
+ \r
+}\r
package demo.wala;\r
\r
-import java.io.File;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
+import java.util.Iterator;\r
\r
-import com.ibm.wala.classLoader.IMethod;\r
-import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;\r
import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
import com.ibm.wala.ipa.callgraph.CGNode;\r
import com.ibm.wala.ipa.callgraph.CallGraph;\r
-import com.ibm.wala.ipa.callgraph.CallGraphStats;\r
import com.ibm.wala.ipa.callgraph.Entrypoint;\r
import com.ibm.wala.ipa.callgraph.impl.Util;\r
import com.ibm.wala.ipa.cha.ClassHierarchy;\r
-import com.ibm.wala.types.MethodReference;\r
import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
\r
public class ClassHierarchyPerformance {\r
\r
public static void main(String[] args) {\r
try {\r
- String appJar = "sample.jar";\r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+ long start = System.currentTimeMillis();\r
+ \r
+ String appJar = "bin/testers";\r
+// AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
\r
ClassHierarchy cha = ClassHierarchy.make(scope);\r
\r
com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
CallGraph cg = builder.makeCallGraph(options, null);\r
\r
- System.out.println(CallGraphStats.getStats(cg));\r
-\r
- Set<MethodReference> methods = new HashSet<>();\r
- for(int i = 0; i < cg.getMaxNumber(); i++) {\r
+ for (int i = 0; i < cg.getMaxNumber(); i++) {\r
CGNode node = cg.getNode(i);\r
- IMethod method = node.getMethod();\r
- methods.add(method.getReference());\r
- }\r
- \r
- for (MethodReference method: methods) {\r
- System.out.println(method.toString());\r
- Set<CGNode> nodes = cg.getNodes(method);\r
- for (CGNode node: nodes) {\r
- System.out.println(" " + node.getMethod().getReference().toString());\r
+ for (Iterator<CGNode> callees = cg.getSuccNodes(node); callees.hasNext();) {\r
+ CGNode callee = callees.next();\r
+// System.out.println(node.getMethod().toString() + " -> " + callee.getMethod().toString());\r
}\r
}\r
\r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.out.println((end - start) + " [ms]");\r
+ System.out.println(MemoryInfo.getMemoryInfo());\r
} catch (Exception e) {\r
e.printStackTrace();\r
}\r
}\r
- \r
-// public static void main(String[] args) {\r
-// try {\r
-// String appJar = "sample.jar";\r
-// AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
-//\r
-// ClassHierarchy cha = ClassHierarchy.make(scope);\r
-//\r
-// Iterable<Entrypoint> entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha);\r
-// AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
-//\r
-// com.ibm.wala.ipa.callgraph.CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
-// CallGraph cg = builder.makeCallGraph(options, null);\r
-//\r
-// System.out.println(CallGraphStats.getStats(cg));\r
-// \r
-// cg.getEntrypointNodes().forEach(node -> {\r
-// System.out.println(node.getMethod().getName().toString());\r
-// });\r
-// } catch (Exception e) {\r
-// e.printStackTrace();\r
-// }\r
-// }\r
\r
}\r
--- /dev/null
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
+import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
+import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
+import com.ibm.wala.ipa.callgraph.CGNode;\r
+import com.ibm.wala.ipa.callgraph.CallGraph;\r
+import com.ibm.wala.ipa.callgraph.CallGraphBuilder;\r
+import com.ibm.wala.ipa.callgraph.Entrypoint;\r
+import com.ibm.wala.ipa.callgraph.impl.Util;\r
+import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ipa.modref.ModRef;\r
+import com.ibm.wala.ipa.slicer.HeapExclusions;\r
+import com.ibm.wala.ipa.slicer.PDG;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
+import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.intset.OrdinalSet;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+\r
+public class ControlAndDataDependencePerformance {\r
+\r
+ public static void main(String[] args) {\r
+ try {\r
+ String appJar = "bin/demo/testdata";\r
+// String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+ ClassHierarchy cha = ClassHierarchy.make(scope);\r
+ \r
+ Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+ AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+\r
+ // build the call graph\r
+ CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
+ CallGraph cg = cgb.makeCallGraph(options, null);\r
+ PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+\r
+ for (int i = 0; i < cg.getMaxNumber(); i++) {\r
+ CGNode node = cg.getNode(i);\r
+ DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
+ ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;\r
+ ModRef modRef = ModRef.make();\r
+ HeapExclusions exclusions = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
+ PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
+ \r
+ for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
+ Statement s1 = itr.next();\r
+ for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
+ Statement s2 = succs.next();\r
+// System.out.println(s1.toString() + " -> " + s2.toString());\r
+ }\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.function.Consumer;\r
+\r
+import com.ibm.wala.cfg.cdg.ControlDependenceGraph;\r
+import com.ibm.wala.classLoader.IClass;\r
+import com.ibm.wala.classLoader.IMethod;\r
+import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
+import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
+import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
+import com.ibm.wala.ipa.callgraph.impl.Everywhere;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ssa.IR;\r
+import com.ibm.wala.ssa.ISSABasicBlock;\r
+import com.ibm.wala.ssa.SSAInstruction;\r
+import com.ibm.wala.ssa.SSAOptions;\r
+import com.ibm.wala.types.MethodReference;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.debug.Assertions;\r
+import com.ibm.wala.util.graph.NumberedEdgeManager;\r
+import com.ibm.wala.util.io.FileProvider;\r
+import com.ibm.wala.util.strings.StringStuff;\r
+\r
+import demo.util.DemoUtil;\r
+\r
+public class ControlDependenceBasicBlockPeformance {\r
+\r
+ public static void main(String[] args) {\r
+ try {\r
+ String appJar = "bin/demo/testdata";\r
+ \r
+// AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+ ClassHierarchy cha = ClassHierarchy.make(scope);\r
+\r
+ for (Iterator<IClass> itr = cha.iterator(); itr.hasNext();) {\r
+ IClass c = itr.next();\r
+ for (IMethod m: c.getAllMethods()) {\r
+ AnalysisOptions options = new AnalysisOptions();\r
+ options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());\r
+ AnalysisCache cache = new AnalysisCache();\r
+ IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );\r
+ if (ir == null) {\r
+ Assertions.UNREACHABLE("Null IR for " + m);\r
+ }\r
+ ControlDependenceGraph<SSAInstruction, ISSABasicBlock> cdg = new ControlDependenceGraph<>(ir.getControlFlowGraph());\r
+ for (int i = 0; i < cdg.getMaxNumber(); i++) {\r
+ ISSABasicBlock b1 = cdg.getNode(i);\r
+ for (Iterator<ISSABasicBlock> succs = cdg.getSuccNodes(b1); succs.hasNext();) {\r
+ ISSABasicBlock b2 = succs.next();\r
+// System.out.println(b1.toString() + " -> " + b2.toString());\r
+ }\r
+ }\r
+ }\r
+ }\r
+// \r
+// MethodReference mr = StringStuff.makeMethodReference(methodSig);\r
+//\r
+// IMethod m = cha.resolveMethod(mr);\r
+// if (m == null) {\r
+// System.err.println("could not resolve " + mr);\r
+// throw new RuntimeException();\r
+// }\r
+// AnalysisOptions options = new AnalysisOptions();\r
+// options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());\r
+// AnalysisCache cache = new AnalysisCache();\r
+// IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );\r
+//\r
+// if (ir == null) {\r
+// Assertions.UNREACHABLE("Null IR for " + m);\r
+// }\r
+//\r
+// ControlDependenceGraph<SSAInstruction, ISSABasicBlock> cdg = new ControlDependenceGraph<>(ir.getControlFlowGraph());\r
+//\r
+// NumberedEdgeManager<ISSABasicBlock> manager = cdg.getEdgeManager();\r
+// for (Iterator<ISSABasicBlock> itr1 = cdg.iterator(); itr1.hasNext();) {\r
+// ISSABasicBlock b1 = itr1.next();\r
+// for (Iterator<ISSABasicBlock> itr2 = cdg.iterator(); itr2.hasNext();) {\r
+// ISSABasicBlock b2 = itr2.next();\r
+// if (manager.hasEdge(b1, b2)) {\r
+// StringBuilder sb = new StringBuilder();\r
+// b1.forEach(new Consumer<SSAInstruction>() {\r
+// @Override\r
+// public void accept(SSAInstruction t) {\r
+// sb.append(t.iindex);\r
+// sb.append(";");\r
+// }\r
+// });\r
+// sb.append(" -> ");\r
+// b2.forEach(new Consumer<SSAInstruction>() {\r
+// @Override\r
+// public void accept(SSAInstruction t) {\r
+// sb.append(t.iindex);\r
+// sb.append(";");\r
+// }\r
+// });\r
+// System.out.println(sb.toString());\r
+// }\r
+// }\r
+// }\r
+ \r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+}\r
+++ /dev/null
-package demo.wala;\r
-\r
-import java.util.Iterator;\r
-\r
-import com.ibm.wala.cfg.cdg.ControlDependenceGraph;\r
-import com.ibm.wala.classLoader.IMethod;\r
-import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;\r
-import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
-import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
-import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
-import com.ibm.wala.ipa.callgraph.impl.Everywhere;\r
-import com.ibm.wala.ipa.cha.ClassHierarchy;\r
-import com.ibm.wala.ssa.IR;\r
-import com.ibm.wala.ssa.ISSABasicBlock;\r
-import com.ibm.wala.ssa.SSAInstruction;\r
-import com.ibm.wala.ssa.SSAOptions;\r
-import com.ibm.wala.types.MethodReference;\r
-import com.ibm.wala.util.config.AnalysisScopeReader;\r
-import com.ibm.wala.util.debug.Assertions;\r
-import com.ibm.wala.util.io.FileProvider;\r
-import com.ibm.wala.util.strings.StringStuff;\r
-\r
-public class ControlDependencePeformance {\r
-\r
- public static void main(String[] args) {\r
- try {\r
- String appJar = "sample.jar";\r
- String methodSig = "demo.sample.Sample.main([Ljava/lang/String;)V";\r
- \r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
-\r
- ClassHierarchy cha = ClassHierarchy.make(scope);\r
-\r
- MethodReference mr = StringStuff.makeMethodReference(methodSig);\r
-\r
- IMethod m = cha.resolveMethod(mr);\r
- if (m == null) {\r
- System.err.println("could not resolve " + mr);\r
- throw new RuntimeException();\r
- }\r
- AnalysisOptions options = new AnalysisOptions();\r
- options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());\r
- AnalysisCache cache = new AnalysisCache();\r
- IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );\r
-\r
- if (ir == null) {\r
- Assertions.UNREACHABLE("Null IR for " + m);\r
- }\r
-\r
- System.err.println(ir.toString());\r
- ControlDependenceGraph<SSAInstruction, ISSABasicBlock> cdg = new ControlDependenceGraph<>(ir.getControlFlowGraph());\r
- System.out.println(cdg.toString());\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
-}\r
--- /dev/null
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
+import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
+import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
+import com.ibm.wala.ipa.callgraph.CGNode;\r
+import com.ibm.wala.ipa.callgraph.CallGraph;\r
+import com.ibm.wala.ipa.callgraph.CallGraphBuilder;\r
+import com.ibm.wala.ipa.callgraph.Entrypoint;\r
+import com.ibm.wala.ipa.callgraph.impl.Util;\r
+import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ipa.modref.ModRef;\r
+import com.ibm.wala.ipa.slicer.HeapExclusions;\r
+import com.ibm.wala.ipa.slicer.PDG;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
+import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.intset.OrdinalSet;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
+\r
+public class ControlDependencePerformance {\r
+\r
+ public static void main(String[] args) {\r
+ try {\r
+ long start = System.currentTimeMillis();\r
+ \r
+ String appJar = "bin/demo/testdata";\r
+// String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+ ClassHierarchy cha = ClassHierarchy.make(scope);\r
+ \r
+ Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+ AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+\r
+ // build the call graph\r
+ CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
+ CallGraph cg = cgb.makeCallGraph(options, null);\r
+// PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+ PointerAnalysis<InstanceKey> pa = null;\r
+\r
+ for (int i = 0; i < cg.getMaxNumber(); i++) {\r
+ CGNode node = cg.getNode(i);\r
+ DataDependenceOptions dOptions = DataDependenceOptions.NONE;\r
+ ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;\r
+ ModRef modRef = ModRef.make();\r
+ HeapExclusions exclusions = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
+ PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
+ \r
+ for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
+ Statement s1 = itr.next();\r
+ for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
+ Statement s2 = succs.next();\r
+// System.out.println(s1.toString() + " -> " + s2.toString());\r
+ }\r
+ }\r
+ }\r
+ \r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.out.println((end - start) + " [ms]");\r
+ System.out.println(MemoryInfo.getMemoryInfo());\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package demo.wala;\r
+\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
+import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
+import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
+import com.ibm.wala.ipa.callgraph.CGNode;\r
+import com.ibm.wala.ipa.callgraph.CallGraph;\r
+import com.ibm.wala.ipa.callgraph.CallGraphBuilder;\r
+import com.ibm.wala.ipa.callgraph.Entrypoint;\r
+import com.ibm.wala.ipa.callgraph.impl.Util;\r
+import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
+import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
+import com.ibm.wala.ipa.cha.ClassHierarchy;\r
+import com.ibm.wala.ipa.modref.ModRef;\r
+import com.ibm.wala.ipa.slicer.HeapExclusions;\r
+import com.ibm.wala.ipa.slicer.PDG;\r
+import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
+import com.ibm.wala.ipa.slicer.Statement;\r
+import com.ibm.wala.util.config.AnalysisScopeReader;\r
+import com.ibm.wala.util.intset.OrdinalSet;\r
+import com.ibm.wala.util.io.FileProvider;\r
+\r
+import demo.util.DemoUtil;\r
+import demo.util.MemoryInfo;\r
+\r
+public class DataDependencePerformance {\r
+\r
+ public static void main(String[] args) {\r
+ try {\r
+ long start = System.currentTimeMillis();\r
+ \r
+ String appJar = "bin/demo/testdata";\r
+// String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
+ ClassHierarchy cha = ClassHierarchy.make(scope);\r
+ \r
+ Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+ AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+\r
+ // build the call graph\r
+ CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
+ CallGraph cg = cgb.makeCallGraph(options, null);\r
+ PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
+\r
+ for (int i = 0; i < cg.getMaxNumber(); i++) {\r
+ CGNode node = cg.getNode(i);\r
+ DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
+ ControlDependenceOptions cOptions = ControlDependenceOptions.NONE;\r
+ ModRef modRef = ModRef.make();\r
+ HeapExclusions exclusions = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
+ PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
+ \r
+ for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
+ Statement s1 = itr.next();\r
+ for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
+ Statement s2 = succs.next();\r
+// System.out.println(s1.toString() + " -> " + s2.toString());\r
+ }\r
+ }\r
+ }\r
+ \r
+ long end = System.currentTimeMillis();\r
+ \r
+ System.out.println((end - start) + " [ms]");\r
+ System.out.println(MemoryInfo.getMemoryInfo());\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+}\r
package demo.wala;\r
\r
-import java.io.File;\r
import java.io.IOException;\r
import java.util.Collection;\r
import java.util.Iterator;\r
\r
import com.ibm.wala.classLoader.ShrikeBTMethod;\r
-import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;\r
import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
import com.ibm.wala.ipa.callgraph.CGNode;\r
import com.ibm.wala.ipa.callgraph.CallGraph;\r
-import com.ibm.wala.ipa.callgraph.CallGraphBuilder;\r
-import com.ibm.wala.ipa.callgraph.CallGraphBuilderCancelException;\r
import com.ibm.wala.ipa.callgraph.Entrypoint;\r
import com.ibm.wala.ipa.callgraph.impl.Util;\r
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
import com.ibm.wala.util.WalaException;\r
import com.ibm.wala.util.config.AnalysisScopeReader;\r
import com.ibm.wala.util.debug.Assertions;\r
+import com.ibm.wala.util.io.FileProvider;\r
import com.ibm.wala.util.strings.Atom;\r
\r
+import demo.util.DemoUtil;\r
+\r
public class SlicerMain {\r
\r
public static void main(String[] args) {\r
// create an analysis scope representing the appJar as a J2SE application\r
// AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar,CallGraphTestUtil.REGRESSION_EXCLUSIONS);\r
// AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, null);\r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar,new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+// AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar,new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+\r
ClassHierarchy cha = ClassHierarchy.make(scope);\r
\r
Iterable<Entrypoint> entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha);\r