| 1 19 20 25 26 27 package soot.coffi; 28 import soot.options.*; 29 30 import soot.*; 31 import java.util.*; 32 import soot.jimple.*; 33 34 public class CoffiMethodSource implements MethodSource 35 { 36 public ClassFile coffiClass; 37 public method_info coffiMethod; 38 39 CoffiMethodSource(soot.coffi.ClassFile coffiClass, soot.coffi.method_info coffiMethod) 40 { 41 this.coffiClass = coffiClass; 42 this.coffiMethod = coffiMethod; 43 } 44 45 public Body getBody(SootMethod m, String phaseName) 46 { 47 JimpleBody jb = Jimple.v().newBody(m); 48 49 Map options = PhaseOptions.v().getPhaseOptions(phaseName); 50 boolean useOriginalNames = PhaseOptions.getBoolean(options, "use-original-names"); 51 52 if(useOriginalNames) 53 soot.coffi.Util.v().setFaithfulNaming(true); 54 55 61 if(Options.v().verbose()) 62 G.v().out.println("[" + m.getName() + "] Constructing JimpleBody from coffi..."); 63 64 if(m.isAbstract() || m.isNative() || m.isPhantom()) 65 return jb; 66 67 if(Options.v().time()) 68 Timers.v().conversionTimer.start(); 69 70 if (coffiMethod == null) 71 G.v().out.println(m); 72 if(coffiMethod.instructions == null) 73 { 74 if(Options.v().verbose()) 75 G.v().out.println("[" + m.getName() + 76 "] Parsing Coffi instructions..."); 77 78 coffiClass.parseMethod(coffiMethod); 79 } 80 81 if(coffiMethod.cfg == null) 82 { 83 if(Options.v().verbose()) 84 G.v().out.println("[" + m.getName() + 85 "] Building Coffi CFG..."); 86 87 new soot.coffi.CFG(coffiMethod); 88 89 } 90 91 if(Options.v().verbose()) 92 G.v().out.println("[" + m.getName() + 93 "] Producing naive Jimple..."); 94 95 boolean oldPhantomValue = Scene.v().getPhantomRefs(); 96 97 Scene.v().setPhantomRefs(true); 98 coffiMethod.cfg.jimplify(coffiClass.constant_pool, 99 coffiClass.this_class, jb); 100 Scene.v().setPhantomRefs(oldPhantomValue); 101 102 if(Options.v().time()) 103 Timers.v().conversionTimer.end(); 104 105 coffiMethod.instructions = null; 106 coffiMethod.cfg = null; 107 coffiMethod.attributes = null; 108 coffiMethod.code_attr = null; 109 coffiMethod.jmethod = null; 110 coffiMethod.instructionList = null; 111 112 coffiMethod = null; 113 coffiClass = null; 114 115 PackManager.v().getPack("jb").apply(jb); 116 return jb; 117 } 118 } 119 | Popular Tags |