RFR: 8373110: jstack --mixed frames are broken on macOS after JDK-8371194 [v3]

Yasumasa Suenaga ysuenaga at openjdk.org
Thu Dec 18 00:19:50 UTC 2025


On Wed, 17 Dec 2025 19:06:22 GMT, Kevin Walls <kevinw at openjdk.org> wrote:

>> Yasumasa Suenaga has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Check RBP
>
> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/aarch64/BsdAARCH64CFrame.java line 99:
> 
>> 97:         CodeBlob currentBlob = cc.findBlobUnsafe(pc());
>> 98: 
>> 99:         // This case is different from HotSpot. See JDK-8371194 for details.
> 
> Looks good overall I think. 
> What does "different from HotSpot" mean?
> I see we used that phrase in 8371194 also in LinuxAARCH64CFrame.java
> Maybe it is saying that these codeBlobs are handled differently from other code?

Yes. We were trying to implement similar code with NativeStackPrinter used in generating hs_err log in HotSpot, but this condition is different with it.

Comments in 8371195 says:
> The special case for currentBlob.isContinuationStub() || currentBlob.isNativeMethod()) is needed compared to os::get_sender_for_C_frame because, unlike in the VM, here we are walking those frames as native C frames. Without the special case we depend on nextFP which might not be valid unless -XX:+PreserveFramePointer is used.

In os_bsd_aarch64.cpp, comment of `get_sender_for_C_frame()` says JVM compiled with `-fno-omit-frame-pointer`, but we can override `CFLAGS` with configure options. Thus I think it is better to align with Linux AArch64. Actually I heard this code works fine on Mac AArch64 - mixed jstack unwinded native methods successfully like `java.lang.ref.Reference.waitForReferencePendingList()`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28686#discussion_r2629035449


More information about the serviceability-dev mailing list