On Thu, 26 Feb 2026 15:28:49 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

This pull request has now been integrated.

Changeset: 4e71493b
Author:    Markus Grönlund <[email protected]>
Committer: David Simms <[email protected]>
URL:       
https://git.openjdk.org/valhalla/commit/4e71493b2314d0465e1b2abae88709762ec350c5
Stats:     310 lines in 8 files changed: 274 ins; 10 del; 26 mod

8378771: [lworld] JFR Cooperative Sampling support for needs_stack_repair 
methods and frames

Reviewed-by: pchilanomate, dsimms

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

PR: https://git.openjdk.org/valhalla/pull/2176

Reply via email to