> 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 incrementally with one additional 
commit since the last revision:

  No variadic upcalls
  
  Change-Id: Ibf91c570c88be2587e9e23240477c4a5cc56b4c5
  CustomizedGitHooks: yes

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/3617/files
  - new: https://git.openjdk.java.net/jdk/pull/3617/files/645ccb3d..251aae68

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3617&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3617&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 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