On Sat, 7 Mar 2026 04:16:14 GMT, Yasumasa Suenaga <[email protected]> wrote:

>> 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
>
> Yasumasa Suenaga has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Make setSP() to abstract method

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/riscv64/RISCV64Frame.java
 line 272:

> 270:       if (cb.isUpcallStub()) {
> 271:         return senderForUpcallStub(map, (UpcallStub)cb);
> 272:       } else {

Hi,
I tried this on `linux-riscv64` platform and I witnessed test failure when 
running `serviceability/sa/TestJhsdbJstackWithVirtualThread.java`:

java.lang.RuntimeException: 'must have non-zero frame size' found in stdout
        at 
jdk.test.lib.process.OutputAnalyzer.shouldNotContain(OutputAnalyzer.java:299)
        at 
TestJhsdbJstackWithVirtualThread.runJstack(TestJhsdbJstackWithVirtualThread.java:63)
        at 
TestJhsdbJstackWithVirtualThread.main(TestJhsdbJstackWithVirtualThread.java:74)
        at 
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:565)
        at 
com.sun.javatest.regtest.agent.MainActionHelper$AgentVMRunnable.run(MainActionHelper.java:335)
        at java.base/java.lang.Thread.run(Thread.java:1527)

JavaTest Message: Test threw exception: java.lang.RuntimeException
JavaTest Message: shutting down test


I guess you might want to add following add-on change. I see aarch64 and amd64 
has a similar frame size check before invoking `senderForCompiledFrame` method.

diff --git 
a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/riscv64/RISCV64Frame.java
 
b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/riscv64/RISCV64Frame.java
index 67b4314a3c7..a35c0735979 100644
--- 
a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/riscv64/RISCV64Frame.java
+++ 
b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/riscv64/RISCV64Frame.java
@@ -269,7 +269,7 @@ public Frame sender(RegisterMap regMap, CodeBlob cb) {
     if (cb != null) {
       if (cb.isUpcallStub()) {
         return senderForUpcallStub(map, (UpcallStub)cb);
-      } else {
+      } else if (cb.getFrameSize() > 0) {
         return senderForCompiledFrame(map, cb);
       }
     }

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

PR Review Comment: https://git.openjdk.org/jdk/pull/30107#discussion_r2901107049

Reply via email to