aarch64: Add +pauth flag for Pointer Authentication feature
authorPrzemyslaw Wirkus <przemyslaw.wirkus@arm.com>
Mon, 16 Nov 2020 21:17:25 +0000 (21:17 +0000)
committerPrzemyslaw Wirkus <przemyslaw.wirkus@arm.com>
Mon, 16 Nov 2020 21:22:09 +0000 (21:22 +0000)
New -march option +pauth enables PAuth vel PAC (Pointer Authentication)
feature.

gas/ChangeLog
gas/NEWS
gas/config/tc-aarch64.c
gas/doc/c-aarch64.texi
gas/testsuite/gas/aarch64/pac-feat.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/pac-feat.s [new file with mode: 0644]

index c289dd7ed3624ac5af857f151549817becef1ab5..cdbc1ca35da26f220cadc44ade5881733cc9b19a 100644 (file)
@@ -1,3 +1,11 @@
+2020-11-13  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+
+       * NEWS: Update news.
+       * config/tc-aarch64.c: Add option +pauth to -march.
+       * doc/c-aarch64.texi: Update docs.
+       * testsuite/gas/aarch64/pac-feat.d: New test.
+       * testsuite/gas/aarch64/pac-feat.s: New test.
+
 2020-11-16  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
 
        * NEWS: Update news.
index 1d4b4be9be1fbac530d643905a448f646d4ad0fc..6969d1cc3afd4cc36e5f0f72f9eee7fe11b414ae 100644 (file)
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -32,6 +32,9 @@
 * Add support for +ls64 feature for -march in Armv8.7 AArch64. Add atomic
   64-byte load/store instructions for this feature.
 
+* Add support for +pauth (Pointer Authentication) feature for -march in
+  AArch64.
+
 * Add support for Intel TDX instructions.
 
 * Add support for Intel Key Locker instructions.
index ca29fdc172483b0c1dc069ed6bce5ace742e8057..43273330376e851fcf690d2d93b5f4bdc0d52d75 100644 (file)
@@ -9227,6 +9227,8 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
                        AARCH64_ARCH_NONE},
   {"flagm",            AARCH64_FEATURE (AARCH64_FEATURE_FLAGM, 0),
                        AARCH64_ARCH_NONE},
+  {"pauth",            AARCH64_FEATURE (AARCH64_FEATURE_PAC, 0),
+                       AARCH64_ARCH_NONE},
   {NULL,               AARCH64_ARCH_NONE, AARCH64_ARCH_NONE},
 };
 
index c005286bc4aa05c6100de331c0b635709a08a109..6031cf34dfb7514863b5a2770325bc88c25655a4 100644 (file)
@@ -230,8 +230,10 @@ automatically cause those extensions to be disabled.
  @tab Enable Flag Manipulation instructions.
 @item @code{csre} @tab ARMv8-A @tab No
  @tab Enable Call Stack Recorder Extension.
-@item @code{ls64} @tab ARMv8-6 @tab ARMv8.7-A or later
+@item @code{ls64} @tab ARMv8.6-A @tab ARMv8.7-A or later
  @tab Enable 64 Byte Loads/Stores.
+@item @code{pauth} @tab ARMv8-A @tab No
+ @tab Enable Pointer Authentication.
 @end multitable
 
 @node AArch64 Syntax
