[Soot-list] CallGraph creation difficulties

Marc-André Laverdière-Papineau marc-andre.laverdiere-papineau at polymtl.ca
Wed May 1 20:13:41 EDT 2013


Hello,

This was discussed at length in the past:
http://www.sable.mcgill.ca/pipermail/soot-list/2013-January/005092.html

Marc-André Laverdière-Papineau
Doctorant - PhD Candidate

On 05/01/2013 07:42 PM, Henddher Pedroza wrote:
> Thank you Mark-Andre,
>
> I just tried adding "enabled:true" to "-p cg.spark" to make sure spark is enabled and still the same issue. If I recall correctly, whenever any option is declared for a phase, that phase becomes enabled automatically but I agree with you: it's better to explicitly set it to enabled.
>
> My test does *not* have a main (I am dealing with Android, fyi).
>
> I am setting only *one* entry point explicitly before invoking PackManager.runPacks(). My entry point is <A: void m0(boolean)>
>
> i.e.
> List<SootMethod> eps = Scene.v().getEntryPoints().clear(); // empty list
> epsSootMethod = Scene.v().getSootMethod("<A: void m0(boolean)>");
> eps.add(m1SootMethod);
> Scene.v().setEntryPoints(eps);
>> PackManager.runPacks()
>
>
>
> On May 1, 2013, at 6:16 PM, Marc-André Laverdière-Papineau <marc-andre.laverdiere-papineau at polymtl.ca> wrote:
>
>> Hello,
>>
>> IRC, if you don't turn on Spark or Paddle, the default (CHA) kicks in.
>> Is your test case having a main?
>>
>> Marc-André Laverdière-Papineau
>> Doctorant - PhD Candidate
>>
>> On 05/01/2013 06:08 PM, Henddher Pedroza wrote:
>>> Hello all,
>>>
>>> I am having issues with inter procedural call-graph construction.
>>>
>>> Consider the following code:
>>>
>>> Class A {
>>>    String s;
>>>    void m0(boolean b) {
>>>        if (b)
>>>            m1();
>>>        else
>>>            m2();
>>>    }
>>>    void m1() {
>>>      this.s = String.valueOf(true);
>>>    }
>>>    void m2() {
>>>      this.s = String.valueOf(false);
>>>    }
>>> }
>>>
>>> Inside my SceneTransformer (of my IFDS impl), I create a cg as follows:
>>> cg = new JimpleBasedInterproceduralCFG();
>>>
>>> When I inspect the cg created, I observe the following:
>>>
>>> 1. When using cg option "-p cg
>>> all-reachable:true,verbose:true,safe-forname:true,safe-newinstance:true", the
>>> constructed cg looks ok (I see edges from m0 to m1 and m2 correctly).
>>>
>>> 2. When using the options above in addition to "-p cg.spark
>>> verbose:true", the constructed cg shows NO edges at all (cg.edges is
>>> empty). Also, cg.srcMethodToEdge, cg.srcUnitToEdge, and cg.tgtToEdge
>>> Maps are all empty too.
>>>
>>> I am explicitly setting only ONE entry point:
>>> <A: m0(boolean>
>>>
>>> Any advice?
>>>
>>> Thanks in advance.
>>>
>>> - Henddher
>>>
>>>
>>> _______________________________________________
>>> Soot-list mailing list
>>> Soot-list at sable.mcgill.ca
>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>
>> _______________________________________________
>> Soot-list mailing list
>> Soot-list at sable.mcgill.ca
>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>


More information about the Soot-list mailing list