RFR: 8263512: [macos_aarch64] issues with calling va_args functions from invoke_native [v3]
Jorn Vernee
jvernee at openjdk.java.net
Fri Jun 4 11:11:00 UTC 2021
On Fri, 4 Jun 2021 11:04:33 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
>> Nick Gasson has updated the pull request incrementally with one additional commit since the last revision:
>>
>> No variadic upcalls
>>
>> Change-Id: Ibf91c570c88be2587e9e23240477c4a5cc56b4c5
>> CustomizedGitHooks: yes
>
> test/jdk/java/foreign/valist/VaListTest.java line 706:
>
>> 704: vaList.skip(BigPoint_LAYOUT);
>> 705: assertEquals((long) vaList.vargAsLong(C_LONG), 42);
>> 706: })},
>
> Looks like a carrier size mismatch here:
>
>
> java.lang.IllegalArgumentException: Carrier size mismatch: long != b32[abi/kind=LONG]
> at jdk.incubator.foreign/jdk.internal.foreign.Utils.checkPrimitiveCarrierCompat(Utils.java:111)
> at jdk.incubator.foreign/jdk.internal.foreign.abi.SharedUtils.checkCompatibleType(SharedUtils.java:231)
> at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.windows.WinVaList.read(WinVaList.java:114)
> at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.windows.WinVaList.read(WinVaList.java:109)
> at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.windows.WinVaList.vargAsLong(WinVaList.java:84)
> at VaListTest.lambda$upcalls$58(VaListTest.java:705)
> at jdk.incubator.foreign/jdk.internal.foreign.abi.ProgrammableInvoker.invokeNative(Native Method)
> at jdk.incubator.foreign/jdk.internal.foreign.abi.ProgrammableInvoker.invokeMoves(ProgrammableInvoker.java:290)
> at VaListTest.testUpcall(VaListTest.java:530)
>
>
> Need to use `C_LONG_LONG` to be cross-platform compatible. (sorry for not noticing this).
>
> Suggestion:
>
> { linkVaListCB("upcallBigStructPlusScalar"), VaListConsumer.mh(vaList -> {
> MemorySegment struct = vaList.vargAsSegment(BigPoint_LAYOUT, ResourceScope.newImplicitScope());
> assertEquals((long) VH_BigPoint_x.get(struct), 8);
> assertEquals((long) VH_BigPoint_y.get(struct), 16);
>
> assertEquals((long) vaList.vargAsLong(C_LONG_LONG), 42);
> })},
> { linkVaListCB("upcallBigStructPlusScalar"), VaListConsumer.mh(vaList -> {
> vaList.skip(BigPoint_LAYOUT);
> assertEquals((long) vaList.vargAsLong(C_LONG_LONG), 42);
> })},
Also, it looks like the cast to `(long)` on the `vaList.vargAsLong` lines is redundant (thanks IntelliJ).
-------------
PR: https://git.openjdk.java.net/jdk/pull/3617
More information about the core-libs-dev
mailing list