diff --git a/gas/testsuite/gas/aarch64/pac-feat.d b/gas/testsuite/gas/aarch64/pac-feat.d
new file mode 100644 (file)
index 0000000..9f8d9b4
--- /dev/null
@@ -0,0 +1,74 @@
+#name: PAUTH (Pointer authentication) feature
+#objdump: -dr
+
+.*:     file .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+.*:    dac10083        pacia   x3, x4
+.*:    dac103e5        pacia   x5, sp
+.*:    dac10483        pacib   x3, x4
+.*:    dac107e5        pacib   x5, sp
+.*:    dac10883        pacda   x3, x4
+.*:    dac10be5        pacda   x5, sp
+.*:    dac10c83        pacdb   x3, x4
+.*:    dac10fe5        pacdb   x5, sp
+.*:    dac11083        autia   x3, x4
+.*:    dac113e5        autia   x5, sp
+.*:    dac11483        autib   x3, x4
+.*:    dac117e5        autib   x5, sp
+.*:    dac11883        autda   x3, x4
+.*:    dac11be5        autda   x5, sp
+.*:    dac11c83        autdb   x3, x4
+.*:    dac11fe5        autdb   x5, sp
+.*:    dac123e5        paciza  x5
+.*:    dac127e5        pacizb  x5
+.*:    dac12be5        pacdza  x5
+.*:    dac12fe5        pacdzb  x5
+.*:    dac133e5        autiza  x5
+.*:    dac137e5        autizb  x5
+.*:    dac13be5        autdza  x5
+.*:    dac13fe5        autdzb  x5
+.*:    dac143e5        xpaci   x5
+.*:    dac147e5        xpacd   x5
+.*:    9ac33041        pacga   x1, x2, x3
+.*:    9adf3041        pacga   x1, x2, sp
+.*:    d71f0822        braa    x1, x2
+.*:    d71f087f        braa    x3, sp
+.*:    d71f0c22        brab    x1, x2
+.*:    d71f0c7f        brab    x3, sp
+.*:    d73f0822        blraa   x1, x2
+.*:    d73f087f        blraa   x3, sp
+.*:    d73f0c22        blrab   x1, x2
+.*:    d73f0c7f        blrab   x3, sp
+.*:    d61f08bf        braaz   x5
+.*:    d61f0cbf        brabz   x5
+.*:    d63f08bf        blraaz  x5
+.*:    d63f0cbf        blrabz  x5
+.*:    d65f0bff        retaa
+.*:    d65f0fff        retab
+.*:    d69f0bff        eretaa
+.*:    d69f0fff        eretab
+.*:    f8200441        ldraa   x1, \[x2\]
+.*:    f8200441        ldraa   x1, \[x2\]
+.*:    f87ff483        ldraa   x3, \[x4, #-8\]
+.*:    f82014c5        ldraa   x5, \[x6, #8\]
+.*:    f83ff507        ldraa   x7, \[x8, #4088\]
+.*:    f8600528        ldraa   x8, \[x9, #-4096\]
+.*:    f82007e2        ldraa   x2, \[sp\]
+.*:    f87067e4        ldraa   x4, \[sp, #-2000\]
+.*:    f8a00441        ldrab   x1, \[x2\]
+.*:    f8a00441        ldrab   x1, \[x2\]
+.*:    f8fff483        ldrab   x3, \[x4, #-8\]
+.*:    f8a014c5        ldrab   x5, \[x6, #8\]
+.*:    f8bff507        ldrab   x7, \[x8, #4088\]
+.*:    f8e00528        ldrab   x8, \[x9, #-4096\]
+.*:    f8a007e2        ldrab   x2, \[sp\]
+.*:    f8f067e4        ldrab   x4, \[sp, #-2000\]
+.*:    f8201c62        ldraa   x2, \[x3, #8\]!
+.*:    f87ffca4        ldraa   x4, \[x5, #-8\]!
+.*:    f83fffe6        ldraa   x6, \[sp, #4088\]!
+.*:    f8a01c62        ldrab   x2, \[x3, #8\]!
+.*:    f8fffca4        ldrab   x4, \[x5, #-8\]!
+.*:    f8bfffe6        ldrab   x6, \[sp, #4088\]!
diff --git a/gas/testsuite/gas/aarch64/pac-feat.s b/gas/testsuite/gas/aarch64/pac-feat.s
new file mode 100644 (file)
index 0000000..2a87ab9
--- /dev/null
@@ -0,0 +1,79 @@
+       /* ARMv8.3 Pointer authentication instructions.  */
+       .arch armv8-a+pauth
+
+       /* Basic instructions.  */
+       pacia x3, x4
+       pacia x5, sp
+       pacib x3, x4
+       pacib x5, sp
+       pacda x3, x4
+       pacda x5, sp
+       pacdb x3, x4
+       pacdb x5, sp
+
+       autia x3, x4
+       autia x5, sp
+       autib x3, x4
+       autib x5, sp
+       autda x3, x4
+       autda x5, sp
+       autdb x3, x4
+       autdb x5, sp
+
+       paciza x5
+       pacizb x5
+       pacdza x5
+       pacdzb x5
+
+       autiza x5
+       autizb x5
+       autdza x5
+       autdzb x5
+
+       xpaci x5
+       xpacd x5
+
+       pacga x1, x2, x3
+       pacga x1, x2, sp
+
+       /* Combined instructions.  */
+       braa x1, x2
+       braa x3, sp
+       brab x1, x2
+       brab x3, sp
+       blraa x1, x2
+       blraa x3, sp
+       blrab x1, x2
+       blrab x3, sp
+       braaz x5
+       brabz x5
+       blraaz x5
+       blrabz x5
+
+       retaa
+       retab
+       eretaa
+       eretab
+
+       ldraa x1, [x2]
+       ldraa x1, [x2,#0]
+       ldraa x3, [x4,#-8]
+       ldraa x5, [x6,#8]
+       ldraa x7, [x8,#4088]
+       ldraa x8, [x9,#-4096]
+       ldraa x2, [sp]
+       ldraa x4, [sp,#-2000]
+       ldrab x1, [x2]
+       ldrab x1, [x2,#0]
+       ldrab x3, [x4,#-8]
+       ldrab x5, [x6,#8]
+       ldrab x7, [x8,#4088]
+       ldrab x8, [x9,#-4096]
+       ldrab x2, [sp]
+       ldrab x4, [sp,#-2000]
+       ldraa x2, [x3, #8]!
+       ldraa x4, [x5, #-8]!
+       ldraa x6, [sp, #4088]!
+       ldrab x2, [x3, #8]!
+       ldrab x4, [x5, #-8]!
+       ldrab x6, [sp, #4088]!