Hi Yasumasa, Thanks for noticing this. Regarding the illegal bci, you seem to be right. >From a quick look, this looks like this came in with the introduction of interpreter_frame_mirror_offset. (https://bugs.openjdk.java.net/browse/JDK-8154580). >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; We need to have the mirror offset reflected in the SA code also. I will file a bug for this and fix this. Thank you, Jini. > -----Original Message----- > From: Yasumasa Suenaga [mailto:yasue...@gmail.com] > Sent: Wednesday, August 03, 2016 5:51 PM > To: serviceability-dev@openjdk.java.net > Subject: jhsdb jstack cannot work correctly > > Hi all, > > I use "jhsdb jstack" command in JDK 9 EA b129. > But it does not seem to work fine. > > I encountered two problems: > > 1. AssertionFailure: illegal bci > 2. Normal mode cannot work > > > 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.age > nt@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) > ------------------- > > jhsdb can parse compiled frame correctly. It seems to be a problem for > interpreter frame only. > What is the cause of this problem? > interpretedVFrame in HotSpot has changed the location to store BCP? > > > 2. Normal mode cannot work > "jhsdb jstack" should work as normal mode without being added --mixed > option. > However, this command always works as mixed mode. > I think we can fix as below: > ------------------- > diff -r 5acd2b561936 > src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/JStack.java > --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/JStack.java > Tue Aug 02 20:55:27 2016 -0700 > +++ > b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/JStack.java > Wed Aug 03 21:18:57 2016 +0900 > @@ -68,6 +68,10 @@ > } > > public void runWithArgs(String... args) { > + // We should recover these mode to default value. > + mixedMode = false; > + concurrentLocks = false; > + > int used = 0; > for (int i = 0; i < args.length; i++) { > if (args[i].equals("-m")) { > ------------------- > > > Has someone worked for them? > If not so, and patch of 2. is correct, I file it to JBS and upload webrev. > > > Thanks, > > Yasumasa > >