RFR: 8365229: ARM32: c2i_no_clinit_check_entry assert failed after JDK-8364269
Aleksey Shipilev
shade at openjdk.org
Wed Aug 13 17:58:14 UTC 2025
On Tue, 12 Aug 2025 16:18:49 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
>> When recording adapter entries, we record _offsets_, not the actual addresses:
>>
>>
>> entry_offset[3] = handler->get_c2i_no_clinit_check_entry() - i2c_entry;
>>
>>
>> Every platform except ARM32 and Zero have all these entries set up, so offset are always sane. But those two platforms set up `nullptr` as `c2i_no_clinit_check_entry()`, because clinit barriers are unimplemented. So the new assert added in [JDK-8364269](https://bugs.openjdk.org/browse/JDK-8364269) fails encountering effectively `nullptr - i2c_entry` "garbage".
>>
>> This PR is the second least horrible (IMO) fix for this: relaxing assert by checking that "out of range" values are actually wrapping around back to `0`/`nullptr`. Had to do it in unsigned ints to avoid UB. For the affected platforms, we do not actually access this problematic/garbage entry offset, since we are always checking if clinit barriers are enabled. So the assert is the only place where it matters.
>>
>> The least horrible solution would be storing the actual `address`-es instead of `int` offsets. But that likely has footprint implications.
>>
>> Additional testing:
>> - [x] Linux x86_64 server fastdebug, `runtime/cds` still works
>> - [x] Linux ARM32 server fastdebug, `java -version` now works
>> - [x] Linux x86_64 zero fastdebug, `make bootcycle-images` now works
>
> An other, more complex, solution would be to check `handler->get_c2i_*_entry()` for `nullptr` in `generate_adapter_code()` where we set offsets and set offset to 0. Then we can relax assert to `entry_offset[i] >= 0`. We can also remove `entry_offset[0] == 0` check before loop too. and start loop with `i = 0`.
>
> But it is more complicated.
If you agree with this version, @vnkozlov, I'll integrate.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26746#issuecomment-3184901694
More information about the hotspot-compiler-dev
mailing list