RFR: 8263512: [macos_aarch64] issues with calling va_args functions from invoke_native [v5]
Nick Gasson
ngasson at openjdk.java.net
Fri Jun 4 12:41:11 UTC 2021
> 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 seven commits:
- Redundant cast to long
- Merge master
Change-Id: I49bef0437b4c47bef8bf74d192299d06b25e1555
CustomizedGitHooks: yes
- Update test/jdk/java/foreign/valist/VaListTest.java
Co-authored-by: Jorn Vernee <JornVernee at users.noreply.github.com>
- No variadic upcalls
Change-Id: Ibf91c570c88be2587e9e23240477c4a5cc56b4c5
CustomizedGitHooks: yes
- 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.
-------------
Changes: https://git.openjdk.java.net/jdk/pull/3617/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3617&range=04
Stats: 777 lines in 14 files changed: 571 ins; 115 del; 91 mod
Patch: https://git.openjdk.java.net/jdk/pull/3617.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3617/head:pull/3617
PR: https://git.openjdk.java.net/jdk/pull/3617
More information about the core-libs-dev
mailing list