[AArch64] Only build & test pauth code for LP64
authorJiong Wang <jiong.wang@arm.com>
Fri, 20 Jan 2017 21:03:41 +0000 (21:03 +0000)
committerJiong Wang <jiwang@gcc.gnu.org>
Fri, 20 Jan 2017 21:03:41 +0000 (21:03 +0000)
gcc/
* config/aarch64/aarch64-builtins.c (aarch64_init_builtins): Register
register pauth builtins for LP64 only.

libgcc/
* config/aarch64/aarch64-unwind.h: Empty this file on ILP32.
* unwind-dw2.c (execute_cfa_program):  Only multiplexing
DW_CFA_GNU_window_save for AArch64 and LP64.

gcc/testsuite/
* testsuite/gcc.target/aarch64/return_address_sign_1.c: Enable on LP64
only.
* testsuite/gcc.target/aarch64/return_address_sign_2.c: Likewise.
* testsuite/gcc.target/aarch64/return_address_sign_3.c: Likewise.

From-SVN: r244732

gcc/ChangeLog
gcc/config/aarch64/aarch64-builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c
gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c
gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c
libgcc/ChangeLog
libgcc/config/aarch64/aarch64-unwind.h
libgcc/unwind-dw2.c

index 67ccfa80dcc2b9ce26700978d5b0329f81fd70fe..10a6978125128bdf4985bceaa7deb5d5fd11f69a 100644 (file)
@@ -1,3 +1,8 @@
+2017-01-20  Jiong Wang  <jiong.wang@arm.com>
+
+       * config/aarch64/aarch64-builtins.c (aarch64_init_builtins): Register
+       register pauth builtins for LP64 only.
+
 2017-01-20  Marek Polacek  <polacek@redhat.com>
 
        PR c/79152
index 6c6530c43441dcbaba64703b8da20898c0d97dbc..f09399f4c158112c90c270856bffb4cafd03e7d4 100644 (file)
@@ -983,9 +983,14 @@ aarch64_init_builtins (void)
   aarch64_init_crc32_builtins ();
   aarch64_init_builtin_rsqrt ();
 
-/* Initialize pointer authentication builtins which are backed by instructions
-   in NOP encoding space.  */
-  aarch64_init_pauth_hint_builtins ();
+  /* Initialize pointer authentication builtins which are backed by instructions
+     in NOP encoding space.
+
+     NOTE: these builtins are supposed to be used by libgcc unwinder only, as
+     there is no support on return address signing under ILP32, we don't
+     register them.  */
+  if (!TARGET_ILP32)
+    aarch64_init_pauth_hint_builtins ();
 }
 
 tree
index dbbe3455c7934967c377ed11f720f4f12c527ce1..292731d487d7511cd6437db6fb1fe8c32f90378b 100644 (file)
@@ -1,3 +1,10 @@
+2017-01-20  Jiong Wang  <jiong.wang@arm.com>
+
+       * testsuite/gcc.target/aarch64/return_address_sign_1.c: Enable on LP64
+       only.
+       * testsuite/gcc.target/aarch64/return_address_sign_2.c: Likewise.
+       * testsuite/gcc.target/aarch64/return_address_sign_3.c: Likewise.
+
 2017-01-20  Nathan Sidwell  <nathan@acm.org>
 
        PR c++/79495
index fda72a414f1df7e81785864e994681e3695852f1..f87c3d28d1edff473a787a39a436e57076f97508 100644 (file)
@@ -1,6 +1,7 @@
 /* Testing return address signing where no combined instructions used.  */
 /* { dg-do compile } */
 /* { dg-options "-O2 -msign-return-address=all" } */
+/* { dg-require-effective-target lp64 } */
 
 int foo (int);
 
index 54fe47a69723d182c65941ddb73e2f1a5aa0af84..c5c1439b92e6637f85c47c6161cd797c0d68df25 100644 (file)
@@ -1,6 +1,7 @@
 /* Testing return address signing where combined instructions used.  */
 /* { dg-do compile } */
 /* { dg-options "-O2 -msign-return-address=all" } */
+/* { dg-require-effective-target lp64 } */
 
 int foo (int);
 int bar (int, int);
index adc5effdded8900b2dfb68459883d399ebd91ac8..7d9ec6eebd1ce452013d2895a551671c59e98f0c 100644 (file)
@@ -1,6 +1,7 @@
 /* Testing the disable of return address signing.  */
 /* { dg-do compile } */
 /* { dg-options "-O2 -msign-return-address=all" } */
+/* { dg-require-effective-target lp64 } */
 
 int bar (int, int);
 
index 63b2ff1fbb9a490dac6a73529b2118c4f8de74d4..98aa1043e944ba735a38774c935ce318fa318702 100644 (file)
@@ -1,3 +1,9 @@
+2017-01-20  Jiong Wang  <jiong.wang@arm.com>
+
+       * config/aarch64/aarch64-unwind.h: Empty this file on ILP32.
+       * unwind-dw2.c (execute_cfa_program):  Only multiplexing
+       DW_CFA_GNU_window_save for AArch64 and LP64.
+
 2017-01-20  Jiong Wang  <jiong.wang@arm.com>
 
        * config/aarch64/linux-unwind.h: Always include aarch64-unwind.h.
index a43d965b358f3e830b85fc42c7bceacf7d41a671..94e0d3426fd521f06221ab8bf6c5213d8ce28e6f 100644 (file)
@@ -22,7 +22,7 @@ a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
-#ifndef AARCH64_UNWIND_H
+#if !defined (AARCH64_UNWIND_H) && !defined (__ILP32__)
 #define AARCH64_UNWIND_H
 
 #define DWARF_REGNUM_AARCH64_RA_STATE 34
@@ -84,4 +84,4 @@ aarch64_frob_update_context (struct _Unwind_Context *context,
   return;
 }
 
-#endif /* defined AARCH64_UNWIND_H */
+#endif /* defined AARCH64_UNWIND_H && defined __ILP32__ */
index fe74387992ab7f10c141d7b62f72a755878612c5..3f26eaf73de3116b538dc8ba0a99f12de939c5e5 100644 (file)
@@ -1187,7 +1187,7 @@ execute_cfa_program (const unsigned char *insn_ptr,
          break;
 
        case DW_CFA_GNU_window_save:
-#ifdef __aarch64__
+#if defined (__aarch64__) && !defined (__ILP32__)
          /* This CFA is multiplexed with Sparc.  On AArch64 it's used to toggle
             return address signing status.  */
          fs->regs.reg[DWARF_REGNUM_AARCH64_RA_STATE].loc.offset ^= 1;