On Fri, 22 Nov 2024 14:31:23 GMT, Jorn Vernee <[email protected]> wrote:
> Allow `captureCallState` and `critical(true)` linker options to be combined.
> This allows passing a Java array to capture call state.
>
> One caveat is that the linker expects the memory to be aligned, which means
> that at least an `int[]` has to be used (i.e. `byte[]` will no work).
>
> This patch contains two implementations: one for the linkers that use
> `CallingSequenceBuilder`. That one is quite straight-forward, as we can just
> mimic what we already do for other memory segment arguments, but also for the
> capture state segment. i.e. split it into base and offset, and pass that down
> to our downcall stub. The stub will then add the offset and oop together, and
> pass use the resulting address to write to.
>
> The other implementation is for the fallback linker. This handles the capture
> state a little differently, but essentially currently just passes the native
> address to the back end for the native code to write the captured state into.
> I've just added another heap base parameter for that capture state segment to
> the back end, which is then turned into a native address using JNI's
> `GetPrimitiveArrayCritical`, similarly to what we do for other heap segments.
>
> Testing: `jdk_foreign` test suite.
src/java.base/share/classes/jdk/internal/foreign/abi/CallingSequence.java line
198:
> 196: }
> 197:
> 198: public boolean usingAddressPairs() {
Nit: Copyright years
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/22327#discussion_r1861663749