On Tue, 10 Mar 2026 18:34:06 GMT, Markus Grönlund <[email protected]> wrote:
>> JFR Cooperative Sampling relies on a trick to reconstruct a sampled frame at >> the method exit poll instruction, because at that location, the frame has >> already been popped. The trick takes the frame_size() from the nmethod and >> subtracts that value from the SafepointBlob sender frames' sp, thus >> recreating the form of the just popped frame. >> >> With Valhalla's new scalarized and non-scalarized frames and calling >> conventions, this trick no longer works because the actual frame size is not >> kept in the nmethod; instead, it is part of the frame itself, on the stack >> (it's the first word below rbp). The problem for JFR Cooperative Sampling is >> that, at frame reconstruction time, the SafepointBlob stub will have >> overwritten the sp_inc slot of the popped frame, making frame reconstruction >> problematic and next to impossible. >> >> [JDK-8368099](https://bugs.openjdk.org/browse/JDK-8368099) provided a >> workaround for this problem by skipping all sampled frames with the property >> "needs_stack_repair" and moving directly to the sender frame instead. This >> results in biased sampling for nearly all samples taken inside frames whose >> next poll instruction is the method exit return. >> >> This solution handles both scalarized and non-scalarized frame layouts. >> >> Testing: jdk_valhalla, hotspot_valhalla, hotspot_valhalla_runtime, jdk_jfr, >> stress testing >> >> Thanks >> Markus > > Markus Grönlund has updated the pull request incrementally with one > additional commit since the last revision: > > removed unused function Looks good, thanks! ------------- Marked as reviewed by pchilanomate (no project role). PR Review: https://git.openjdk.org/valhalla/pull/2176#pullrequestreview-3925856715
