RFR: 8255233: InterpreterRuntime::at_unwind should be a JRT_LEAF
Erik Österlund
eosterlund at openjdk.java.net
Fri Oct 23 09:51:47 UTC 2020
InterpreterRuntime::at_unwind is called at the very beginning of remove_activation(), to notify concurrent stack processing that a frame is about to be unwound. It is currently a JRT_ENTRY, because it needs a last_Java_frame to see what frame is about to get unwound.
However, there are special return paths used by JVMTI pop frame, that checks if the caller frame is deoptimized, then calls a special path that removes the top activation, assuming that does not enter the deopt handler. The new JRT_ENTRY makes that reasoning invalid.
Therefore, we need this to be a JRT_LEAF, that sets a last Java frame, to make everyone happy. This patch performs that change.
I have run tier 1-5 testing, and manually tested:
while true; do make test JTREG="RETAIN=all" TEST=open/test/hotspot/jtreg/vmTestbase/nsk/jvmti/ForceEarlyReturn/ForceEarlyReturn002 TEST_OPTS_JAVA_OPTIONS="-XX:+UseZGC -Xmx2g -XX:ZCollectionInterval=0.0001 -XX:ZFragmentationLimit=0.01 -XX:+VerifyOops -XX:+ZVerifyViews" ; done
Before the fix it crashes ~1/15 runs with a bad oop. After the fix, it doesn't crash. I have run it more times than my tmux buffer fits (for a day), and it does not fail any more with this fix.
Unfortunately, my testing on AArch64 has been stalled for a day, so I have sent out this PR without the testing of those bits being finished. I won't push until I get the results back, of course. But I am expecting that to be fine, as there is nothing special going on there and it compiles. Will post a comment when the complete results have arrived.
-------------
Commit messages:
- 8255233: InterpreterRuntime::at_unwind should be a JRT_LEAF
Changes: https://git.openjdk.java.net/jdk/pull/828/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=828&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8255233
Stats: 7 lines in 3 files changed: 4 ins; 0 del; 3 mod
Patch: https://git.openjdk.java.net/jdk/pull/828.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/828/head:pull/828
PR: https://git.openjdk.java.net/jdk/pull/828
More information about the hotspot-dev
mailing list