You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Alexey Varlamov (JIRA)" <ji...@apache.org> on 2007/03/27 08:07:32 UTC

[jira] Assigned: (HARMONY-3242) [drlvm][jit] interface devirtualization bug

     [ https://issues.apache.org/jira/browse/HARMONY-3242?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexey Varlamov reassigned HARMONY-3242:
----------------------------------------

    Assignee: Alexey Varlamov

> [drlvm][jit] interface devirtualization bug
> -------------------------------------------
>
>                 Key: HARMONY-3242
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3242
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: RHEL4, gcc 4.1.0, core2
>            Reporter: Naveen Neelakantam
>         Assigned To: Alexey Varlamov
>         Attachments: devirt_bug.emconf, devirt_intf_bug.patch
>
>
> When devirtualizing an interface call, the devirtualizer incorrectly moves the ldInterfaceVTable instruction to immediately before function pointer calculation for each guarded virtual call.  This is problematic because a single ldInterfaceVTable instruction may be a producer for several function pointer calculations.  Moving the ldInterfaceVTable instruction can therefore prevent it from dominating its consumers.
> This bug will not manifest itself in most situations because global code motion (gcm) is typically run after interface devirtualization.  Global code motion will move the ldInterfaceVTable back into a basic block that dominates all of its consumers.
> So, to observe the bug a new .emconf is needed, one that does not run gcm.  I've attached devirt_bug.emconf which is a copy of server.emconf but with gcm removed.
> I've also attached a patch which fixes the issue (devirt_intf_bug.patch).  Instead of moving the ldInterfaceVTable instruction, the patch places a duplicate before each guarded function pointer calculation.
> Demonstration of bug using devirt_bug.emconf and the DaCapo chart benchmark:
> >java -showversion -Xem:./devirt_bug.emconf -jar dacapo-2006-10-MR2.jar chart
> Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> java version "1.5.0"
> pre-alpha : not complete or compatible
> svn = r511936, (Feb 26 2007), Linux/ia32/gcc 4.1.0, release build
> http://incubator.apache.org/harmony
> ===== DaCapo chart starting =====
> Done plotting: ./scratch/javac-tgt-ptr-prf-time.pdf
> Done plotting: ./scratch/javac-src-ptr-prf-time.pdf
> SIGSEGV in VM code.
> Stack trace:
> Done plotting: ./scratch/javac-dst-ptr-prf-time.pdf
> Done plotting: ./scratch/javac-tgt-mut-prf-time.pdf
> Done plotting: ./scratch/javac-src-mut-prf-time.pdf
>         1: ?? (:-1)
> read() failed during execution of addr2line
>         2: ?? (??:-1)
> read() failed during execution of addr2line
>         3: ?? (??:-1)
> read() failed during execution of addr2line
>         4: ?? (??:-1)
> read() failed during execution of addr2line
>         5: ?? (??:-1)
> read() failed during execution of addr2line
>         6: ?? (??:-1)
> read() failed during execution of addr2line
>         7: ?? (??:-1)
> read() failed during execution of addr2line
>         8: ?? (??:-1)
> read() failed during execution of addr2line
>         9: ?? (??:-1)
> read() failed during execution of addr2line
>         10: ?? (??:-1)
> read() failed during execution of addr2line
>         11: ?? (??:-1)
> read() failed during execution of addr2line
>         12: ?? (??:-1)
> read() failed during execution of addr2line
>         13: ?? (??:-1)
> read() failed during execution of addr2line
>         14: ?? (??:-1)
> read() failed during execution of addr2line
>         15: ?? (??:-1)
> read() failed during execution of addr2line
>         16: ?? (??:-1)
> read() failed during execution of addr2line
>         17: ?? (??:-1)
> read() failed during execution of addr2line
>         18: ?? (??:-1)
> read() failed during execution of addr2line
>         19: ?? (??:-1)
> read() failed during execution of addr2line
>         20: ?? (??:-1)
> read() failed during execution of addr2line
>         21: ?? (??:-1)
> read() failed during execution of addr2line
>         22: ?? (??:-1)
> read() failed during execution of addr2line
>         23: ?? (??:-1)
>         24: IP is 0xA50AADC3 <native code>
>         25: java/lang/EMThreadSupport.run()V (EMThreadSupport.java:68)
>         26: java/lang/EMThreadSupport$1.run()V (EMThreadSupport.java:44)
>         27: java/lang/Thread.run()V (Thread.java:-1)
>         28: java/lang/Thread.runImpl()V (Thread.java:-1)
> read() failed during execution of addr2line
>         29: ?? (??:-1)
> read() failed during execution of addr2line
>         30: ?? (??:-1)
> read() failed during execution of addr2line
>         31: ?? (??:-1)
> read() failed during execution of addr2line
>         32: ?? (??:-1)
> read() failed during execution of addr2line
>         33: ?? (??:-1)
> read() failed during execution of addr2line
>         34: ?? (??:-1)
> read() failed during execution of addr2line
>         35: ?? (??:-1)
> read() failed during execution of addr2line
>         36: ?? (??:-1)
> read() failed during execution of addr2line
>         37: ?? (??:-1)
> read() failed during execution of addr2line
>         38: ?? (??:-1)
> read() failed during execution of addr2line
>         39: ?? (??:-1)
> <end of stack trace>
> Segmentation fault

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.