-
Bug
-
Resolution: Fixed
-
P4
-
25
-
b13
-
ppc
Symptom: assert(_pc != nullptr) failed: must have PC
Stack from core:
#25 0x00007fffb6e21ba8 in report_vm_error (file=0x7fffb82828b0 "src/hotspot/cpu/ppc/frame_ppc.inline.hpp", line=41, error_msg=0x7fffb8282890 "assert(_pc != nullptr) failed", detail_fmt=0x7fffb8282880 "must have PC") at src/hotspot/share/utilities/debug.cpp:196
#26 0x00007fffb6b017d0 in frame::setup (this=0x7ffe4abf7970, knd=frame::kind::code_blob) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:41
#27 0x00007fffb6b01e20 in frame::frame (this=0x7ffe4abf7970, sp=0x7ffe4abfb370, pc=0x0, knd=frame::kind::code_blob) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:102
#28 0x00007fffb6b02204 in frame::sender_raw (this=0x7ffe4abf7a00, map=0x7ffe4abf7a40) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:312
#29 0x00007fffb6b0226c in frame::sender (this=0x7ffe4abf7a00, map=0x7ffe4abf7a40) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:316
#30 0x00007fffb700dc14 in find_initial_Java_frame (thread=0x7fff893d8f60, fr=0x7ffe4abf8978, initial_frame_p=0x7ffe4abf81b0, method_p=0x7ffe4abf81a8, bci_p=0x7ffe4abf81a0) at src/hotspot/share/prims/forte.cpp:378
#31 0x00007fffb700e42c in forte_fill_call_trace_given_top (thd=0x7fff893d8f60, trace=0x7ffe4abf8b38, depth=2048, top_frame=...) at src/hotspot/share/prims/forte.cpp:484
#32 0x00007fffb700eb08 in AsyncGetCallTrace (trace=0x7ffe4abf8b38, depth=2048, ucontext=0x7ffe4abf8d90) at src/hotspot/share/prims/forte.cpp:664
#33 0x00007fffb5ddb128 in Profiler::getJavaTraceAsync (this=0x7fffb0033250, ucontext=0x7ffe4abf8d90, frames=0x7fff88649ad0, max_depth=2048, java_ctx=0x7ffe4abf8c20) at src/profiler.cpp:429
#34 0x00007fffb5ddc500 in Profiler::recordSample (this=0x7fffb0033250, ucontext=0x7ffe4abf8d90, counter=50000, event_type=WALL_CLOCK_SAMPLE, event=0x7ffe4abf8cb8) at src/profiler.cpp:666
#35 0x00007fffb5df67d4 in WallClock::signalHandler (signo=26, siginfo=0x7ffe4abf9b10, ucontext=0x7ffe4abf8d90) at src/wallClock.cpp:134
#36 <signal handler called>
#37 Atomic::PlatformLoad<4ul>::operator()<unsigned int> (this=0x7ffe4abf9e0f, dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:553
#38 0x00007fffb663a21c in Atomic::LoadImpl<unsigned int, Atomic::PlatformLoad<4ul>, void>::operator() (this=0x7ffe4abf9e5f, dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:516
#39 0x00007fffb6639ebc in Atomic::load<unsigned int> (dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:873
#40 0x00007fffb663a330 in Atomic::PlatformOrderedLoad<4ul, (ScopedFenceType)0>::operator()<unsigned int> (this=0x7ffe4abf9efb, p=0x7fff893d93e4) at src/hotspot/os_cpu/linux_ppc/atomic_linux_ppc.hpp:411
#41 0x00007fffb663a19c in Atomic::LoadImpl<JavaThreadState, Atomic::PlatformOrderedLoad<4ul, (ScopedFenceType)0>, void>::operator() (this=0x7ffe4abf9f4f, dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:537
#42 0x00007fffb6639e58 in Atomic::load_acquire<JavaThreadState> (p=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:887
#43 0x00007fffb6639870 in JavaThread::thread_state (this=0x7fff893d8f60) at src/hotspot/share/runtime/javaThread.inline.hpp:146
#44 0x00007fffb79963ac in PosixSignals::pd_hotspot_signal_handler (sig=5, info=0x7ffe4abfb0f0, uc=0x7ffe4abfa370, thread=0x7fff893d8f60) at src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp:248
#45 0x00007fffb7d27b7c in JVM_handle_linux_signal (sig=5, info=0x7ffe4abfb0f0, ucVoid=0x7ffe4abfa370, abort_if_unrecognized=1) at src/hotspot/os/posix/signals_posix.cpp:635
#46 0x00007fffb7d27c8c in javaSignalHandler (sig=5, info=0x7ffe4abfb0f0, context=0x7ffe4abfa370) at src/hotspot/os/posix/signals_posix.cpp:658
#47 0x00007fffb5ddd654 in Profiler::trapHandler (this=0x7fffb0033250, signo=5, siginfo=0x7ffe4abfb0f0, ucontext=0x7ffe4abfa370) at src/profiler.cpp:859
#48 0x00007fffb5daf444 in AllocTracer::trapHandler (signo=5, siginfo=0x7ffe4abfb0f0, ucontext=0x7ffe4abfa370) at src/allocTracer.cpp:43
#49 <signal handler called>
#50 0x00007fffa246713c in ?? ()
#51 0x00007fffa273804c in ?? ()
Analysis:
async-profiler intercepts SIGTRAP(5) and forwards it to JVM_handle_linux_signal (frame #47, #46).
On ppc64 SIGTRAP is not uncommon. E.g. failed array range checks can generate SIGTRAP.
JVM_handle_linux_signal is interrupted to sample the stack (frame #36).
In AsyncGetCallTrace we observe _thread_in_Java but the frame we create from the ucontext is problematic because the ucontext corresponds to some runtime method (frame #37 in the backtrace above).
The assertion fails when trying to create the sender for (frame*)0x7ffe4abf7a00 (i.e. frame #37). Probably the return pc was not yet stored at the location where the interrupt occurred.
Stack from core:
#25 0x00007fffb6e21ba8 in report_vm_error (file=0x7fffb82828b0 "src/hotspot/cpu/ppc/frame_ppc.inline.hpp", line=41, error_msg=0x7fffb8282890 "assert(_pc != nullptr) failed", detail_fmt=0x7fffb8282880 "must have PC") at src/hotspot/share/utilities/debug.cpp:196
#26 0x00007fffb6b017d0 in frame::setup (this=0x7ffe4abf7970, knd=frame::kind::code_blob) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:41
#27 0x00007fffb6b01e20 in frame::frame (this=0x7ffe4abf7970, sp=0x7ffe4abfb370, pc=0x0, knd=frame::kind::code_blob) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:102
#28 0x00007fffb6b02204 in frame::sender_raw (this=0x7ffe4abf7a00, map=0x7ffe4abf7a40) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:312
#29 0x00007fffb6b0226c in frame::sender (this=0x7ffe4abf7a00, map=0x7ffe4abf7a40) at src/hotspot/cpu/ppc/frame_ppc.inline.hpp:316
#30 0x00007fffb700dc14 in find_initial_Java_frame (thread=0x7fff893d8f60, fr=0x7ffe4abf8978, initial_frame_p=0x7ffe4abf81b0, method_p=0x7ffe4abf81a8, bci_p=0x7ffe4abf81a0) at src/hotspot/share/prims/forte.cpp:378
#31 0x00007fffb700e42c in forte_fill_call_trace_given_top (thd=0x7fff893d8f60, trace=0x7ffe4abf8b38, depth=2048, top_frame=...) at src/hotspot/share/prims/forte.cpp:484
#32 0x00007fffb700eb08 in AsyncGetCallTrace (trace=0x7ffe4abf8b38, depth=2048, ucontext=0x7ffe4abf8d90) at src/hotspot/share/prims/forte.cpp:664
#33 0x00007fffb5ddb128 in Profiler::getJavaTraceAsync (this=0x7fffb0033250, ucontext=0x7ffe4abf8d90, frames=0x7fff88649ad0, max_depth=2048, java_ctx=0x7ffe4abf8c20) at src/profiler.cpp:429
#34 0x00007fffb5ddc500 in Profiler::recordSample (this=0x7fffb0033250, ucontext=0x7ffe4abf8d90, counter=50000, event_type=WALL_CLOCK_SAMPLE, event=0x7ffe4abf8cb8) at src/profiler.cpp:666
#35 0x00007fffb5df67d4 in WallClock::signalHandler (signo=26, siginfo=0x7ffe4abf9b10, ucontext=0x7ffe4abf8d90) at src/wallClock.cpp:134
#36 <signal handler called>
#37 Atomic::PlatformLoad<4ul>::operator()<unsigned int> (this=0x7ffe4abf9e0f, dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:553
#38 0x00007fffb663a21c in Atomic::LoadImpl<unsigned int, Atomic::PlatformLoad<4ul>, void>::operator() (this=0x7ffe4abf9e5f, dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:516
#39 0x00007fffb6639ebc in Atomic::load<unsigned int> (dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:873
#40 0x00007fffb663a330 in Atomic::PlatformOrderedLoad<4ul, (ScopedFenceType)0>::operator()<unsigned int> (this=0x7ffe4abf9efb, p=0x7fff893d93e4) at src/hotspot/os_cpu/linux_ppc/atomic_linux_ppc.hpp:411
#41 0x00007fffb663a19c in Atomic::LoadImpl<JavaThreadState, Atomic::PlatformOrderedLoad<4ul, (ScopedFenceType)0>, void>::operator() (this=0x7ffe4abf9f4f, dest=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:537
#42 0x00007fffb6639e58 in Atomic::load_acquire<JavaThreadState> (p=0x7fff893d93e4) at src/hotspot/share/runtime/atomic.hpp:887
#43 0x00007fffb6639870 in JavaThread::thread_state (this=0x7fff893d8f60) at src/hotspot/share/runtime/javaThread.inline.hpp:146
#44 0x00007fffb79963ac in PosixSignals::pd_hotspot_signal_handler (sig=5, info=0x7ffe4abfb0f0, uc=0x7ffe4abfa370, thread=0x7fff893d8f60) at src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp:248
#45 0x00007fffb7d27b7c in JVM_handle_linux_signal (sig=5, info=0x7ffe4abfb0f0, ucVoid=0x7ffe4abfa370, abort_if_unrecognized=1) at src/hotspot/os/posix/signals_posix.cpp:635
#46 0x00007fffb7d27c8c in javaSignalHandler (sig=5, info=0x7ffe4abfb0f0, context=0x7ffe4abfa370) at src/hotspot/os/posix/signals_posix.cpp:658
#47 0x00007fffb5ddd654 in Profiler::trapHandler (this=0x7fffb0033250, signo=5, siginfo=0x7ffe4abfb0f0, ucontext=0x7ffe4abfa370) at src/profiler.cpp:859
#48 0x00007fffb5daf444 in AllocTracer::trapHandler (signo=5, siginfo=0x7ffe4abfb0f0, ucontext=0x7ffe4abfa370) at src/allocTracer.cpp:43
#49 <signal handler called>
#50 0x00007fffa246713c in ?? ()
#51 0x00007fffa273804c in ?? ()
Analysis:
async-profiler intercepts SIGTRAP(5) and forwards it to JVM_handle_linux_signal (frame #47, #46).
On ppc64 SIGTRAP is not uncommon. E.g. failed array range checks can generate SIGTRAP.
JVM_handle_linux_signal is interrupted to sample the stack (frame #36).
In AsyncGetCallTrace we observe _thread_in_Java but the frame we create from the ucontext is problematic because the ucontext corresponds to some runtime method (frame #37 in the backtrace above).
The assertion fails when trying to create the sender for (frame*)0x7ffe4abf7a00 (i.e. frame #37). Probably the return pc was not yet stored at the location where the interrupt occurred.
- links to
-
Commit(master) openjdk/jdk/e4d3c97c
-
Review(master) openjdk/jdk/23641