On Sun, 11 Jan 2026 07:33:12 GMT, Yasumasa Suenaga <[email protected]> wrote:

>> SA does not handle signal handler frame in mixed jstack as following:
>> 
>> 
>> ----------------- 1789 -----------------
>> "main" #1 prio=5 tid=0x00007f654c010000 nid=0x6fd runnable 
>> [0x00007f6551c0b000]
>>    java.lang.Thread.State: RUNNABLE
>>    JavaThread state: _thread_in_native
>> 0x00007f6551c0e735 __GI_abort + 0x8b
>> 0x00007f65511feb39 _ZN2os5abortEbPvPKv + 0x19
>> 0x00007f6551427569 
>> _ZN7VMError14report_and_dieEiPKcS1_P13__va_list_tagP6ThreadPhPvS7_S1_im + 
>> 0x579
>> 0x00007f6551427deb _ZN7VMError14report_and_dieEP6ThreadjPhPvS3_PKcz + 0x8b
>> 0x00007f6551427e1e _ZN7VMError14report_and_dieEP6ThreadjPhPvS3_ + 0x1e
>> 0x00007f6551209950 JVM_handle_linux_signal + 0x1c0
>> 0x00007f65511fd538 _ZL13signalHandleriP7siginfoPv + 0x38
>> 0x00007f6551c27290 ????????
>> 0x00007f653400f890 * NativeSEGV.doSEGV() bci:0 (Interpreted frame)
>> 0x00007f6534009c43 * NativeSEGV.main(java.lang.String[]) bci:76 line:37 
>> (Interpreted frame)
>> 0x00007f6534000849 <StubRoutines>
>> 0x00007f6550e847e9 
>> _ZN9JavaCalls11call_helperEP9JavaValueRK12methodHandleP17JavaCallArgumentsP6Thread
>>  + 0x3b9
>> 0x00007f6550eff1ba 
>> _ZL17jni_invoke_staticP7JNIEnv_P9JavaValueP8_jobject11JNICallTypeP10_jmethodIDP18JNI_ArgumentPusherP6Thread.isra.65.constprop.193
>>  + 0x1ba
>> 0x00007f6550f01824 jni_CallStaticVoidMethod + 0x164
>> 0x00007f6551e0582d JavaMain + 0xe4d
>> 0x00007f6551c7f464 start_thread + 0x2e4
>> 
>> 0x7f6551c27290 is a signal handler frame, and its caller is native frame. 
>> However jstack reports the caller is Java frame (`NativeSEGV.doSEGV()`).
>> 
>> It should be like following:
>> 
>> 
>> 0x00007fdbd170321a JVM_handle_linux_signal + 0x42a
>> 0x00007fdbd267b290 <signal handler called>
>> 0x00007fdbc7ecb3b1 Java_NativeSEGV_doSEGV + 0x18
>> 0x00007fdbb67468ba * NativeSEGV.doSEGV() bci:0 (Interpreted frame)
>> 
>> 
>> This is long standing bug (since JDK 9 at least).
>
> Yasumasa Suenaga has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains five additional 
> commits since the last revision:
> 
>  - Merge remote-tracking branch 'origin/master' into jhsdb-jstack-sighandler
>  - Merge remote-tracking branch 'origin/master' into jhsdb-jstack-sighandler
>  - Merge remote-tracking branch 'origin/master' into jhsdb-jstack-sighandler
>  - Fix
>  - 8374482: SA does not handle signal handler frame in mixed jstack

In worst case, we cannot unwind any call stacks under signal handler with 
exception due to referring invalid register value. 
https://github.com/openjdk/jdk/pull/29023#issuecomment-3734578612 is one of 
examples.


"main" #3 prio=5 tid=0x00007f556002aa10 nid=1231 runnable [0x00007f5567d0a000]
   java.lang.Thread.State: RUNNABLE
   JavaThread state: _thread_in_native
0x00007f5569509735      __GI_abort + 0x8b
0x00007f55680eadd5      os::abort(bool, void const*, void const*) [clone .cold] 
+ 0x4
0x00007f5568efa717      VMError::report_and_die(int, char const*, char const*, 
__va_list_tag*, Thread*, unsigned char*, void const*, void const*, char const*, 
int, unsigned long) + 0x4f7
0x00007f5568efaf1b      VMError::report_and_die(Thread*, unsigned int, unsigned 
char*, void const*, void const*, char const*, ...) + 0x8a
0x00007f5568efaf70      VMError::report_and_die(Thread*, unsigned int, unsigned 
char*, void const*, void const*) + 0x50
0x00007f5568d2ada3      JVM_handle_linux_signal + 0x2d2
0x00007f55695222c0              ????????
java.lang.NullPointerException: Cannot invoke 
"sun.jvm.hotspot.debugger.Address.addOffsetTo(long)" because "this.cfa" is null


Signal handler should be handled as a special case because we cannot use normal 
unwind method on signal handler to get caller (problematic frame) registers 
(SP/BP/IP).

Ideally the fix in 
[here](https://github.com/YaSuenag/jdk/compare/jhsdb-jstack-sighandler...YaSuenag:jdk:mixed-jstack-fix-for-optimized-code)
 should be included as I commented before, but I agree with you that it could 
increase technical debt...

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

PR Comment: https://git.openjdk.org/jdk/pull/29023#issuecomment-3752660516

Reply via email to