aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiwang <jiwang@138bc75d-0d04-0410-961f-82ee72b054a4>2017-01-20 21:03:41 +0000
committerjiwang <jiwang@138bc75d-0d04-0410-961f-82ee72b054a4>2017-01-20 21:03:41 +0000
commit58c979ed152204a58353601ff0cf6f862f09e49a (patch)
tree32abdbe25b84dfdbd24f7c5db95c8890a88fc093
parent864029adfb71301fc58e3f303759c34d75e6cdb2 (diff)
[AArch64] Only build & test pauth code for LP64
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244732 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64-builtins.c11
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c1
-rw-r--r--gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c1
-rw-r--r--gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c1
-rw-r--r--libgcc/ChangeLog6
-rw-r--r--libgcc/config/aarch64/aarch64-unwind.h4
-rw-r--r--libgcc/unwind-dw2.c2
9 files changed, 32 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 67ccfa80dcc..10a69781251 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c
index 6c6530c4344..f09399f4c15 100644
--- a/gcc/config/aarch64/aarch64-builtins.c
+++ b/gcc/config/aarch64/aarch64-builtins.c
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dbbe3455c79..292731d487d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c b/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c
index fda72a414f1..f87c3d28d1e 100644
--- a/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c
@@ -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);
diff --git a/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c b/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c
index 54fe47a6972..c5c1439b92e 100644
--- a/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c
+++ b/gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c
@@ -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);
diff --git a/gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c b/gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c
index adc5effdded..7d9ec6eebd1 100644
--- a/gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c
+++ b/gcc/testsuite/gcc.target/aarch64/return_address_sign_3.c
@@ -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);
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 63b2ff1fbb9..98aa1043e94 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,5 +1,11 @@
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.
2017-01-19 Jiong Wang <jiong.wang@arm.com>
diff --git a/libgcc/config/aarch64/aarch64-unwind.h b/libgcc/config/aarch64/aarch64-unwind.h
index a43d965b358..94e0d3426fd 100644
--- a/libgcc/config/aarch64/aarch64-unwind.h
+++ b/libgcc/config/aarch64/aarch64-unwind.h
@@ -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__ */
diff --git a/libgcc/unwind-dw2.c b/libgcc/unwind-dw2.c
index fe74387992a..3f26eaf73de 100644
--- a/libgcc/unwind-dw2.c
+++ b/libgcc/unwind-dw2.c
@@ -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;