This patch enables PAC and AUT instructions for pointer signing and
authentication in JIT code on Windows/ARM64 when "UseBranchProtection"
flag is set and when the processor supports the feature.

Specifically, JVM detects hardware support by reading ID_AA64ISAR1_EL1
and ID_AA64ISAR2_EL1 registers via CP4031 and CP4032 keys in the Windows
registry.  Then, if the "UseBranchProtection" flag is set, then HotSpot
emits the signing and authenticating instructions.  Windows uses
AArch64's "B" key, so this patch selects between "paciaz" and "pacibz"
instructions (and similarly, between "autiaz" and "autibz" instructions)
depending on whether HotSpot is being compiled for Linux versus Windows.
Both the MacroAssembler and the Windows' PAC helpers need to stay in
sync, so this patch needs changes to both macroAssembler_aarch64.cpp as
well as pauth_windows_aarch64.inline.hpp.

Since Linux supports both "A" as well as "B" keys, it's possible to use
"B" keys for both Linux and Windows, although I fear doing so may
introduce more churn in the code.

This patch also introduces a cross-platform (Linux and Windows) test
that compiles and runs a method under both C1 and C2 before checking
whether the generated instructions include the "paci[ab]z" and the
"auti[ab]z" instructions.

Since CI doesn't test with branch protection enabled, I manually changed
the default value of "UseBranchProtection" in globals_aarch64.cpp to be
"pac-ret" before running tier 1 through tier 3 tests in the HotSpot,
JDK, and LangTools test groups to ensure that this patch does not
introduce any new failures.  I also validated this patch by running the
same tests with the default value for "UseBranchProtection".

---------
- [x] I confirm that I make this contribution in accordance with the [OpenJDK 
Interim AI Policy](https://openjdk.org/legal/ai).

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

Commit messages:
 - Enable pointer authentication for JIT code on Windows/ARM64

Changes: https://git.openjdk.org/jdk/pull/33595/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=33595&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8395991
  Stats: 217 lines in 10 files changed: 204 ins; 0 del; 13 mod
  Patch: https://git.openjdk.org/jdk/pull/33595.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/33595/head:pull/33595

PR: https://git.openjdk.org/jdk/pull/33595

Reply via email to