On Tue, 25 Jul 2023 19:17:38 GMT, Jorn Vernee <jver...@openjdk.org> wrote:

> Port of: https://github.com/openjdk/panama-foreign/pull/848 from the 
> panama-foreign repo.
> 
> Copying the PR body here for convenience:
> 
> Due to a bug in the downcall linker stub generation, we don't save the return 
> value when capturing call state for trivial functions, and the return value 
> gets corrupted.
> 
> We try not to save the return register around calls on the return path of a 
> downcall stub, if it is not needed. Currently we don't save the return 
> register when we're using a return buffer, since we write the return value to 
> the return buffer before the calls on the return path, which means it is safe 
> for those calls to overwrite the return register. But, the current logic also 
> says we don't need to save the return register if the function is trivial 
> (_needs_transition == false). The logic behind this was initially that, since 
> we don't have any calls on the return path, we don't need to save the return 
> register. But, after adding support for capturing call state, we now also 
> have a call on the return path for trivial functions that capture call state, 
> and around that call, we might need to save the return register.
> 
> The fix is to simply save the return register when capturing call state, 
> regardless of whether the function is trivial or not. In the case of just a 
> trivial function that doesn't capture call state, we still don't save the 
> return register around the return path calls for the thread state transition 
> (which is not needed), since we don't generate those thread state transitions 
> in the first first place.
> 
> Testing: jdk-tier1, jdk-tier2, jdk-tier5.

Looks good (already approved in panama repo)

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

Marked as reviewed by mcimadamore (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/15025#pullrequestreview-1547859411

Reply via email to