XMLWordPrintable

    Details

    • Type: Sub-task
    • Status: New
    • Priority: P4
    • Resolution: Unresolved
    • Affects Version/s: 17
    • Fix Version/s: tbd
    • Component/s: hotspot
    • Subcomponent:
      jfr
    • CPU:
      x86

      Description

      When the signal sent for AsyncGetCallTrace or JFR would land on a stub
      (like arraycopy), it wouldn't be able to detect the sender (caller)
      frame because `_cb->frame_size() == 0`.

      Because we fully control how the prolog and epilog of stub code is
      generated, we know there are two cases:
      1. A stack frame is allocated via macroAssembler->enter(), and consists
      in `push rbp; mov rsp, rbp;`.
      2. No stack frames are allocated and rbp is left unchanged and rsp is
      decremented with the `call` instruction that push the return `pc` on the
      stack.

      For case 1., we can easily know the sender frame by simply looking at
      rbp, especially since we know that all stubs preserve the frame pointer
      (on x86 at least).

      For case 2., we end up returning the sender's sender, but that already
      gives us more information than what we have today.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              luhenry Ludovic Henry
              Reporter:
              luhenry Ludovic Henry
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Dates

                Created:
                Updated: