[Soot-list] Re: Exception Table

Laurie Hendren hendren at cs.mcgill.ca
Wed Jul 9 13:18:53 EDT 2008


Diana,

Can you please take look at this bug report.  Is this one of the 
problems you have fixed - or do you see what is wrong?

Thanks, Laurie

+-----------------------------------------------------------------
| Laurie Hendren --- laurie.hendren at mcgill.ca
| Associate Dean (Academic), Faculty of Science,
| Dawson Hall, McGill University, 853 Sherbrooke St W,
| Montreal QC H3A 2T6 Canada, 514-398-7179, fax 514-398-1774
+----------------------------------------------------------------
| For contact and home page info as Professor, Computer Science:
| http://www.sable.mcgill.ca/~hendren   ---  hendren at cs.mcgill.ca
| Research: http://www.sable.mcgill.ca  http://aspectbench.org
+----------------------------------------------------------------



Silviu ANDRICA wrote:
> Hello,
>    Thanks for replying so quick.
>
> The Source code is:
>
>
> public class Test {
>    public void m0() {
>        synchronized (this) {
>            synchronized ("Hello") {
>                System.out.println("Hello World");
>            }
>
>        }
>    }
> }
>
> The Jimple version, for the m0 method only,  is:
> public void m0()
>    {
>        Test r0, r2;
>        java.lang.String r3, $r4;
>        java.io.PrintStream $r5;
>        java.lang.Throwable $r6, $r7;
>
>        r0 := @this: Test;
>        r2 = r0;
>        entermonitor r0;
>
>     label0:
>        $r4 = "Hello";
>        r3 = $r4;
>        entermonitor $r4;
>
>     label1:
>        $r5 = <java.lang.System: java.io.PrintStream out>;
>        virtualinvoke $r5.<java.io.PrintStream: void 
> println(java.lang.String)>("Hello World");
>        exitmonitor r3;
>
>     label2:
>        goto label6;
>
>     label3:
>        $r6 := @caughtexception;
>
>     label4:
>        exitmonitor r3;
>
>     label5:
>        throw $r6;
>
>     label6:
>        exitmonitor r2;
>
>     label7:
>        goto label11;
>
>     label8:
>        $r7 := @caughtexception;
>
>     label9:
>        exitmonitor r2;
>
>     label10:
>        throw $r7;
>
>     label11:
>        return;
>
>        catch java.lang.Throwable from label1 to label2 with label3;
>        catch java.lang.Throwable from label4 to label5 with label3;
>        catch java.lang.Throwable from label0 to label7 with label8;
>        catch java.lang.Throwable from label9 to label10 with label8;
>    }
>    The problem is the same, "label 3" is not caught by itself.
>
> Best regards,
>    Silviu
> Silviu ANDRICA wrote:
>> Hello,
>>     I am trying to develop a static analysis for Java applications and I
>> have to deal with Control Flow Graphs. In this endeavour I found a
>> "problem" relating to the Exception table translation from Java bytecode
>> to Baf.
>>
>> Consider, for example, the following method:
>>
>> public void m0();
>>   Code:
>>    0:    aload_0
>>    1:    dup
>>    2:    astore_1
>>    3:    monitorenter
>>    4:    ldc    #16; //String Hello
>>    6:    dup
>>    7:    astore_2
>>    8:    monitorenter
>>    9:    getstatic    #18; //Field
>> java/lang/System.out:Ljava/io/PrintStream;
>>    12:    ldc    #24; //String Hello World
>>    14:    invokevirtual    #26; //Method
>> java/io/PrintStream.println:(Ljava/lang/String;)V
>>    17:    aload_2
>>    18:    monitorexit
>>    19:    goto    25
>>    22:    aload_2
>>    23:    monitorexit
>>    24:    athrow
>>    25:    aload_1
>>    26:    monitorexit
>>    27:    goto    33
>>    30:    aload_1
>>    31:    monitorexit
>>    32:    athrow
>>    33:    return
>>   Exception table:
>>    from   to  target type
>>      9    19    22   any
>>     22    24    22   any
>>      4    27    30   any
>>     30    32    30   any
>>
>> In this case, instructions 22 and 23, corresponding to an exception
>> handler, are caught by themselves. So, any exception thrown in this
>> exception handler can't escape it. It is the same for the second
>> exception handler.
>>
>> When translating it to Baf, the following code results:
>>
>>  public void m0()
>>     {
>>         word r0, r2, $r6;
>>
>>         r0 := @this: Test;
>>         load.r r0;
>>         store.r r2;
>>         load.r r0;
>>         entermonitor;
>>
>>      label0:
>>         push "Hello";
>>         dup1.r;
>>         store.r r0;
>>         entermonitor;
>>
>>      label1:
>>         staticget <java.lang.System: java.io.PrintStream out>;
>>         push "Hello World";
>>         virtualinvoke <java.io.PrintStream: void 
>> println(java.lang.String)>;
>>         load.r r0;
>>         exitmonitor;
>>
>>      label2:
>>         goto label6;
>>
>>      label3:
>>         store.r $r6;
>>
>>      label4:
>>         load.r r0;
>>         exitmonitor;
>>
>>      label5:
>>         load.r $r6;
>>         athrow;
>>
>>      label6:
>>         load.r r2;
>>         exitmonitor;
>>
>>      label7:
>>         goto label11;
>>
>>      label8:
>>         store.r $r6;
>>
>>      label9:
>>         load.r r2;
>>         exitmonitor;
>>
>>      label10:
>>         load.r $r6;
>>         athrow;
>>
>>      label11:
>>         return;
>>
>>         catch java.lang.Throwable from label1 to label2 with label3;
>>         catch java.lang.Throwable from label4 to label5 with label3;
>>         catch java.lang.Throwable from label0 to label7 with label8;
>>         catch java.lang.Throwable from label9 to label10 with label8;
>>     }
>> The Baf translation adds, for the first trap, "label3: store.r $r6;".
>> The problem is that, now an exceptional edge from it to the second trap
>> handler: "label8: store.r $r6;" which does not guarantee that the second
>> acquired lock is released: if the first exitmonitor fails and then
>> "label 3" fails, then control reaches "label 8" and then only one, the
>> first, lock is released.
>>
>> Any ideas how to solve this?
>>
>> Best regards,
>>     Silviu
>>
>>
>>
>>   
>
> _______________________________________________
> 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/20080709/263b19b1/attachment-0001.htm


More information about the Soot-list mailing list