Re: [abc-users] adding jimple

From: Amjad Nusayr <anusayr_at_cs.nmsu.edu>
Date: Tue, 21 Apr 2009 08:17:00 -0600

Dear Eric
I added this import stmt to my AbcExtension
import java.util.concurrent.atomic.AtomicLong;

and

Scene.v().addBasicClass(java.util.concurrent.atomic.AtomicLong,SIGNATURES);

to addBasicClassesToSoot

but when I try to build I get an error saying that it cant find atomic!!

F:\bbs\src\abc\bbs\AbcExtension.java:218: cannot find symbol
symbol : class atomic
location: package java.util.concurrent
        
Scene.v().addBasicClass(java.util.concurrent.atomic.AtomicLong,SIGNATURES);

Amjad

Eric Bodden wrote:
> Hi Amjad.
>
> So does your generated code contain references to AtomicLong? If it
> does then you have to resolve that to SIGNATURES as well. The
> exception even tells you what to do:
>
> Scene.v().addBasicClass(java.util.concurrent.atomic.AtomicLong,SIGNATURES);
>
>
> Eric
>
> 2009/4/21 Amjad Nusayr <anusayr_at_cs.nmsu.edu>:
>
>> Okay that worked just fine.
>> When I try it. It works in short and simple code. But most of the times I
>> get the following exception
>> Exception in thread "main" polyglot.util.InternalCompilerError: unhandled
>> exception during wea
>> ving/optimisation
>> at abc.main.CompileSequence.runSequence(CompileSequence.java:142)
>> at abc.main.Main.run(Main.java:406)
>> at abc.main.Main.main(Main.java:144)
>> Caused by: polyglot.util.InternalCompilerError: World.aj:23,3-44:4: Error
>> during matching
>> at
>> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:209)
>> at abc.main.AbcExtension.findMethodShadows(AbcExtension.java:541)
>> at abc.bbs.AbcExtension.findMethodShadows(AbcExtension.java:233)
>> at
>> abc.weaving.matching.AdviceApplication.doMethod(AdviceApplication.java:275)
>> at
>> abc.weaving.matching.AdviceApplication.computeAdviceLists(AdviceApplication.java:31
>> 2)
>> at
>> abc.weaving.aspectinfo.GlobalAspectInfo.computeAdviceLists(GlobalAspectInfo.java:48
>> 2)
>> at abc.main.CompileSequence.weave(CompileSequence.java:447)
>> at abc.main.CompileSequence.runSequence(CompileSequence.java:115)
>> ... 2 more
>> Caused by: java.lang.ExceptionInInitializerError
>> at
>> abc.bbs.weaving.aspectinfo.ProbabilityD.matchesAt(ProbabilityD.java:52)
>> at
>> abc.weaving.aspectinfo.ShadowPointcut.matchesAt(ShadowPointcut.java:38)
>> at abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:65)
>> at abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:65)
>> at abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:65)
>> at abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:65)
>> at
>> abc.weaving.matching.AdviceApplication$2.run(AdviceApplication.java:115)
>> at
>> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:192)
>> ... 9 more
>> Caused by: java.lang.RuntimeException: This operation requires resolving
>> level SIGNATURES but
>> java.util.concurrent.atomic.AtomicLong is at resolving level HIERARCHY
>> If you are extending Soot, try to add the following call before calling
>> soot.Main.main(..):
>> Scene.v().addBasicClass(java.util.concurrent.atomic.AtomicLong,SIGNATURES);
>> Otherwise, try whole-program mode (-w).
>> at soot.SootClass.checkLevel(SootClass.java:121)
>> at soot.SootClass.addField(SootClass.java:177)
>> at soot.coffi.Util.resolveFromClassFile(Util.java:147)
>> at soot.CoffiClassSource.resolve(CoffiClassSource.java:39)
>> at soot.SootResolver.bringToHierarchy(SootResolver.java:194)
>> at soot.SootResolver.processResolveWorklist(SootResolver.java:140)
>> at soot.SootResolver.resolveClass(SootResolver.java:124)
>> at soot.Scene.loadClass(Scene.java:390)
>> at soot.Scene.loadClassAndSupport(Scene.java:376)
>> at
>> abc.bbs.weaving.residues.ProbabilityDResidue.<clinit>(ProbabilityDResidue.java:42)
>>
>> Any idea why and how to fix this.
>>
>> Amjad
>>
>> Eric Bodden wrote:
>>
>>> Hi.
>>>
>>> You need to put your incExpr into an AssignStmt which, on its
>>> left-hand-side, refers to result.
>>>
>>> Eric
>>>
>>> 2009/4/20 Amjad Nusayr <anusayr_at_cs.nmsu.edu>:
>>>
>>>
>>>> Apologies I was not clear in my last email. Here is what i have
>>>> ===============
>>>> myFoo= helperClass.getMethod("int myFoo()");
>>>> Local result=localgen.generateLocal(IntType.v(),"var1");
>>>> InvokeExpr incExpr= Jimple.v().newStaticInvokeExpr(myFoo.makeRef());
>>>> ===============
>>>>
>>>> My problem is that I cant seem to get the return value into the Local
>>>> *result*. Should I be using something else??
>>>>
>>>> Amjad
>>>>
>>>> Eric Bodden wrote:
>>>>
>>>>
>>>>> You just have to add a fresh Local to the method's Body. Then you
>>>>> assign the result to the Local and pass the local as an arument to the
>>>>> EqExpr.
>>>>>
>>>>> Eric
>>>>>
>>>>> 2009/4/20 Amjad Nusayr <anusayr_at_cs.nmsu.edu>:
>>>>>
>>>>>
>>>>>
>>>>>> Thanks Eric,
>>>>>> Another quick question. The method I'm calling returns an integer, How
>>>>>> can I
>>>>>> store the return value from my invocation? I want to use it in a
>>>>>> "EqExpr"
>>>>>> that compares it to an int.
>>>>>>
>>>>>> Amjad
>>>>>>
>>>>>> Eric Bodden wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Hi Amjad.
>>>>>>>
>>>>>>> You have to make Soot aware of your helper class, using your
>>>>>>> AbcExtension.
>>>>>>> See:
>>>>>>>
>>>>>>> AbcExtension.addBasicClassesToSoot()
>>>>>>>
>>>>>>> Eric
>>>>>>>
>>>>>>> 2009/4/20 Amjad Nusayr <anusayr_at_cs.nmsu.edu>:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> Hi,
>>>>>>>> I trying to add jimple stmts to the IR code generated in abc using
>>>>>>>> MyResidue.codeGen method. The jimple code I writing should call a
>>>>>>>> method
>>>>>>>> from a helper class I created.
>>>>>>>> I used the code from this link to aid me.
>>>>>>>> http://www.sable.mcgill.ca/soot/tutorial/profiler2/index.html
>>>>>>>>
>>>>>>>> abc compiles but when run abc with my extension using the following
>>>>>>>> command
>>>>>>>> line
>>>>>>>> +soot -f J -soot -argfile files.lst
>>>>>>>>
>>>>>>>> I get
>>>>>>>> Exception in thread "main" polyglot.util.InternalCompilerError:
>>>>>>>> unhandled
>>>>>>>> exception during we
>>>>>>>> ving/optimisation
>>>>>>>> at abc.main.CompileSequence.runSequence(CompileSequence.java:142)
>>>>>>>> at abc.main.Main.run(Main.java:406)
>>>>>>>> at abc.main.Main.main(Main.java:144)
>>>>>>>> Caused by: polyglot.util.InternalCompilerError: World.aj:29,3-32:4:
>>>>>>>> Error
>>>>>>>> during matching
>>>>>>>> at
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:209)
>>>>>>>> at abc.main.AbcExtension.findMethodShadows(AbcExtension.java:541)
>>>>>>>> at abc.bbs.AbcExtension.findMethodShadows(AbcExtension.java:230)
>>>>>>>> at
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> abc.weaving.matching.AdviceApplication.doMethod(AdviceApplication.java:275)
>>>>>>>> at
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> abc.weaving.matching.AdviceApplication.computeAdviceLists(AdviceApplication.java:3
>>>>>>>> 2)
>>>>>>>> at
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> abc.weaving.aspectinfo.GlobalAspectInfo.computeAdviceLists(GlobalAspectInfo.java:4
>>>>>>>> 2)
>>>>>>>> at abc.main.CompileSequence.weave(CompileSequence.java:447)
>>>>>>>> at abc.main.CompileSequence.runSequence(CompileSequence.java:115)
>>>>>>>> ... 2 more
>>>>>>>> Caused by: java.lang.ExceptionInInitializerError
>>>>>>>> at
>>>>>>>>
>>>>>>>> abc.bbs.weaving.aspectinfo.ProbabilityD.matchesAt(ProbabilityD.java:52)
>>>>>>>> at
>>>>>>>>
>>>>>>>> abc.weaving.aspectinfo.ShadowPointcut.matchesAt(ShadowPointcut.java:38)
>>>>>>>> at
>>>>>>>> abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:65)
>>>>>>>> at
>>>>>>>> abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:65)
>>>>>>>> at
>>>>>>>> abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:65)
>>>>>>>> at
>>>>>>>>
>>>>>>>>
>>>>>>>> abc.weaving.matching.AdviceApplication$2.run(AdviceApplication.java:115)
>>>>>>>> at
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:192)
>>>>>>>> ... 9 more
>>>>>>>> Caused by: java.lang.RuntimeException: This operation requires
>>>>>>>> resolving
>>>>>>>> level SIGNATURES but
>>>>>>>> Helper is at resolving level HIERARCHY
>>>>>>>> If you are extending Soot, try to add the following call before
>>>>>>>> calling
>>>>>>>> soot.Main.main(..):
>>>>>>>> Scene.v().addBasicClass(Helper,SIGNATURES);
>>>>>>>> Otherwise, try whole-program mode (-w).
>>>>>>>> at soot.SootClass.checkLevel(SootClass.java:121)
>>>>>>>> at soot.SootClass.addMethod(SootClass.java:570)
>>>>>>>> at soot.coffi.Util.resolveFromClassFile(Util.java:249)
>>>>>>>> at soot.CoffiClassSource.resolve(CoffiClassSource.java:39)
>>>>>>>> at soot.SootResolver.bringToHierarchy(SootResolver.java:194)
>>>>>>>> at soot.SootResolver.bringToSignatures(SootResolver.java:219)
>>>>>>>> at soot.SootResolver.processResolveWorklist(SootResolver.java:139)
>>>>>>>> at soot.SootResolver.resolveClass(SootResolver.java:124)
>>>>>>>> at soot.Scene.loadClass(Scene.java:390)
>>>>>>>> at soot.Scene.loadClassAndSupport(Scene.java:375)
>>>>>>>> at
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> abc.bbs.weaving.residues.ProbabilityDResidue.<clinit>(ProbabilityDResidue.java:37)
>>>>>>>> ... 16 more
>>>>>>>>
>>>>>>>>
>>>>>>>> Could someone tell me what this means and how to fix it.
>>>>>>>>
>>>>>>>> thanks
>>>>>>>> Amjad
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>
>
>
Received on Tue Apr 21 2009 - 15:17:15 BST

This archive was generated by hypermail 2.2.0 : Tue Apr 21 2009 - 15:40:11 BST