RFR: 8263512: [macos_aarch64] issues with calling va_args functions from invoke_native

Nick Gasson ngasson at openjdk.java.net
Thu Apr 22 08:25:47 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.


Commit messages:
 - 8263512: [macos_aarch64] issues with calling va_args functions from invoke_native

Changes: https://git.openjdk.java.net/jdk/pull/3617/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3617&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8263512
  Stats: 770 lines in 12 files changed: 568 ins; 112 del; 90 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