[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: AllocNodes



On Thu, Oct 16, 2003 at 02:12:18PM +0200, buckley wrote:
> Hi,
> 
> I'm a student of computer science and I want to use SOOT as a part of my
> master thesis.

That's great!

> Particularly I need SPARK's points-to-sets.
> 
> Thus I built the PAG using the VTA option of the small example below.
> What I need next is to handle all allocations in the class.
> As discribed in CC2003
> (http://www.sable.mcgill.ca/publications/papers/#cc2003-1)
> I associated the AllocNodes in the PAG with what I wanted to have.
> 
> As result I get three nodes from "pag.getAllocNodeNumberer()":
> "AllocNode 1 of Type A", "AllocNode 2 of Type B", "AllocNode 3 of Type
> C".
> 
> Now I was wondering what happened with "d" and "e".
> Is there any fault in my consideration?

One of the characteristics of VTA is that it uses a single AllocNode to
represent all allocation sites of the same type. It sounds like you want
to run Spark with its default settings (not with VTA), in which case
it will create one AllocNode for each allocation site (for your example,
it should make five AllocNodes).

VTA was an earlier analysis than Spark, and it's reimplemented in Spark;
for all the details on VTA, the VTA paper was in OOPSLA 2000, and it's
online at:
http://www.sable.mcgill.ca/publications/papers/#oopsla2000

Ondrej

> 
> Additionally I tried out the "pag.getVarNodeNumberer()"-function,
> and it gave me "a", "b", "c", "d", "e", "ap" which are all locals in the
> 
> "main"-method I think and thus not of interest to me.
> 
> Greetings,
>     Thorsten Buckley
> 
> ------------------------------------
> public class Test {
>         public static void main(String[] args) {
>                 A a = new A(); B b = new B(); C c = new C();
>                 A d = new A(); B e = new B();
>                 A ap;
>                 if(args.length == 0) { ap = a; }
>                 else { if(args.length == 1) { ap = b; }
>                                  else { ap = c; } }
>                 ap.f();
>         }
> }
> 
> 
> 
> 
> 
>