On Sat, 11 Oct 2025 14:54:05 GMT, Yasumasa Suenaga <[email protected]> wrote:

>>> I applied the changes to AARCH64Frame.java and they seem to fix the issue 
>>> with the exception. I'm seeing two different stack traces (see below), and 
>>> neither is identical to your fixed stack trace. I don't see `<StubRoutines 
>>> (continuation stubs)>`. Instead I see a frame for 
>>> `jdk.internal.vm.Continuation.enterSpecial()`. Also, I don't see 
>>> `<StubRoutines (initial stubs)>` or any of the frames that come after it. 
>>> Maybe these are just expected platform differences.
>>>
>> These two different stack traces are expected and depend on whether the 
>> vthread was unmounted or not. With the current test this is timing 
>> dependent. You can run the test commenting out the `System.out.println` 
>> call, and then again replacing it with `Thread.yield()`. The string 
>> `<StubRoutines (continuation stubs)>` does look like from a previous version 
>> though. Even on x64 I see the `enterSpecial` frame printed out, and it 
>> matches what I would expect based on the patch.
>
> @pchilano I reproduce the problem with `Thread.yield()`. Thanks! So I added 
> test in the latest commit. I believe it works on both AMD64 and AArch64.

@YaSuenag : 
Hi, I tried on linux-riscv64 and I see the assertion failure is triggering on 
this platform as well.
Seems that your changes are applicable to riscv64 with minor tweak. Maybe you 
can add this? Thanks.


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 e02e056f028..44c8f4c679c 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
@@ -262,7 +262,13 @@ public Frame sender(RegisterMap regMap, CodeBlob cb) {
     }

     if (cb != null) {
-      return cb.isUpcallStub() ? senderForUpcallStub(map, (UpcallStub)cb) : 
senderForCompiledFrame(map, cb);
+      if (cb.isUpcallStub()) {
+        return senderForUpcallStub(map, (UpcallStub)cb);
+      } else if (cb.isContinuationStub()) {
+        return senderForContinuationStub(map, cb);
+      } else {
+        return senderForCompiledFrame(map, cb);
+      }
     }

     // Must be native-compiled frame, i.e. the marshaling code for native
@@ -348,6 +354,16 @@ private void updateMapWithSavedLink(RegisterMap map, 
Address savedFPAddr) {
     map.setLocation(fp, savedFPAddr);
   }

+  private Frame senderForContinuationStub(RISCV64RegisterMap map, CodeBlob cb) 
{
+    var contEntry = map.getThread().getContEntry();
+
+    Address senderSP = contEntry.getEntrySP();
+    Address senderPC = contEntry.getEntryPC();
+    Address senderFP = contEntry.getEntryFP();
+
+    return new RISCV64Frame(senderSP, senderFP, senderPC);
+  }
+
   private Frame senderForCompiledFrame(RISCV64RegisterMap map, CodeBlob cb) {
     if (DEBUG) {
       System.out.println("senderForCompiledFrame");
diff --git 
a/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackMixedWithVirtualThread.java
 
b/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackMixedWithVirtualThread.java
index 2565fdf9056..9b4fa067dc0 100644
--- 
a/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackMixedWithVirtualThread.java
+++ 
b/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackMixedWithVirtualThread.java
@@ -37,7 +37,7 @@
  * @test
  * @bug 8369505
  * @requires (os.family == "linux") & (vm.hasSA)
- * @requires (os.arch == "amd64" | os.arch == "aarch64")
+ * @requires (os.arch == "amd64" | os.arch == "aarch64" | os.arch == "riscv64")
  * @library /test/lib
  * @run driver TestJhsdbJstackMixedWithVirtualThread
  */

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

PR Comment: https://git.openjdk.org/jdk/pull/27728#issuecomment-3395643581

Reply via email to