[foreign-memaccess+abi] RFR: 8275332: Variadic functions don't work on Linux/AArch64

Andrew Haley aph at openjdk.java.net
Tue Oct 19 11:19:12 UTC 2021


On Tue, 19 Oct 2021 11:06:25 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> Variable length argument lists are handled differently in the
>> Mac/Windows and Linux ABIs on AArch64.  Following the recent API refresh
>> on the foreign-memaccess+abi branch the Mac behaviour was inadvertently
>> applied on Linux too.  This patch restores the correct behaviour on
>> Linux and adds a CallArranger unit test so regressions can be more
>> easily caught.
>> 
>> I just added an extra varArgsOnStack argument to
>> CallArranger.getBindings() as that seemed the simplest fix, although it
>> could get unwieldy if there were too many configurable options.
>
> src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/aarch64/CallArranger.java line 213:
> 
>> 211:         }
>> 212: 
>> 213:         void adjustForVarArgs(boolean varArgsOnStack) {
> 
> If I'm right this is the only place where something different needs to happen for the two ABIs? If so - perhaps we could consider a different restacking where we use inheritance from a common abstract class - but that would change the shape of the code a bit.

Please.

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

PR: https://git.openjdk.java.net/panama-foreign/pull/601


More information about the panama-dev mailing list