We saw the failure in serviceability/sa/TestJhsdbJstackMixedWithXComp.java on 
Valhalla repo. `jhsdb jstack --mixed` could not unwind continuation call frames 
as following:


                   * LingeredAppWithVirtualThread.run() bci:15 line:69 
(Interpreted frame)
                   * java.lang.Thread.runWith(java.lang.Object, 
java.lang.Runnable) bci:5 line:1540 (Compiled frame [deoptimized]; information 
may be imprecise)
                   * java.lang.VirtualThread.run(java.lang.Runnable) bci:62 
line:472 (Compiled frame [deoptimized]; information may be imprecise)
0x00007fdad773cf98 <StubRoutines (continuation stubs)>
0xfefefefefefefefe ????????


I found that `frame::sender_for_compiled_frame()` in frame_x86.inline.hpp has a 
special case if sender PC has return barrier entry, but SA does not handle it.

This is not only a problem on Valhalla. Same problem exists on JDK. So I want 
to fix on JDK.
This PR passed serviceability/sa tests on Linux, and also 
TestJhsdbJstackMixedWithXComp.java on Valhalla passed 100 times.

This PR is assembled by following commits:

* Follows continuation-related code in HotSpot, and use it on AMD64 SA code
    * 
https://github.com/openjdk/jdk/pull/30107/changes/4af559ee0dbc0bb61e0bcd91bb17459a5abf50ad
* Fix for AArch64
    * 
https://github.com/openjdk/jdk/pull/30107/changes/2cff0fe40c52b88dd8d79ad1534e73b7b0f88f8d
* Fix for RISC-V
    * 
https://github.com/openjdk/jdk/pull/30107/changes/fdef0384577bb71d34371f11bc5878494f276857
* Fix for PPC64
    * 
https://github.com/openjdk/jdk/pull/30107/changes/5d9774d82c7e8c4d92eae8995ab014232ce9590e

-------------

Commit messages:
 - Use create() to instantiate parent instance
 - Fix for PPC64
 - Fix for RISC-V
 - Fix for AArch64
 - Implement Continuation.continuationBottomSender

Changes: https://git.openjdk.org/jdk/pull/30107/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=30107&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8378985
  Stats: 457 lines in 15 files changed: 401 ins; 44 del; 12 mod
  Patch: https://git.openjdk.org/jdk/pull/30107.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/30107/head:pull/30107

PR: https://git.openjdk.org/jdk/pull/30107

Reply via email to