On Thu, 15 Jan 2026 01:29:50 GMT, Chris Plummer <[email protected]> wrote:

>> On my Windows 11 25H2, mixed jstack works correctly like following:
>> 
>>   <snip>
>> 
>> 0x00007ff8105c10c4      NoFramePointer!fib + 0x28
>> 0x00007ff8105c10c4      NoFramePointer!fib + 0x28
>> 0x00007ff8105c101d      
>> NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI + 0x1d
>> 0x000001c5903afbf8      * 
>> LingeredAppWithNativeMethod.callJNI(java.lang.Object, int) bci:0 
>> (Interpreted frame)
>>                         * LingeredAppWithNativeMethod.callNative() bci:47 
>> line:54 (Interpreted frame)
>>                         * LingeredAppWithNativeMethod.callback(long) bci:8 
>> line:63 (Interpreted frame)
>> 
>>   <snip>
>> 
>> 
>> Do you mean multiple jstacks are shown in .jtr file with message such as 
>> "DEBUG: Iteration: 1 - Test didn't trigger interesting condition." ? If yes, 
>> I think it is expected.
>> 
>> TestJhsdbJstackMixed.java seems to check at `isFibAndAlignedAddress` whether 
>> instruction address (PC) is aligned or not. I saw the condition is met in 
>> early on Linux x64, but it seems to take some calls on Windows x64. I'm not 
>> sure why we need to check this (I checked 
>> [JDK-8208091](https://bugs.openjdk.org/browse/JDK-8208091) which introduced 
>> it, but I haven't yet understood the reason).
>
> "NoFramePointerJNIFib" #28 prio=5 tid=0x0000023fa4432290 nid=20612 runnable 
> [0x000000d0370fe000]
>    java.lang.Thread.State: RUNNABLE
>    JavaThread state: _thread_in_native
> 0x00007ffbe5fd10a8    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xa8
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10db    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xdb
> 0x00007ffbe5fd10d0    NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI 
> + 0xd0
> 0x00007ffbe5fd10db    NoFramePointe...

I don't know why these call stacks were produced... It's strange.
I tested this PR with cl.exe 19.50.35721 by VS 2026 18.1.1, I didn't see such 
call stacks.

`callJNI()` makes recursive call, but it should include Java upcall (you can 
see it as LingeredAppWithNativeMethod.callback()`)

Top of call stacks is `callJNI()`, thus I believe it has valid RSP/RBP/RIP 
(passed by `WindbgCDebugger::topFrameForThread`). `callJNI` is JNI function in 
NoFramePointer.dll generated by cl.exe (in usual (I believe) on OpenJDK build 
environment), thus I think `GetStackTrace` API works.
Each `NoFramePointer!Java_LingeredAppWithNativeMethod_callJNI` has instruction 
address, it means they were unwinded by the API, thus I think we need to 
investigate assembly code in NoFramePointer.dll to know what happens...

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

PR Review Comment: https://git.openjdk.org/jdk/pull/29019#discussion_r2692734686

Reply via email to