> 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 <jornver...@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

Reply via email to