RFR: 8336042: Caller/callee param size mismatch in deoptimization causes crash

Dean Long dlong at openjdk.org
Wed Feb 12 21:01:15 UTC 2025


On Wed, 12 Feb 2025 12:44:18 GMT, Richard Reingruber <rrich at openjdk.org> wrote:

>> src/hotspot/cpu/ppc/abstractInterpreter_ppc.cpp line 136:
>> 
>>> 134:     // Test caller-aligned placement vs callee-aligned
>>> 135:     intptr_t* l2 = caller->sp() + method->max_locals() - 1 + (frame::java_abi_size / Interpreter::stackElementSize);
>>> 136:     assert(l2 >= locals_base, "bad placement");
>> 
>> The assertion at L136 fails on ppc64 (similar to what @offamitkumar reported for s390x).
>> I don't understand the assertion because it is just a stricter version of the fist one.
>> On ppc64 the sp of `caller` is aligned down because it needs to be 16 byte aligned. `locals_base` is only 8 byte aligned. But from what I saw the difference was larger then just one word. Maybe `caller` has got an c2i extension? I guess this would be problematic.
>> On x86_64 `l2` depends on the last expression stack pointer not on the `caller`'s sp. If you try to translate this to ppc64 then you'll get the expression used to initialize `locals_base` at L128.
>> I think you can remove the 2nd assertion. Even the first one looks redundant.
>> Besides that I've tested `MHDeoptTest.java` successfully on ppc64.
>
>> Maybe `caller` has got an c2i extension? I guess this would be problematic.
> 
> I meant i2c extension.

The two asserts together are supposed to be an upper and lower bound.  The first assert is a stricter version of the assert that was originally added by JDK-7090904.  It looks like the 2nd assert should have been reversed, assuming l2 is correct.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23557#discussion_r1953390060


More information about the hotspot-dev mailing list