[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
This commit is contained in:
Jiong Wang 2017-01-20 21:03:41 +00:00 committed by Jiong Wang
parent 5dc8f5d9e6
commit a876231c40
9 changed files with 32 additions and 6 deletions

View 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> 2017-01-20 Marek Polacek <polacek@redhat.com>
PR c/79152 PR c/79152

View File

@ -984,7 +984,12 @@ aarch64_init_builtins (void)
aarch64_init_builtin_rsqrt (); aarch64_init_builtin_rsqrt ();
/* Initialize pointer authentication builtins which are backed by instructions /* Initialize pointer authentication builtins which are backed by instructions
in NOP encoding space. */ 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 (); aarch64_init_pauth_hint_builtins ();
} }

View 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> 2017-01-20 Nathan Sidwell <nathan@acm.org>
PR c++/79495 PR c++/79495

View File

@ -1,6 +1,7 @@
/* Testing return address signing where no combined instructions used. */ /* Testing return address signing where no combined instructions used. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msign-return-address=all" } */ /* { dg-options "-O2 -msign-return-address=all" } */
/* { dg-require-effective-target lp64 } */
int foo (int); int foo (int);

View File

@ -1,6 +1,7 @@
/* Testing return address signing where combined instructions used. */ /* Testing return address signing where combined instructions used. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msign-return-address=all" } */ /* { dg-options "-O2 -msign-return-address=all" } */
/* { dg-require-effective-target lp64 } */
int foo (int); int foo (int);
int bar (int, int); int bar (int, int);

View File

@ -1,6 +1,7 @@
/* Testing the disable of return address signing. */ /* Testing the disable of return address signing. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -msign-return-address=all" } */ /* { dg-options "-O2 -msign-return-address=all" } */
/* { dg-require-effective-target lp64 } */
int bar (int, int); int bar (int, int);

View 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> 2017-01-20 Jiong Wang <jiong.wang@arm.com>
* config/aarch64/linux-unwind.h: Always include aarch64-unwind.h. * config/aarch64/linux-unwind.h: Always include aarch64-unwind.h.

View 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 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
#ifndef AARCH64_UNWIND_H #if !defined (AARCH64_UNWIND_H) && !defined (__ILP32__)
#define AARCH64_UNWIND_H #define AARCH64_UNWIND_H
#define DWARF_REGNUM_AARCH64_RA_STATE 34 #define DWARF_REGNUM_AARCH64_RA_STATE 34
@ -84,4 +84,4 @@ aarch64_frob_update_context (struct _Unwind_Context *context,
return; return;
} }
#endif /* defined AARCH64_UNWIND_H */ #endif /* defined AARCH64_UNWIND_H && defined __ILP32__ */

View File

@ -1187,7 +1187,7 @@ execute_cfa_program (const unsigned char *insn_ptr,
break; break;
case DW_CFA_GNU_window_save: 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 /* This CFA is multiplexed with Sparc. On AArch64 it's used to toggle
return address signing status. */ return address signing status. */
fs->regs.reg[DWARF_REGNUM_AARCH64_RA_STATE].loc.offset ^= 1; fs->regs.reg[DWARF_REGNUM_AARCH64_RA_STATE].loc.offset ^= 1;