From eb482ad024ec704534f40ec31939e0383fe9a923 Mon Sep 17 00:00:00 2001 From: Dongjie Date: Thu, 17 Feb 2022 02:16:03 +1100 Subject: [PATCH] (1) refactor code (2) upgrade gradle to 7.4 (3) support gradle test --- build.gradle | 19 ++- gradle.properties | 1 + gradle/wrapper/gradle-wrapper.properties | 2 +- qilin.core/src/qilin/core/CorePTA.java | 10 +- qilin.core/src/qilin/core/PTA.java | 39 +---- .../qilin/core/builder/FakeMainFactory.java | 3 + .../qilin/core/builder/MethodNodeFactory.java | 13 +- qilin.core/src/qilin/core/pag/PAG.java | 8 +- qilin.core/src/qilin/stat/IEvaluator.java | 9 ++ qilin.core/src/qilin/stat/PTAEvaluator.java | 19 ++- qilin.core/src/qilin/stat/PointsToStat.java | 49 ++---- qilin.microben/README.md | 6 - qilin.microben/build.gradle | 7 + qilin.microben/build.xml | 18 --- qilin.pta/build.gradle | 3 +- qilin.pta/src/driver/Main.java | 3 +- qilin.pta/src/driver/PTAComparator.java | 2 +- qilin.pta/src/qilin/pta/tools/BasePTA.java | 39 +++++ qilin.pta/src/qilin/pta/tools/BeanPTA.java | 3 + .../src/qilin/pta/tools/ObjectSensPTA.java | 1 - .../pta/tools/PartialCallSiteSensPTA.java | 3 + .../qilin/pta/tools/PartialObjSensPTA.java | 3 + qilin.pta/src/qilin/pta/tools/ZipperPTA.java | 3 + qilin.pta/test/qilin/test/SummaryTests.java | 145 ------------------ .../test/qilin/test/util/JunitTests.java | 18 +-- 25 files changed, 146 insertions(+), 280 deletions(-) create mode 100644 gradle.properties create mode 100644 qilin.core/src/qilin/stat/IEvaluator.java delete mode 100644 qilin.microben/README.md delete mode 100644 qilin.microben/build.xml delete mode 100644 qilin.pta/test/qilin/test/SummaryTests.java diff --git a/build.gradle b/build.gradle index 734633b..3434c94 100644 --- a/build.gradle +++ b/build.gradle @@ -11,16 +11,21 @@ plugins { group 'qilin' version '1.0-SNAPSHOT' -sourceCompatibility = 16 + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(16) + } +} repositories { mavenCentral() } dependencies { + implementation(project(':qilin.microben')) implementation(project(':qilin.pta')) implementation(project(':qilin.core')) - implementation(project(':qilin.microben')) implementation(project(':qilin.util')) testImplementation group: 'junit', name: 'junit', version: '4.12' } @@ -50,10 +55,6 @@ subprojects { group rootProject.group version rootProject.version -// sourceCompatibility = 11 - sourceCompatibility = 16 - - task sourcesJar(type: Jar) { archiveClassifier.set('sources') from sourceSets.main.allJava @@ -64,6 +65,12 @@ subprojects { from javadoc.destinationDir } + java { + toolchain { + languageVersion = JavaLanguageVersion.of(16) + vendor = JvmVendorSpec.ADOPTIUM + } + } publishing.publications { qilin(MavenPublication) { from components.java diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..2f97daf --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.java.installations.auto-download=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 01e0bda..5fbd867 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip diff --git a/qilin.core/src/qilin/core/CorePTA.java b/qilin.core/src/qilin/core/CorePTA.java index 4b53a41..bb0a53a 100644 --- a/qilin.core/src/qilin/core/CorePTA.java +++ b/qilin.core/src/qilin/core/CorePTA.java @@ -41,7 +41,7 @@ public abstract class CorePTA extends PTA { protected CtxSelector ctxSel; protected HeapAbstractor heapAbst; - public CtxSelector getContextSelector() { + public CtxSelector ctxSelector() { return ctxSel; } @@ -53,6 +53,11 @@ public HeapAbstractor heapAbstractor() { return heapAbst; } + public CtxConstructor ctxConstructor() { + return ctxCons; + } + + public abstract Propagator getPropagator(); @Override @@ -226,7 +231,8 @@ public PointsToSet reachingObjects(SootField f) { public PointsToSet reachingObjectsInternal(PointsToSet s, final SparkField f) { PointsToSetInternal bases = (PointsToSetInternal) s; - final PointsToSetInternal ret = setFactory.newSet((f instanceof SootField) ? ((SootField) f).getType() : null, pag); + final PointsToSetInternal ret = setFactory.newSet((f instanceof SootField) ? ((SootField) f).getType() : null, + pag); for (ContextField contextField : pag.getContextFieldVarNodeMap().getOrDefault(f, Collections.emptyMap()).values()) { AllocNode base = contextField.getBase(); if (bases.contains(base)) { diff --git a/qilin.core/src/qilin/core/PTA.java b/qilin.core/src/qilin/core/PTA.java index 1d1f3a4..1c0aa59 100644 --- a/qilin.core/src/qilin/core/PTA.java +++ b/qilin.core/src/qilin/core/PTA.java @@ -31,6 +31,7 @@ import qilin.core.solver.Propagator; import qilin.parm.ctxcons.CtxConstructor; import qilin.parm.heapabst.HeapAbstractor; +import qilin.parm.select.CtxSelector; import qilin.stat.PTAEvaluator; import qilin.util.PTAUtils; import soot.Context; @@ -53,13 +54,11 @@ public abstract class PTA implements PointsToAnalysis { protected CallGraphBuilder cgb; protected ExceptionHandler eh; protected P2SetFactory setFactory; - protected PTAEvaluator evaluator; public PTA() { this.pag = createPAG(); this.cgb = createCallGraphBuilder(); this.eh = new ExceptionHandler(this); - this.evaluator = new PTAEvaluator(this); AllocNode rootBase = new AllocNode(pag, "ROOT", RefType.v("java.lang.Object"), null); this.rootNode = new ContextAllocNode(pag, rootBase, CtxConstructor.emptyContext); P2SetFactory oldF = HybridPointsToSet.getFactory(); @@ -71,47 +70,22 @@ public PTA() { protected abstract CallGraphBuilder createCallGraphBuilder(); + public void run() { + pureRun(); + } + public void pureRun() { - for (int i = 0; i < 5; i++) { - System.gc(); - } Date startProp = new Date(); getPropagator().propagate(); Date endProp = new Date(); reportTime("Points-to resolution:", startProp, endProp); } - private void dumpStats() { - if (CoreConfig.v().getOutConfig().dumppts) { - PTAUtils.dumpPts(this, !CoreConfig.v().getOutConfig().dumplibpts); - } - if (CoreConfig.v().getOutConfig().dumpCallGraph) - PTAUtils.dumpSlicedCallGraph(getCallGraph(), - parameterize(PTAScene.v().getMethod(""), emptyContext())); - if (CoreConfig.v().getOutConfig().dumppag) { - PTAUtils.dumpPAG(pag, "final_pag"); - PTAUtils.dumpMPAGs(this, "mpags"); - PTAUtils.dumpNodeNames("nodeNames"); - } - } - private static void reportTime(String desc, Date start, Date end) { long time = end.getTime() - start.getTime(); logger.info("[PTA] " + desc + " in " + time / 1000 + "." + (time / 100) % 10 + " seconds."); } - public void run() { - evaluator.begin(); - pureRun(); - evaluator.end(); - dumpStats(); - pag.dumpPagStructureSize(); - } - - public PTAEvaluator evaluator() { - return this.evaluator; - } - public PAG getPag() { return pag; } @@ -165,4 +139,7 @@ public Collection getNakedReachableMethods() { public abstract HeapAbstractor heapAbstractor(); + public abstract CtxConstructor ctxConstructor(); + + public abstract CtxSelector ctxSelector(); } diff --git a/qilin.core/src/qilin/core/builder/FakeMainFactory.java b/qilin.core/src/qilin/core/builder/FakeMainFactory.java index e5afa23..4fb29d1 100644 --- a/qilin.core/src/qilin/core/builder/FakeMainFactory.java +++ b/qilin.core/src/qilin/core/builder/FakeMainFactory.java @@ -103,6 +103,9 @@ private void makeFakeMain() { } } } + if (CoreConfig.v().getPtaConfig().singleentry) { + return; + } Value sv = getNextLocal(RefType.v("java.lang.String")); Value mainThread = getNew(RefType.v("java.lang.Thread")); Value mainThreadGroup = getNew(RefType.v("java.lang.ThreadGroup")); diff --git a/qilin.core/src/qilin/core/builder/MethodNodeFactory.java b/qilin.core/src/qilin/core/builder/MethodNodeFactory.java index fc249a5..a381a30 100644 --- a/qilin.core/src/qilin/core/builder/MethodNodeFactory.java +++ b/qilin.core/src/qilin/core/builder/MethodNodeFactory.java @@ -236,17 +236,14 @@ final public void caseNewExpr(NewExpr ne) { @Override final public void caseNewMultiArrayExpr(NewMultiArrayExpr nmae) { ArrayType type = (ArrayType) nmae.getType(); + type = (ArrayType) type.getElementType(); int pos = 0; - AllocNode prevAn = pag.heapAbstractor().abstractHeap(new JNewArrayExpr(type, nmae.getSize(pos)), type, method); + AllocNode prevAn = pag.heapAbstractor().abstractHeap(new JNewArrayExpr(type, nmae.getSize(pos)), nmae.getType(), method); VarNode prevVn = pag.makeLocalVarNode(prevAn.getNewExpr(), prevAn.getType(), method); mpag.addInternalEdge(prevAn, prevVn); // new setResult(prevAn); while (true) { Type t = type.getElementType(); - if (!(t instanceof ArrayType)) { - break; - } - type = (ArrayType) t; ++pos; Value sizeVal; if (pos < nmae.getSizeCount()) { @@ -254,11 +251,15 @@ final public void caseNewMultiArrayExpr(NewMultiArrayExpr nmae) { } else { sizeVal = IntConstant.v(1); } - AllocNode an = pag.heapAbstractor().abstractHeap(new JNewArrayExpr(type, sizeVal), type, method); + AllocNode an = pag.heapAbstractor().abstractHeap(new JNewArrayExpr(t, sizeVal), type, method); VarNode vn = pag.makeLocalVarNode(an.getNewExpr(), an.getType(), method); mpag.addInternalEdge(an, vn); // new mpag.addInternalEdge(vn, pag.makeFieldRefNode(prevVn, ArrayElement.v())); // store prevVn = vn; + if (!(t instanceof ArrayType)) { + break; + } + type = (ArrayType) t; } } diff --git a/qilin.core/src/qilin/core/pag/PAG.java b/qilin.core/src/qilin/core/pag/PAG.java index e8fd757..661ebfb 100644 --- a/qilin.core/src/qilin/core/pag/PAG.java +++ b/qilin.core/src/qilin/core/pag/PAG.java @@ -315,7 +315,7 @@ protected boolean addToMap(Map> m, K key, V value) { return valueList.add(value); } - public boolean addAllocEdge(AllocNode from, VarNode to) { + private boolean addAllocEdge(AllocNode from, VarNode to) { if (addToMap(alloc, from, to)) { addToMap(allocInv, to, from); return true; @@ -323,7 +323,7 @@ public boolean addAllocEdge(AllocNode from, VarNode to) { return false; } - public boolean addSimpleEdge(ValNode from, ValNode to) { + private boolean addSimpleEdge(ValNode from, ValNode to) { if (addToMap(simple, from, to)) { addToMap(simpleInv, to, from); return true; @@ -331,7 +331,7 @@ public boolean addSimpleEdge(ValNode from, ValNode to) { return false; } - public boolean addStoreEdge(VarNode from, FieldRefNode to) { + private boolean addStoreEdge(VarNode from, FieldRefNode to) { if (addToMap(storeInv, to, from)) { addToMap(store, from, to); return true; @@ -339,7 +339,7 @@ public boolean addStoreEdge(VarNode from, FieldRefNode to) { return false; } - public boolean addLoadEdge(FieldRefNode from, VarNode to) { + private boolean addLoadEdge(FieldRefNode from, VarNode to) { if (addToMap(load, from, to)) { addToMap(loadInv, to, from); return true; diff --git a/qilin.core/src/qilin/stat/IEvaluator.java b/qilin.core/src/qilin/stat/IEvaluator.java new file mode 100644 index 0000000..dc69afb --- /dev/null +++ b/qilin.core/src/qilin/stat/IEvaluator.java @@ -0,0 +1,9 @@ +package qilin.stat; + +public interface IEvaluator { + int GB = 1024 * 1024 * 1024; + + void begin(); + + void end(); +} diff --git a/qilin.core/src/qilin/stat/PTAEvaluator.java b/qilin.core/src/qilin/stat/PTAEvaluator.java index 95dfc2e..d19a913 100644 --- a/qilin.core/src/qilin/stat/PTAEvaluator.java +++ b/qilin.core/src/qilin/stat/PTAEvaluator.java @@ -33,12 +33,10 @@ * target methods) - Number of pointers (local and global) - Total points to * sets size (local and global) context insensitive (convert to alloc site) */ -public class PTAEvaluator { - - private static final int GB = 1024 * 1024 * 1024; - private final RuntimeStat runtimeStat; - private final Exporter exporter; - private final PTA pta; +public class PTAEvaluator implements IEvaluator { + protected final RuntimeStat runtimeStat; + protected final Exporter exporter; + protected final PTA pta; public PTAEvaluator(PTA pta) { this.pta = pta; @@ -49,6 +47,7 @@ public PTAEvaluator(PTA pta) { /** * Note the start of a qilin.pta run. */ + @Override public void begin() { Runtime runtime = Runtime.getRuntime();// Getting the runtime reference // from system @@ -62,9 +61,14 @@ public void begin() { runtimeStat.begin(); } + protected PointsToStat createPointsToStat() { + return new PointsToStat(pta); + } + /** * Note the end of a qilin.pta run. */ + @Override public void end() { // done with processing runtimeStat.end(); @@ -75,7 +79,7 @@ public void end() { BenchmarkStat benchmarkStat = new BenchmarkStat(pta); CallGraphStat callGraphStat = new CallGraphStat(pta); TypeClientStat typeClientStat = new TypeClientStat(pta); - PointsToStat ptsStat = new PointsToStat(pta); + PointsToStat ptsStat = createPointsToStat(); YummyStat yummyStat = new YummyStat(pta); runtimeStat.export(exporter); // memory stats @@ -101,6 +105,7 @@ public void end() { } + @Override public String toString() { return exporter.report(); } diff --git a/qilin.core/src/qilin/stat/PointsToStat.java b/qilin.core/src/qilin/stat/PointsToStat.java index 947ea47..5b2d804 100644 --- a/qilin.core/src/qilin/stat/PointsToStat.java +++ b/qilin.core/src/qilin/stat/PointsToStat.java @@ -91,15 +91,23 @@ public PointsToStat(PTA pta) { "" ); + protected Set getPointsToNewExpr(PointsToSetInternal pts) { + final Set allocSites = new HashSet<>(); + pts.forall(new P2SetVisitor() { + public void visit(Node n) { + allocSites.add(((AllocNode) n).getNewExpr()); + } + }); + return allocSites; + } + private void init() { ciAllocs = pag.getAllocNodes().size(); csAllocs = pag.getAlloc().keySet().size(); // globals - for (Object global : pag.getGlobalPointers()) { + for (SootField global : pag.getGlobalPointers()) { try { - if (!(global instanceof SootField)) - continue; - if (!((SootField) global).isStatic()) + if (!global.isStatic()) continue; GlobalVarNode gvn = pag.findGlobalVarNode(global); boolean app = gvn.getDeclaringClass().isApplicationClass(); @@ -109,14 +117,8 @@ private void init() { appGlobalPointers++; } - final Set allocSites = new HashSet<>(); - PointsToSetInternal pts = (PointsToSetInternal) pta.reachingObjects(gvn); - pts.forall(new P2SetVisitor() { - public void visit(Node n) { - allocSites.add(((AllocNode) n).getNewExpr()); - } - }); + final Set allocSites = getPointsToNewExpr(pts); totalGlobalPointsToCi += allocSites.size(); totalGlobalPointsToCs += pts.size(); @@ -151,14 +153,9 @@ public void visit(Node n) { appLocalPointersCs += varNodes.size(); } - final Set allocSites = new HashSet<>(); + PointsToSetInternal pts = (PointsToSetInternal) pta.reachingObjects(local); - pts.forall(new P2SetVisitor() { - @Override - public void visit(Node n) { - allocSites.add(((AllocNode) n).getNewExpr()); - } - }); + final Set allocSites = getPointsToNewExpr(pts); // if (lvn.getMethod().toString().equals("")) { // System.out.println("hello2333:" + lvn + lvn.getType()); // pts.forall(new P2SetVisitor() { @@ -178,14 +175,8 @@ public void visit(Node n) { } for (VarNode cvn : varNodes) { - final Set callocSites = new HashSet<>(); PointsToSetInternal cpts = (PointsToSetInternal) pta.reachingObjects(cvn); - cpts.forall(new P2SetVisitor() { - @Override - public void visit(Node n) { - callocSites.add(((AllocNode) n).getNewExpr()); - } - }); + final Set callocSites = getPointsToNewExpr(cpts); totalLocalCsToCi += callocSites.size(); totalLocalCsToCs += cpts.size(); if (app) { @@ -250,14 +241,8 @@ public void visit(Node n) { tmp.add(lvn); continue; } - final Set callocSites = new HashSet<>(); PointsToSetInternal cpts = (PointsToSetInternal) pta.reachingObjects(lvn); - cpts.forall(new P2SetVisitor() { - @Override - public void visit(Node n) { - callocSites.add(((AllocNode) n).getNewExpr()); - } - }); + final Set callocSites = getPointsToNewExpr(cpts); if (callocSites.size() > 0) { ptsCnt += callocSites.size(); varCnt++; diff --git a/qilin.microben/README.md b/qilin.microben/README.md deleted file mode 100644 index b6f0bcb..0000000 --- a/qilin.microben/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Qilin's Micro Benchmarks - -## Build - -To build the test cases in this project, please use `ant` command. -The javac version must be `<= 1.8`. \ No newline at end of file diff --git a/qilin.microben/build.gradle b/qilin.microben/build.gradle index 7608cf2..b386522 100644 --- a/qilin.microben/build.gradle +++ b/qilin.microben/build.gradle @@ -5,6 +5,13 @@ plugins { group 'qilin' version '1.0-SNAPSHOT' +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + vendor = JvmVendorSpec.ADOPTIUM + } +} + repositories { mavenCentral() } diff --git a/qilin.microben/build.xml b/qilin.microben/build.xml deleted file mode 100644 index 8566ded..0000000 --- a/qilin.microben/build.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/qilin.pta/build.gradle b/qilin.pta/build.gradle index 6a5e2c1..9f5dab8 100644 --- a/qilin.pta/build.gradle +++ b/qilin.pta/build.gradle @@ -17,14 +17,13 @@ repositories { } } -sourceCompatibility = 16 - test { useJUnit() maxHeapSize = '30G' } dependencies { + api(project(':qilin.microben')) api(project(':qilin.core')) // https://mvnrepository.com/artifact/commons-cli/commons-cli implementation group: 'commons-cli', name: 'commons-cli', version: '1.2' diff --git a/qilin.pta/src/driver/Main.java b/qilin.pta/src/driver/Main.java index beec1a4..010da2c 100644 --- a/qilin.pta/src/driver/Main.java +++ b/qilin.pta/src/driver/Main.java @@ -56,8 +56,7 @@ public static void mainRun(String[] args) { long pid = ProcessHandle.current().pid(); MemoryWatcher memoryWatcher = new MemoryWatcher(pid, "Main PTA"); memoryWatcher.start(); - PTA pta = run(args); - System.out.println(pta.evaluator()); + run(args); ptaTimer.stop(); System.out.println(ptaTimer); memoryWatcher.stop(); diff --git a/qilin.pta/src/driver/PTAComparator.java b/qilin.pta/src/driver/PTAComparator.java index a786e71..12d812d 100644 --- a/qilin.pta/src/driver/PTAComparator.java +++ b/qilin.pta/src/driver/PTAComparator.java @@ -52,7 +52,7 @@ public static void runCompare(String[] args, String ptaPtn1, String ptaPtn2) { comparator.record(Main.run(ptaArg1)); PTAConfig.v().getPtaConfig().ptaPattern = new PTAPattern(ptaPtn2); PTA pta = PTAFactory.createPTA(PTAConfig.v().getPtaConfig().ptaPattern); - pta.run(); + pta.pureRun(); comparator.compare(pta); comparator.out.close(); count = comparator.count; diff --git a/qilin.pta/src/qilin/pta/tools/BasePTA.java b/qilin.pta/src/qilin/pta/tools/BasePTA.java index 75ff1a6..6f4b982 100644 --- a/qilin.pta/src/qilin/pta/tools/BasePTA.java +++ b/qilin.pta/src/qilin/pta/tools/BasePTA.java @@ -1,12 +1,27 @@ package qilin.pta.tools; +import qilin.CoreConfig; import qilin.core.CorePTA; +import qilin.core.PTAScene; import qilin.core.builder.CallGraphBuilder; import qilin.core.pag.PAG; import qilin.core.solver.Propagator; import qilin.core.solver.Solver; +import qilin.stat.IEvaluator; +import qilin.stat.PTAEvaluator; +import qilin.util.PTAUtils; public class BasePTA extends CorePTA { + protected IEvaluator evaluator; + + public BasePTA() { + this.evaluator = new PTAEvaluator(this); + } + + public IEvaluator evaluator() { + return this.evaluator; + } + @Override protected PAG createPAG() { return new PAG(this); @@ -21,4 +36,28 @@ protected CallGraphBuilder createCallGraphBuilder() { public Propagator getPropagator() { return new Solver(this); } + + @Override + public void run() { + evaluator.begin(); + pureRun(); + evaluator.end(); + dumpStats(); + pag.dumpPagStructureSize(); + System.out.println(evaluator()); + } + + protected void dumpStats() { + if (CoreConfig.v().getOutConfig().dumppts) { + PTAUtils.dumpPts(this, !CoreConfig.v().getOutConfig().dumplibpts); + } + if (CoreConfig.v().getOutConfig().dumpCallGraph) + PTAUtils.dumpSlicedCallGraph(getCallGraph(), + parameterize(PTAScene.v().getMethod(""), emptyContext())); + if (CoreConfig.v().getOutConfig().dumppag) { + PTAUtils.dumpPAG(pag, "final_pag"); + PTAUtils.dumpMPAGs(this, "mpags"); + PTAUtils.dumpNodeNames("nodeNames"); + } + } } diff --git a/qilin.pta/src/qilin/pta/tools/BeanPTA.java b/qilin.pta/src/qilin/pta/tools/BeanPTA.java index 8a16131..a5dd07d 100644 --- a/qilin.pta/src/qilin/pta/tools/BeanPTA.java +++ b/qilin.pta/src/qilin/pta/tools/BeanPTA.java @@ -73,6 +73,9 @@ public void run() { System.out.println(beanTimer); if (!PTAConfig.v().getPtaConfig().preAnalysisOnly) { System.out.println("selective cs-pta starts!"); + for (int i = 0; i < 5; i++) { + System.gc(); + } super.run(); } } diff --git a/qilin.pta/src/qilin/pta/tools/ObjectSensPTA.java b/qilin.pta/src/qilin/pta/tools/ObjectSensPTA.java index df2d137..2a5147a 100644 --- a/qilin.pta/src/qilin/pta/tools/ObjectSensPTA.java +++ b/qilin.pta/src/qilin/pta/tools/ObjectSensPTA.java @@ -18,7 +18,6 @@ package qilin.pta.tools; -import qilin.core.CorePTA; import qilin.parm.ctxcons.ObjCtxConstructor; import qilin.parm.heapabst.AllocSiteAbstractor; import qilin.parm.heapabst.HeuristicAbstractor; diff --git a/qilin.pta/src/qilin/pta/tools/PartialCallSiteSensPTA.java b/qilin.pta/src/qilin/pta/tools/PartialCallSiteSensPTA.java index a659a02..0bd536d 100644 --- a/qilin.pta/src/qilin/pta/tools/PartialCallSiteSensPTA.java +++ b/qilin.pta/src/qilin/pta/tools/PartialCallSiteSensPTA.java @@ -76,6 +76,9 @@ public void run() { extraStats(); if (!PTAConfig.v().getPtaConfig().preAnalysisOnly) { System.out.println("selective cs-qilin.pta starts!"); + for (int i = 0; i < 5; i++) { + System.gc(); + } super.run(); } } diff --git a/qilin.pta/src/qilin/pta/tools/PartialObjSensPTA.java b/qilin.pta/src/qilin/pta/tools/PartialObjSensPTA.java index b92f45f..270ba8b 100644 --- a/qilin.pta/src/qilin/pta/tools/PartialObjSensPTA.java +++ b/qilin.pta/src/qilin/pta/tools/PartialObjSensPTA.java @@ -75,6 +75,9 @@ public void run() { extraStats(); if (!PTAConfig.v().getPtaConfig().preAnalysisOnly) { System.out.println("selective cs-qilin.pta starts!"); + for (int i = 0; i < 5; i++) { + System.gc(); + } super.run(); } } diff --git a/qilin.pta/src/qilin/pta/tools/ZipperPTA.java b/qilin.pta/src/qilin/pta/tools/ZipperPTA.java index b114d4f..aa1f3b2 100644 --- a/qilin.pta/src/qilin/pta/tools/ZipperPTA.java +++ b/qilin.pta/src/qilin/pta/tools/ZipperPTA.java @@ -79,6 +79,9 @@ public void run() { extraStats(); if (!PTAConfig.v().getPtaConfig().preAnalysisOnly) { System.out.println("selective cs-qilin.pta starts!"); + for (int i = 0; i < 5; i++) { + System.gc(); + } super.run(); } } diff --git a/qilin.pta/test/qilin/test/SummaryTests.java b/qilin.pta/test/qilin/test/SummaryTests.java deleted file mode 100644 index 891c36c..0000000 --- a/qilin.pta/test/qilin/test/SummaryTests.java +++ /dev/null @@ -1,145 +0,0 @@ -package qilin.test; - -import driver.Main; -import org.junit.Test; -import qilin.test.util.JunitTests; - -public class SummaryTests extends JunitTests { - - @Override - public String[] generateArguments(String mainClass) { - return generateArguments(mainClass, "sum-insens"); - } - - @Test - public void testArrays() { - String[] args = generateArguments("qilin.microben.summary.Array"); - checkAssertions(Main.run(args)); - } - -// @Test -// public void testBug() { -// String[] args = generateArguments("qilin.microben.summary.Bug"); -// checkAssertions(Main.run(args)); -// } - - @Test - public void testCallback() { - String[] args = generateArguments("qilin.microben.summary.Callback"); - checkAssertions(Main.run(args)); - } - - @Test - public void testCast() { - String[] args = generateArguments("qilin.microben.summary.Cast"); - checkAssertions(Main.run(args)); - } - - @Test - public void testCommonAlloc() { - String[] args = generateArguments("qilin.microben.summary.CommonAlloc"); - checkAssertions(Main.run(args)); - } - - @Test - public void testCommonCall() { - String[] args = generateArguments("qilin.microben.summary.CommonCall"); - checkAssertions(Main.run(args)); - } - - @Test - public void testConstant() { - String[] args = generateArguments("qilin.microben.summary.Constant"); - checkAssertions(Main.run(args)); - } - - @Test - public void testCSAlloc() { - String[] args = generateArguments("qilin.microben.summary.CSAlloc"); - checkAssertions(Main.run(args)); - } - - @Test - public void testDynamic() { - String[] args = generateArguments("qilin.microben.summary.Dynamic"); - checkAssertions(Main.run(args)); - } - - @Test - public void testException() { - String[] args = generateArguments("qilin.microben.summary.Exception"); - checkAssertions(Main.run(args)); - } - - @Test - public void testGetter() { - String[] args = generateArguments("qilin.microben.summary.Getter"); - checkAssertions(Main.run(args)); - } - - @Test - public void testGlobal() { - String[] args = generateArguments("qilin.microben.summary.Global"); - checkAssertions(Main.run(args)); - } - - @Test - public void testId() { - String[] args = generateArguments("qilin.microben.summary.Id"); - checkAssertions(Main.run(args)); - } - - @Test - public void testId2() { - String[] args = generateArguments("qilin.microben.summary.Id2"); - checkAssertions(Main.run(args)); - } - - @Test - public void testId_V() { - String[] args = generateArguments("qilin.microben.summary.Id_V"); - checkAssertions(Main.run(args)); - } - - @Test - public void testInnerVirtual() { - String[] args = generateArguments("qilin.microben.summary.InnerVirtual"); - checkAssertions(Main.run(args)); - } - - @Test - public void testLoadCycle() { - String[] args = generateArguments("qilin.microben.summary.LoadCycle"); - checkAssertions(Main.run(args)); - } - - @Test - public void testMerged() { - String[] args = generateArguments("qilin.microben.summary.Merged"); - checkAssertions(Main.run(args)); - } - - @Test - public void testMultiArray() { - String[] args = generateArguments("qilin.microben.summary.MultiArray"); - checkAssertions(Main.run(args)); - } - - @Test - public void testPartialDynamic() { - String[] args = generateArguments("qilin.microben.summary.PartialDynamic"); - checkAssertions(Main.run(args)); - } - - @Test - public void testReturnCycle() { - String[] args = generateArguments("qilin.microben.summary.ReturnCycle"); - checkAssertions(Main.run(args)); - } - - @Test - public void testSetter() { - String[] args = generateArguments("qilin.microben.summary.Setter"); - checkAssertions(Main.run(args)); - } -} diff --git a/qilin.pta/test/qilin/test/util/JunitTests.java b/qilin.pta/test/qilin/test/util/JunitTests.java index f2e823f..2c0feca 100644 --- a/qilin.pta/test/qilin/test/util/JunitTests.java +++ b/qilin.pta/test/qilin/test/util/JunitTests.java @@ -36,7 +36,7 @@ public abstract class JunitTests { @BeforeClass public static void setUp() throws IOException { File rootDir = new File("../"); - File testDir = new File(rootDir, "qilin.microben" + File.separator + "classes"); + File testDir = new File(rootDir, "qilin.microben" + File.separator + "build" + File.separator + "classes" + File.separator + "java" + File.separator + "main"); appPath = testDir.getCanonicalPath(); System.out.println(appPath); File refLogDir = new File(rootDir, "src" + File.separator + "qilin" + File.separator + "microben" + File.separator + "core" + File.separator + "reflog"); @@ -44,21 +44,6 @@ public static void setUp() throws IOException { File jreFile = new File(".." + File.separator + "artifact" + File.separator + "pta" + File.separator + "lib" + File.separator + "jre" + File.separator + "jre1.6.0_45"); jrePath = jreFile.getCanonicalPath(); -// ptaPattern = "e-3o"; -// ptaPattern = "2c"; -// ptaPattern = "insens"; -// ptaPattern = "1c"; -// ptaPattern = "2t"; -// ptaPattern = "2o"; -// ptaPattern = "3o"; -// ptaPattern = "1o"; -// ptaPattern = "2h"; -// ptaPattern = "j-ci"; -// ptaPattern = "m-ci"; -// ptaPattern = "p-ci"; -// ptaPattern = "a-3o"; -// ptaPattern = "n-3h"; -// ptaPattern = "E-2o"; } @Before @@ -83,6 +68,7 @@ public String[] generateArguments(String mainClass, String ptaPattern) { "-pta=" + ptaPattern, "-apppath", appPath, + "-se", "-mainclass", mainClass, "-jre=" + jrePath, "-clinit=ONFLY",