Description
From frame_x86.hpp, we have:
...
71 interpreter_frame_last_sp_offset = interpreter_frame_sender_sp_offset - 1,
72 interpreter_frame_method_offset = interpreter_frame_last_sp_offset - 1,
73 interpreter_frame_mirror_offset = interpreter_frame_method_offset - 1,
74 interpreter_frame_mdp_offset = interpreter_frame_mirror_offset - 1,
75 interpreter_frame_cache_offset = interpreter_frame_mdp_offset - 1,
76 interpreter_frame_locals_offset = interpreter_frame_cache_offset - 1,
77 interpreter_frame_bcp_offset = interpreter_frame_locals_offset - 1,
...
This does not match with what we have in share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java.
77 INTERPRETER_FRAME_MDX_OFFSET = INTERPRETER_FRAME_METHOD_OFFSET - 1;
78 INTERPRETER_FRAME_CACHE_OFFSET = INTERPRETER_FRAME_MDX_OFFSET - 1;
79 INTERPRETER_FRAME_LOCALS_OFFSET = INTERPRETER_FRAME_CACHE_OFFSET - 1;
80 INTERPRETER_FRAME_BCX_OFFSET = INTERPRETER_FRAME_LOCALS_OFFSET - 1;
The issue gets manifested like this (From Yasumasa's mail):
(http://mail.openjdk.java.net/pipermail/serviceability-dev/2016-August/020077.html)
1. AssertionFailure: illegal bci
I saw error stack as below with JDK 9 EA b129 Linux x64:
-------------------
0x00007fe06bd270c2 * java.lang.Object.wait(long) bci:-520544688 (Interpreted frame)
0x00007fe06bd1a443 sun.jvm.hotspot.utilities.AssertionFailure: illegal bci
at sun.jvm.hotspot.utilities.Assert.that(jdk.hotspot.agent@9-ea/Assert.java:32)
at sun.jvm.hotspot.oops.ConstMethod.getLineNumberFromBCI(jdk.hotspot.agent@9-ea/ConstMethod.java:297)
at sun.jvm.hotspot.oops.Method.getLineNumberFromBCI(jdk.hotspot.agent@9-ea/Method.java:282)
at sun.jvm.hotspot.tools.PStack.getJavaNames(jdk.hotspot.agent@9-ea/PStack.java:239)
at sun.jvm.hotspot.tools.PStack.run(jdk.hotspot.agent@9-ea/PStack.java:112)
-------------------
==========================================
The following change from Yasumasa fixes this for x86.
diff -r 5acd2b561936 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java Tue Aug 02 20:55:27 2016 -0700
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java Wed Aug 03 23:42:36 2016 +0900
@@ -48,7 +48,7 @@
private static final int SENDER_SP_OFFSET = 2;
// Interpreter frames
- private static final int INTERPRETER_FRAME_MIRROR_OFFSET = 2; // for native calls only
+ private static int INTERPRETER_FRAME_MIRROR_OFFSET;
private static final int INTERPRETER_FRAME_SENDER_SP_OFFSET = -1;
private static final int INTERPRETER_FRAME_LAST_SP_OFFSET = INTERPRETER_FRAME_SENDER_SP_OFFSET - 1;
private static final int INTERPRETER_FRAME_METHOD_OFFSET = INTERPRETER_FRAME_LAST_SP_OFFSET - 1;
@@ -74,7 +74,8 @@
}
private static synchronized void initialize(TypeDataBase db) {
- INTERPRETER_FRAME_MDX_OFFSET = INTERPRETER_FRAME_METHOD_OFFSET - 1;
+ INTERPRETER_FRAME_MIRROR_OFFSET = INTERPRETER_FRAME_METHOD_OFFSET - 1;
+ INTERPRETER_FRAME_MDX_OFFSET = INTERPRETER_FRAME_MIRROR_OFFSET - 1;
INTERPRETER_FRAME_CACHE_OFFSET = INTERPRETER_FRAME_MDX_OFFSET - 1;
INTERPRETER_FRAME_LOCALS_OFFSET = INTERPRETER_FRAME_CACHE_OFFSET - 1;
INTERPRETER_FRAME_BCX_OFFSET = INTERPRETER_FRAME_LOCALS_OFFSET - 1;
-----------------
Attachments
Issue Links
- relates to
-
JDK-8154580 Save mirror in interpreter frame to enable cleanups of CLDClosure
- Resolved