On Fri, 5 Nov 2021 11:06:53 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

>> This PR contains the API and implementation changes for JEP-419 [1]. A more 
>> detailed description of such changes, to avoid repetitions during the review 
>> process, is included as a separate comment.
>> 
>> [1] - https://openjdk.java.net/jeps/419
>
> Maurizio Cimadamore has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   * Add two new CLinker static methods to compute upcall/downcall method types
>   * Clarify section on CLinker downcall type
>   * Add section on CLinker safety guarantees

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/CLinker.java line 
65:

> 63:  * <li>if {@code L} is a {@link ValueLayout} with carrier {@code E} then 
> there are two cases:
> 64:  *     <ul>
> 65:  *         <li>if {@code L} occurs in a parameter position and {@code E} 
> is {@code NativeAddress.class},

This looks spurious

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/CLinker.java line 
134:

> 132:  * <p>
> 133:  * Upcall stubs are generally safer to work with, as the linker runtime 
> can validate the type of the target method
> 134:  * handle against the provided function descriptor and report an error 
> if any mismatch is detected. If the target method

But, in the case of upcalls, errors can still occur if the native code casts 
the pointer to the upcall stub to an incorrect type, e.g. 
`FunctionDescriptor.ofVoid(ADDRESS, ADDRESS)`, but on the native side cast it 
to `void (*)(void*)`, meaning the second argument would be garbage on the Java 
side. i.e. there is still room for a mismatch the same as with downcalls.

src/jdk.incubator.foreign/share/classes/jdk/incubator/foreign/CLinker.java line 
267:

> 265:     static MethodType upcallType(FunctionDescriptor functionDescriptor) {
> 266:         return SharedUtils.inferMethodType(functionDescriptor, true);
> 267:     }

Nice! :)

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

PR: https://git.openjdk.java.net/jdk/pull/5907

Reply via email to