RFR: 8263512: [macos_aarch64] issues with calling va_args functions from invoke_native [v2]
Nick Gasson
ngasson at openjdk.java.net
Thu Jun 3 03:29:04 UTC 2021
On Thu, 3 Jun 2021 03:09:58 GMT, Nick Gasson <ngasson at openjdk.org> wrote:
>> macOS on Apple silicon uses slightly different ABI conventions to the
>> standard AArch64 ABI. The differences are outlined in [1]. In
>> particular in the standard (AAPCS) ABI, variadic arguments may be passed
>> in either registers or on the stack following the normal calling
>> convention. To handle this, va_list is a struct containing separate
>> pointers for arguments located in integer registers, floating point
>> registers, and on the stack. Apple's ABI simplifies this by passing all
>> variadic arguments on the stack and the va_list type becomes a simple
>> char* pointer.
>>
>> This patch adds a new MacOsAArch64 CABI type and MacOsAArch64Linker to
>> represent the new ABI variant on macOS. StackVaList is based on
>> WinVaList lightly modified to handle the different TypeClasses on
>> AArch64. The original AArch64Linker is renamed to AapcsLinker and is
>> currently used for all non-Mac platforms. I think we also need to add a
>> WinAArch64 CABI but I haven't yet been able to test on a Windows system
>> so will do that later.
>>
>> The macOS ABI also uses a different method of spilling arguments to the
>> stack (the standard ABI pads each argument to a multiple of 8 byte stack
>> slots, but the Mac ABI packs arguments according to their natural
>> alignment). None of the existing tests exercise this so I'll open a new
>> JBS issue and work on that separately.
>>
>> Tested jdk_foreign on macOS AArch64, Linux AArch64, and Linux X86_64.
>>
>> [1] https://developer.apple.com/documentation/xcode/writing_arm64_code_for_apple_platforms
>
> Nick Gasson has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains three commits:
>
> - Fixes after JEP integratioN
>
> Change-Id: Iaa13b3869522c8814c3f7ef4c1eac8e8267657e6
> CustomizedGitHooks: yes
> - merge master
>
> Change-Id: Ic06fec084099ff2053dd251a255cbbf4a64a59d7
> CustomizedGitHooks: yes
> - 8263512: [macos_aarch64] issues with calling va_args functions from invoke_native
>
> macOS on Apple silicon uses slightly different ABI conventions to the
> standard AArch64 ABI. The differences are outlined in [1]. In
> particular in the standard (AAPCS) ABI, variadic arguments may be passed
> in either registers or on the stack following the normal calling
> convention. To handle this, va_list is a struct containing separate
> pointers for arguments located in integer registers, floating point
> registers, and on the stack. Apple's ABI simplifies this by passing all
> variadic arguments on the stack and the va_list type becomes a simple
> char* pointer.
>
> This patch adds a new MacOsAArch64 CABI type and MacOsAArch64Linker to
> represent the new ABI variant on macOS. StackVaList is based on
> WinVaList lightly modified to handle the different TypeClasses on
> AArch64. The original AArch64Linker is renamed to AapcsLinker and is
> currently used for all non-Mac platforms. I think we also need to add a
> WinAArch64 CABI but I haven't yet been able to test on a Windows system
> so will do that later.
>
> The macOS ABI also uses a different method of spilling arguments to the
> stack (the standard ABI pads each argument to a multiple of 8 byte stack
> slots, but the Mac ABI packs arguments according to their natural
> alignment). None of the existing tests exercise this so I'll open a new
> JBS issue and work on that separately.
>
> Tested jdk_foreign on macOS AArch64, Linux AArch64, and Linux X86_64.
I've rebased this on the latest master after the JEP integration and fixed the issues above. Should be good to re-review. I've done the suggested renaming to LinuxAArch64Linker, MacOsAArch64Linker, etc.
-------------
PR: https://git.openjdk.java.net/jdk/pull/3617
More information about the core-libs-dev
mailing list