[PATCH] D156784: [AArch64][PAC] Declare FPAC subtarget feature

Anatoly Trosinenko via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 1 03:30:04 PDT 2023


atrosinenko created this revision.
atrosinenko added reviewers: ab, kristof.beyls, apazos, pcc, psmith, t.p.northover.
Herald added a subscriber: hiraditya.
Herald added a project: All.
atrosinenko requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

In some situations, such as re-signing pointers or performing tail
calls, the code generator has to authenticate a signed pointer that will
not be dereferenced immediately. In such cases it may be necessary to
emit extra code to make sure that the authentication succeeded to prevent
introducing authentication/signing oracles.

If the target CPU is known to support FEAT_FPAC, this extra code can be
skipped as AUT* instructions are known to fault on invalid PAC by
themselves.

Note that unlike many other features, FEAT_FPAC does not add any new
supported instructions, but changes the semantics of several existing
ones. Thus, care should be taken to not enable FPAC when not actually
supported as it does not make code fail explicitly under normal
operation, but makes it less secure on unsupported CPUs.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D156784

Files:
  clang/lib/Basic/Targets/AArch64.cpp
  clang/lib/Basic/Targets/AArch64.h
  llvm/lib/Target/AArch64/AArch64.td


Index: llvm/lib/Target/AArch64/AArch64.td
===================================================================
--- llvm/lib/Target/AArch64/AArch64.td
+++ llvm/lib/Target/AArch64/AArch64.td
@@ -316,6 +316,10 @@
     "pauth", "HasPAuth", "true",
     "Enable v8.3-A Pointer Authentication extension (FEAT_PAuth)">;
 
+def FeatureFPAC : SubtargetFeature<
+    "fpac", "HasFPAC", "true",
+    "Assume AUT* instructions generate fault on invalid PAC (FEAT_FPAC)">;
+
 def FeatureJS : SubtargetFeature<
     "jsconv", "HasJS", "true",
     "Enable v8.3-A JavaScript FP conversion instructions (FEAT_JSCVT)",
Index: clang/lib/Basic/Targets/AArch64.h
===================================================================
--- clang/lib/Basic/Targets/AArch64.h
+++ clang/lib/Basic/Targets/AArch64.h
@@ -45,6 +45,7 @@
   bool HasMTE = false;
   bool HasTME = false;
   bool HasPAuth = false;
+  bool HasFPAC = false;
   bool HasLS64 = false;
   bool HasRandGen = false;
   bool HasMatMul = false;
Index: clang/lib/Basic/Targets/AArch64.cpp
===================================================================
--- clang/lib/Basic/Targets/AArch64.cpp
+++ clang/lib/Basic/Targets/AArch64.cpp
@@ -909,6 +909,8 @@
       HasTME = true;
     if (Feature == "+pauth")
       HasPAuth = true;
+    if (Feature == "+fpac")
+      HasFPAC = true;
     if (Feature == "+i8mm")
       HasMatMul = true;
     if (Feature == "+bf16")


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156784.545993.patch
Type: text/x-patch
Size: 1405 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230801/14251666/attachment.bin>


More information about the cfe-commits mailing list