[foreign-abi] RFR: 8248420: Add a variant of VaList::make which takes a NativeScope [v6]
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Thu Jul 16 13:48:40 UTC 2020
On Thu, 16 Jul 2020 13:03:48 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
>> Hi,
>>
>> This patch adds overloads to several VaList related methods that might need to do allocations, namely, VaList::make,
>> VaList::vargAsSegment, and VaList::copy.
>> In order to share the existing code, I've added an `Allocator` helper interface that can wrap either a NativeScope, or
>> be used as a functional interface to bind to MemorySegment::allocateNative.
>> While testing this patch, I've also discovered a bug in the SysV implementation; The VaList::Builder was allocating a
>> MemorySegment for the VaList, then creating the SysVVaList object wrapping that segment, and then filling in some of
>> the contents of the segment. But, the SysVVaList constructor was also trying to read from the segment as well, and as a
>> result was reading uninitialized fields. This is a problem when creating a VaList in Java, and then trying to read from
>> it also in Java. I've restructured the code a bit to fix this problem, moving the reading logic from the constructor
>> to a static factory called readFromSegment, so that it's clear that only a fully initialized segment should be passed.
>> The builder still calls the constructor directly, but it now requires all field values to be passed in explicitly.
>> There was a similar problem in the AArch64 implementation, which I've tried to fix. Unfortunately I was not able to
>> fully test this change since there was a failure elsewhere in the testing infrastructure, and I currently don't have
>> direct access to an aarch64 machine to be able to debug that. I did end up fixing some build failures on aarch64 in the
>> process though, which I will submit another PR for. Thanks, Jorn
>
> Jorn Vernee has updated the pull request incrementally with two additional commits since the last revision:
>
> - Fix whitespace error
> - Add extra test for liveness of copied VaList without using scope
>From user perspective it does look simpler, as now all va lists behave similarly. One minor comment is that, I think,
you can use just a memory scope to track liveness, instead of creating a full segment (since you never really use its
segment-y properties)
-------------
Marked as reviewed by mcimadamore (Committer).
PR: https://git.openjdk.java.net/panama-foreign/pull/237
More information about the panama-dev
mailing list