On Fri, 1 Nov 2024 07:14:35 GMT, Dean Long <[email protected]> wrote:
>>> OK, so you're saying it's the stack adjustment that's the problem. It
>>> sounds like there is code that is using rsp instead of last_Java_sp to
>>> compute the frame boundary. Isn't that a bug that should be fixed?
>>>
>> It's not a bug, it's just that the code from the runtime stub only cares
>> about the actual rsp, not last_Java_sp. We are returning to the pc right
>> after the call so we need to adjust rsp to what the runtime stub expects.
>> Both alternatives will work, either changing the runtime stub to set last pc
>> and not push those two extra words, or your suggestion of just setting the
>> last pc to the instruction after the adjustment. Either way it requires to
>> change the c2 code though which I'm not familiar with. But if you can
>> provide a patch I'm happy to apply it and we can remove this
>> `possibly_adjust_frame()` method.
>
> It turns out if we try to set last pc to the instruction after the
> adjustment, then we need an oopmap there, and that would require more C2
> changes. Then I thought about restoring SP from FP or last_Java_fp, but I
> don't think we can rely on either of those being valid after resume from
> preemption, so I'll try the other alternative.
Here's my suggested C2 change:
diff --git a/src/hotspot/cpu/aarch64/aarch64.ad
b/src/hotspot/cpu/aarch64/aarch64.ad
index d9c77a2f529..1e99db191ae 100644
--- a/src/hotspot/cpu/aarch64/aarch64.ad
+++ b/src/hotspot/cpu/aarch64/aarch64.ad
@@ -3692,14 +3692,13 @@ encode %{
__ post_call_nop();
} else {
Label retaddr;
+ // Make the anchor frame walkable
__ adr(rscratch2, retaddr);
+ __ str(rscratch2, Address(rthread, JavaThread::last_Java_pc_offset()));
__ lea(rscratch1, RuntimeAddress(entry));
- // Leave a breadcrumb for JavaFrameAnchor::capture_last_Java_pc()
- __ stp(zr, rscratch2, Address(__ pre(sp, -2 * wordSize)));
__ blr(rscratch1);
__ bind(retaddr);
__ post_call_nop();
- __ add(sp, sp, 2 * wordSize);
}
if (Compile::current()->max_vector_size() > 0) {
__ reinitialize_ptrue();
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21565#discussion_r1826252551