[Soot-list] Spark Points-to analysis

Eric Bodden eric.bodden at mail.mcgill.ca
Wed Jul 18 23:47:15 EDT 2007


But that bug is in your code! "options" is an unmodifiable map, as the
exception says... So better make a copy of it.

Eric

On 18/07/07, Armand Navabi <anavabi at purdue.edu> wrote:
> Eric,
>
> Thanks for your help, but that didn't work either.  It takes a long time
> and then I get the following exception.
>
> ~/soot/trunk$ java -Xmx512m analysis.pointsto.SparkExample
> analysis.examples.PointsToExample
> Soot started on Wed Jul 18 20:43:30 EDT 2007
> [Call Graph] For information on where the call graph may be incomplete,
> use the verbose option to the cg phase.
> [Spark] Pointer Assignment Graph in 5.5 seconds.
> [Spark] Type masks in 0.8 seconds.
> [Spark] Pointer Graph simplified in 0.0 seconds.
> [Spark] Propagation in 120.6 seconds.
> [Spark] Solution found in 120.7 seconds.
> Exception in thread "main" java.lang.UnsupportedOperationException
>         at java.util.Collections$UnmodifiableMap.put(Collections.java:1285)
>         at
> analysis.pointsto.SparkExample$1.internalTransform(SparkExample.java:50)
>         at soot.SceneTransformer.transform(SceneTransformer.java:39)
>         at soot.Transform.apply(Transform.java:89)
>         ...
>
> Here is my code:
> public class SparkExample
> {
>   public static void main(String[] args) {
>     List<String>  sootArgs = new LinkedList(Arrays.asList(args));
>
>     //enable whole program mode
>     sootArgs.add("-W");
>     sootArgs.add("-p");
>     sootArgs.add("wjop");
>     sootArgs.add("enabled:true");
>
>     //enable points-to analysis
>     sootArgs.add("-p");
>     sootArgs.add("cg");
>     sootArgs.add("enabled:true");
>
>     //enable Spark
>     sootArgs.add("-p");
>     sootArgs.add("cg.spark");
>     sootArgs.add("enabled:true");
>
>     String[] argsArray = sootArgs.toArray(new String[0]);
>
>     PackManager.v().getPack("wjop").add(new
>      Transform("wjop.mytrans",new SceneTransformer() {
>          protected void internalTransform(String phaseName, Map options) {
>            //set the PointsToAnalysis with phase options
>            options.put("verbose", "true");
>            options.put("propagator", "worklist");
>            options.put("simple-edges-bidirectional", "false");
>            options.put("on-fly-cg", "true");
>            options.put("set-impl", "hybrid");
>            options.put("double-set-old", "hybrid");
>            options.put("double-set-new", "hybrid");
>           SparkTransformer.v().transform("",options);
>          }
>        }));
>     soot.Main.main(argsArray);
>   }
> }
>
> Thanks,
> Armand
>
> Eric Bodden wrote:
> > You want to do something like this here:
> >
> >     public static void main(String[] args) {
> >          List<String>  sootArgs = new LinkedList(Arrays.asList(args));
> >
> >          //enable whole program mode
> >          sootArgs.add("-W");
> >          sootArgs.add("-p");
> >          sootArgs.add("wjop");
> >          sootArgs.add("enabled:true");
> >
> >          //enable points-to analysis
> >          sootArgs.add("-p");
> >          sootArgs.add("cg");
> >          sootArgs.add("enabled:true");
> >
> >          //enable Spark
> >          sootArgs.add("-p");
> >          sootArgs.add("cg.spark");
> >          sootArgs.add("enabled:true");
> >
> >
> >          String[] argsArray = sootArgs.toArray(new String[0]);
> >
> >          PackManager.v().getPack("wjop").add(new
> > Transform("wjop.mytrans",new SceneTransformer() {
> >
> >            protected void internalTransform(String phaseName, Map
> > options) {
> >         // your stuff here
> >            }
> >
> >          }));
> >
> >          soot.Main.main(argsArray);
> >      }
> >
> > On 18/07/07, Eric Bodden <eric.bodden at mail.mcgill.ca> wrote:
> >> I think you never call soot.Main.main(args); - do you? Also, you might
> >> want to use the -w option.
> >>
> >> Eric
> >>
> >> On 18/07/07, Armand Navabi <anavabi at purdue.edu> wrote:
> >> > I am trying to use Soot's points-to analysis. I figured the best place
> >> > to go is the survivor's guide Points-to Analysis chapter
> >> > (http://www.brics.dk/~mis/soot.pdf).  There they have an example
> >> that I
> >> > have implemented.  In the example verbose option is set to true.  I
> >> > think this is what makes it print out information as the analysis goes
> >> > along, except that when I run mine nothing prints out.  Below is the
> >> > code.  I am running the program like this:
> >> > java -Xmx512m -Xss256m analysis.pointsto.SparkExample
> >> > Perhaps I need extra command line arguments to Soot?
> >> >
> >> > public class SparkExample
> >> > {
> >> >   private static SootClass loadClass(String name, boolean main) {
> >> >     SootClass c = Scene.v().loadClassAndSupport(name);
> >> >     c.setApplicationClass();
> >> >     if(main) Scene.v().setMainClass(c);
> >> >     return c;
> >> >   }
> >> >
> >> >   public static void main(String[] args)
> >> >   {
> >> >     loadClass("analysis.pointsto.Item", false);
> >> >     loadClass("analysis.pointsto.Container", false);
> >> >     SootClass c = loadClass("analysis.pointsto.SparkExample", true);
> >> >
> >> >     Map options = new HashMap();
> >> >     options.put("verbose", "true");
> >> >     options.put("propagator", "worklist");
> >> >     options.put("simple-edges-bidirectional", "false");
> >> >     options.put("on-fly-cg", "true");
> >> >     options.put("set-impl", "hybrid");
> >> >     options.put("double-set-old", "hybrid");
> >> >     options.put("double-set-new", "hybrid");
> >> >
> >> >     SparkTransformer.v().transform("",options);
> >> >   }
> >> >
> >> >   public void go() {
> >> >     Container c1 = new Container();
> >> >     Item i1 = new Item();
> >> >     c1.setItem(i1);
> >> >     Container c2 = new Container();
> >> >     Item i2 = new Item();
> >> >     c2.setItem(i2);
> >> >     Container c3 = c2;
> >> >   }
> >> > }
> >> >
> >> > class Container {
> >> >   private Item item = new Item();
> >> >   void setItem(Item item) {
> >> >     this.item = item;
> >> >   }
> >> >   Item getItem() {
> >> >     return this.item;
> >> >   }
> >> > }
> >> > class Item { Object data; }
> >> >
> >> > Thanks,
> >> > Armand
> >> > _______________________________________________
> >> > Soot-list mailing list
> >> > Soot-list at sable.mcgill.ca
> >> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> >> >
> >>
> >>
> >> --
> >> Eric Bodden
> >> Sable Research Group
> >> McGill University, Montréal, Canada
> >>
> >
> >
>
>


-- 
Eric Bodden
Sable Research Group
McGill University, Montréal, Canada


More information about the Soot-list mailing list