[Soot-list] Spark Points-to analysis

Armand Navabi anavabi at purdue.edu
Wed Jul 18 23:32:12 EDT 2007


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
>>
>
>



More information about the Soot-list mailing list