FYI, fixed a bug in the devirtualizer.
Naveen
Begin forwarded message:
From: "Naveen Neelakantam (JIRA)" <[EMAIL PROTECTED]>
Date: February 26, 2007 2:06:07 PM CST
To: [EMAIL PROTECTED]
Subject: [jira] Created: (HARMONY-3242) [drlvm][jit] interface
devirtualization bug
[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
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.