From a876231c40c9e3488d91bd64aa7a12c939babe51 Mon Sep 17 00:00:00 2001 From: Jiong Wang Date: Fri, 20 Jan 2017 21:03:41 +0000 Subject: [PATCH] [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. From-SVN: r244732 --- gcc/ChangeLog | 5 +++++ gcc/config/aarch64/aarch64-builtins.c | 11 ++++++++--- gcc/testsuite/ChangeLog | 7 +++++++ .../gcc.target/aarch64/return_address_sign_1.c | 1 + .../gcc.target/aarch64/return_address_sign_2.c | 1 + .../gcc.target/aarch64/return_address_sign_3.c | 1 + libgcc/ChangeLog | 6 ++++++ libgcc/config/aarch64/aarch64-unwind.h | 4 ++-- libgcc/unwind-dw2.c | 2 +- 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 + + * config/aarch64/aarch64-builtins.c (aarch64_init_builtins): Register + register pauth builtins for LP64 only. + 2017-01-20 Marek Polacek 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 + + * 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 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,3 +1,9 @@ +2017-01-20 Jiong Wang + + * 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 * config/aarch64/linux-unwind.h: Always include aarch64-unwind.h. 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 . */ -#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; -- 2.30.2