Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8350111

[PPC] AsyncGetCallTrace crashes when called while handling SIGTRAP

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 25
    • 25
    • hotspot
    • svc
    • 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.

            rrich Richard Reingruber
            rrich Richard Reingruber
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: