On Thu, 12 Mar 2026 07:17:14 GMT, Damon Fenacci <[email protected]> wrote:

> # Issue
> AOT‑cached c2i adapters can mis-handle inline‑buffer oops when the JVM runs 
> with a different compressed‑oops mode than the one used when the AOT cache 
> was created, leading to wrong object decoding and test failures/crashes.
> 
> # Cause
> Adapters only need this special handling in Valhalla because inline types are 
> flattened and require heap buffers during c2i transitions, which are decoded 
> inside the adapter. If the runtime compressed‑oops settings 
> (UseCompressedOops, shift, base) differ from the AOT‑creation settings, the 
> adapter decodes those oops incorrectly (non‑Valhalla adapters don’t decode 
> inline‑buffer oops, so they don’t hit this path).
> 
> # Fix
> During AOT cache verification, if we detect any mismatch in compressed‑oops 
> flag, shift, or base, we disable AOT adapter caching, forcing adapters to be 
> regenerated at runtime with the correct configuration (this mirrors what the 
> VM already does for AOT stub caching). Logging has been slightly modified for 
> consistency.
> 
> # Testing
> Tier 1-3+
> JBS issue failing tests using `--enable-preview`
> `test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java`
>  had to be adapted to reflect the modified log

That looks reasonable to me.

src/hotspot/share/code/aotCodeCache.cpp line 512:

> 510: 
> 511:   // The following checks do not affect AOT code, but can disable
> 512:   // AOT stub/adapters caching if they are incompatible with runtime 
> settings.

One additional note: Can you add a comment here why we also need it for adapter 
caching? This could be surprising when coming from mainline.

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

Marked as reviewed by chagedorn (Committer).

PR Review: 
https://git.openjdk.org/valhalla/pull/2217#pullrequestreview-3936288788
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2217#discussion_r2924382681

Reply via email to