Re: [abc-users] polyglot compiler exception while using abc to instrument aspect code

From: Wouter De Borger <w.deborger_at_gmail.com>
Date: Wed, 15 Oct 2008 23:27:49 +0200

Hi Luca,

Perhaps I am getting it wrong, but your code strikes me as very odd.

   1. You make your code call BlockTagger.tagFirstUnitInBlock(Unit u) as a
   method with no arguments, which may cause the type system to fail.
   2. This call is inserted into the program that will be outputted. This
   program will run outside Soot and there will no longer be a notion of Unit
   (or tag,....)
   3. A new Aggregator is made for each tag, which will most likely not work

Wouter

On Wed, Oct 15, 2008 at 6:47 PM, Luca Cavallaro <cavallaro_at_elet.polimi.it>wrote:

> Dear all,
> I found out the following problem using abc:
> I am trying to instrument the compiled code in order to deduce basic blocks
> coverage. To do this I read the soot tutorial to instrument class files and
> I produced the following code:
> I modified abc.main.AbcExtension adding to the method addJimplePacks()these
> four code lines:
>
> //added by me
>
> Scene.v().addBasicClass("abc.aspectj.instrumentation.BlockTagger",SootClass.SIGNATURES);
> //added by me
> Scene.v().addBasicClass("java.io.PrintStream",SootClass.SIGNATURES);
> //added by me
> Scene.v().addBasicClass("java.lang.System",SootClass.SIGNATURES);
> PackManager.v().getPack("jtp").add(new Transform("jtp.uce",
> UnreachableCodeEliminator.v()));
> //added by me
> PackManager.v().getPack("jtp").add(new
> Transform("jtp.blockInstrumentation", new BlockInstrumenter()));
>
> I built a BlockInstrumenter class which extends BodyTransformer and I
> redefined internaltransform method:
>
> protected void internalTransform(Body b, String arg1, Map arg2) {
> SootClass sc =
> Scene.v().getSootClass("abc.aspectj.instrumentation.BlockTagger");
> SootMethod instrumenter = sc.getMethodByName("tagFirstUnitInBlock");
> BlockGraph bg = new CompleteBlockGraph(b);
> List<Block> blocksInGraph = bg.getBlocks();
> Chain units = b.getUnits();
> for(Block bl: blocksInGraph){
> Unit head = bl.getHead();
> InvokeExpr incExpr=
> Jimple.v().newStaticInvokeExpr(instrumenter.makeRef());
> Stmt incStmt = Jimple.v().newInvokeStmt(incExpr);
> units.insertAfter(incStmt,head);
> }
>
> Here is the code of the class I am trying to use for instrumentation. This
> class has a static method that I would like to add a call to when a basic
> block is entered.
>
> public class BlockTagger {
> public static void tagFirstUnitInBlock(Unit u){
> ExecutedBlockTag t = new ExecutedBlockTag();
> ExecutedBlockTagAggregator ta = new ExecutedBlockTagAggregator();
> ta.considerTag(t, u);
> }
>
> }
>
> ExecutedBlockTag() implements Tag and contains a boolean field.
> ExecutedBlockTagAggregator() has an overridden method:
> public void considerTag(Tag t, Unit u) {
> units.add(u);
> tags.add(t);
> }
>
> When I run abc on my target program the compilation fails reporting the
> following exception:
>
> polyglot.util.InternalCompilerError: BoundPoint.aj:29,1-32:2: Error during
> matching
> at
> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:208)
> at abc.main.AbcExtension.findMethodShadows(AbcExtension.java:508)
> at
> abc.weaving.matching.AdviceApplication.doMethod(AdviceApplication.java:275)
> at
> abc.weaving.matching.AdviceApplication.computeAdviceLists(AdviceApplication.java:312)
> at
> abc.weaving.aspectinfo.GlobalAspectInfo.computeAdviceLists(GlobalAspectInfo.java:463)
> at analysis.aspectj.Main.preprocess(Main.java:381)
> at analysis.aspectj.Main.main(Main.java:91)
> Caused by: java.lang.NullPointerException
> at abc.weaving.residues.CheckType.construct(CheckType.java:62)
> at abc.weaving.residues.Bind.construct(Bind.java:89)
> at abc.weaving.aspectinfo.ArgVar.matchesAt(ArgVar.java:53)
> at abc.weaving.aspectinfo.Args.matchesAt(Args.java:134)
> at abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:68)
> at
> abc.weaving.matching.AdviceApplication$2.run(AdviceApplication.java:114)
> at
> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:191)
> ... 6 more
> polyglot.util.InternalCompilerError: BoundPoint.aj:29,1-32:2: Error during
> matching
> at
> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:208)
> at abc.main.AbcExtension.findMethodShadows(AbcExtension.java:508)
> at
> abc.weaving.matching.AdviceApplication.doMethod(AdviceApplication.java:275)
> at
> abc.weaving.matching.AdviceApplication.computeAdviceLists(AdviceApplication.java:312)
> at
> abc.weaving.aspectinfo.GlobalAspectInfo.computeAdviceLists(GlobalAspectInfo.java:463)
> at analysis.aspectj.Main.preprocess(Main.java:381)
> at analysis.aspectj.Main.main(Main.java:91)
> Caused by: java.lang.NullPointerException
> at abc.weaving.residues.CheckType.construct(CheckType.java:62)
> at abc.weaving.residues.Bind.construct(Bind.java:89)
> at abc.weaving.aspectinfo.ArgVar.matchesAt(ArgVar.java:53)
> at abc.weaving.aspectinfo.Args.matchesAt(Args.java:134)
> at abc.weaving.aspectinfo.AndPointcut.matchesAt(AndPointcut.java:68)
> at
> abc.weaving.matching.AdviceApplication$2.run(AdviceApplication.java:114)
> at
> abc.weaving.matching.AdviceApplication.doShadows(AdviceApplication.java:191)
> ... 6 more
>
> does anyone have any suggestion that can help me?
> thanks in advance
> Luca
>
> --
> Luca Cavallaro
> Ph.D. student
> DEI, Politecnico di Milano,
> Via Golgi 40
> 200133 Milan,
> Italy
> /------------------------------------------------------------/
> Aphasia is the loss of speech in computer scientists when asked:
> "But of what use is your research?"
>
>
>
>
Received on Wed Oct 15 2008 - 22:27:53 BST

This archive was generated by hypermail 2.2.0 : Fri Oct 31 2008 - 23:50:12 GMT