[Soot-list] [Negative Stack height ?]

Leonardo Bottaci L.Bottaci at hull.ac.uk
Mon Sep 14 13:24:24 EDT 2009


I'm a newcomer to Soot.  I have had a Negative Stack height error from
jimple code that have I modified.  My modification was to insert a
jimple statement (a method call to a method that returns void).  The
subsequent existing jimple statements, when translated to byte code,
contained a pop instruction that I did not think was required.  I did
not investigate the problem in detail but as a work around I changed my
method to return zero and therefore provide an argument for the pop
instruction.

 

Len Bottaci

 

-----Original Message-----
From: soot-list-bounces at sable.mcgill.ca
[mailto:soot-list-bounces at sable.mcgill.ca] On Behalf Of lpxz
Sent: 14 September 2009 16:56
To: soot-list at sable.mcgill.ca
Subject: [Soot-list] [Negative Stack height ?]

 

Hello:

 

Can you help me with the transforming problems. I want to make a new 

method called getValue_TX(), but as it is a little complex to write, I 

would like to reuse other jimple statement with minor modification, for 

example, I

read every statement of getXXX_TX using  Iterator
iterator=units.iterator().

 for those identity statment, I provide new version manually.

 for those variables used in getXXX_TX, I set a new Type for that Value.

 for those variables defined, I add them to my new method's local set.

 

If I do this using "-f J", it can pass the jimple validate part, and it 

did not report "local not declared". but if I use "-f c", it would 

report exception like this:

 

 

*Exception in thread "main" java.lang.RuntimeException:* Negative Stack 

height has been attained in :<dstm2.benchmark.aj.INode: int
getValue_TX()>

StackHeight: -1

At instruction:athrow

Block:

Block 1:

[preds: ] [succs: ]

load.r this;

exitmonitor;

athrow;

 

 

Method: getValue_TX

<dstm2.benchmark.aj.INode: int getValue_TX()>

    at soot.baf.JasminClass.calculateStackHeight(JasminClass.java:1819)

    at soot.baf.JasminClass.emitMethodBody(JasminClass.java:274)

    at soot.AbstractJasminClass.emitMethod(AbstractJasminClass.java:689)

    at soot.AbstractJasminClass.<init>(AbstractJasminClass.java:568)

    at soot.baf.JasminClass.<init>(JasminClass.java:44)

    at soot.PackManager.writeClass(PackManager.java:877)

    at soot.PackManager.writeOutput(PackManager.java:467)

    at soot.PackManager.writeOutput(PackManager.java:394)

    at aBunchOfTestForBodyPhase.ATTAnalysis.main(ATTAnalysis.java:48)

 

*and the corresponding jimple code when I use "-f c" is  there were an 

email in the mailing list asking about "athrow" probelm, and it was said


using sun jvm can avoid the problem, but I did not get the problem 

avoided even under sun jvm. and I do not know too much about the 

instructions here, So can anybody shed some light for me please:*

 

  public int getValue_TX()

    {

        word this, j;

 

        this := @this: dstm2.benchmark.aj.INode;

 

     label0:

        push 0;

 

     label1:

        load.r this;

 

     label2:

        dup1.r;

 

     label3:

        store.r this;

 

     label4:

        entermonitor;

 

     label5:

        push 1;

 

     label6:

        add.b;

 

     label7:

        store.i j;

 

     label8:

        load.r this;

 

     label9:

        exitmonitor;

 

     label10:

        goto label14;

 

     label11:

        load.r this;

 

     label12:

        exitmonitor;

 

     label13:

        athrow;

 

     label14:

        load.i j;

 

     label15:

        return.i;

    }

 

*I tried to read the jimple generated using "-f J" myself, and I find I 

did not succeed to capture

"catch java.lang.Throwable from label0 to label1 with label2;

 catch java.lang.Throwable from label3 to label4 with label2;"

Is this the problem ?

and how can I capture those two statements ,as they are not in the 

units.iterate.

 

*

 

public int getXXX_TX()

    {

        aolib.adstm.ExampleITX this, l2, $r0;

        byte j;

        int j#2;

        java.lang.Throwable $r1;

 

        this := @this: aolib.adstm.ExampleITX;

        j = 0;

        $r0 = this;

        l2 = $r0;

        entermonitor $r0;

 

     label0:

        j#2 = j + 1;

        exitmonitor l2;

 

     label1:

        goto label5;

 

     label2:

        $r1 := @caughtexception;

 

     label3:

        exitmonitor l2;

 

     label4:

        throw $r1;

 

     label5:

        return j#2;

 

        catch java.lang.Throwable from label0 to label1 with label2;

        catch java.lang.Throwable from label3 to label4 with label2;

    }

 

 

    public int getValue_TX()

    {

        dstm2.benchmark.aj.INode this, $r0, l2;

        byte j;

        int j#2;

        java.lang.Throwable $r1;

 

        this := @this: dstm2.benchmark.aj.INode;

        j = 0;

        $r0 = this;

        l2 = $r0;

        entermonitor $r0;

        j#2 = j + 1;

        exitmonitor l2;

        goto label0;

 

        $r1 := @caughtexception;

        exitmonitor l2;

        throw $r1;

 

     label0:

        return j#2;

    }

 

Thank you for your help !

 

Regards

Peng

_______________________________________________

Soot-list mailing list

Soot-list at sable.mcgill.ca

http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20090914/da3b11f1/attachment.html 
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: not available
Url: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20090914/da3b11f1/attachment.pl 


More information about the Soot-list mailing list