[gcc(refs/vendors/ibm/heads/gcc-9-branch)] aarch64: don't emit bti j after NOTE_INSN_DELETED_LABEL [PR94748]

Peter Bergner bergner@gcc.gnu.org
Fri Sep 4 19:11:01 GMT 2020


https://gcc.gnu.org/g:9a1b74d49e2e25b29675fac4322bb7ba6cec5894

commit 9a1b74d49e2e25b29675fac4322bb7ba6cec5894
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Fri Apr 24 17:36:02 2020 +0100

    aarch64: don't emit bti j after NOTE_INSN_DELETED_LABEL [PR94748]
    
    It was previously discussed that indirect branches cannot go to
    NOTE_INSN_DELETED_LABEL so inserting a landing pad is unnecessary.
    See https://gcc.gnu.org/pipermail/gcc-patches/2019-May/522625.html
    
    Before the patch a bti j was inserted after the label in
    
      __attribute__((target("branch-protection=bti")))
      int foo (void)
      {
      label:
        return 0;
      }
    
    This is not necessary and weakens the security protection.
    
    gcc/ChangeLog:
    
            Backport from mainline.
            2020-04-30  Szabolcs Nagy  <szabolcs.nagy@arm.com>
    
            PR target/94748
            * config/aarch64/aarch64-bti-insert.c (rest_of_insert_bti): Remove
            the check for NOTE_INSN_DELETED_LABEL.
    
    gcc/testsuite/ChangeLog:
    
            Backport from mainline.
            2020-04-30  Szabolcs Nagy  <szabolcs.nagy@arm.com>
    
            PR target/94748
            * gcc.target/aarch64/pr94748.c: New test.

Diff:
---
 gcc/ChangeLog                              |  9 +++++++++
 gcc/config/aarch64/aarch64-bti-insert.c    |  8 ++------
 gcc/testsuite/ChangeLog                    |  8 ++++++++
 gcc/testsuite/gcc.target/aarch64/pr94748.c | 10 ++++++++++
 4 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b814c7308b..80a48f8341c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2020-05-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	Backport from mainline.
+	2020-04-30  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	PR target/94748
+	* config/aarch64/aarch64-bti-insert.c (rest_of_insert_bti): Remove
+	the check for NOTE_INSN_DELETED_LABEL.
+
 2020-05-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
 	Backport from mainline.
diff --git a/gcc/config/aarch64/aarch64-bti-insert.c b/gcc/config/aarch64/aarch64-bti-insert.c
index 9e0fc168435..7da89074ce0 100644
--- a/gcc/config/aarch64/aarch64-bti-insert.c
+++ b/gcc/config/aarch64/aarch64-bti-insert.c
@@ -137,14 +137,10 @@ rest_of_insert_bti (void)
 	   insn = NEXT_INSN (insn))
 	{
 	  /* If a label is marked to be preserved or can be a non-local goto
-	     target, it must be protected with a BTI J.  The same applies to
-	     NOTE_INSN_DELETED_LABEL since they are basically labels that might
-	     be referenced via variables or constant pool.  */
-	  if ((LABEL_P (insn)
+	     target, it must be protected with a BTI J.  */
+	  if (LABEL_P (insn)
 	       && (LABEL_PRESERVE_P (insn)
 		   || bb->flags & BB_NON_LOCAL_GOTO_TARGET))
-	      || (NOTE_P (insn)
-		  && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))
 	    {
 	      bti_insn = gen_bti_j ();
 	      emit_insn_after (bti_insn, insn);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a642d0f9a19..b69958e23d0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2020-05-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	Backport from mainline.
+	2020-04-30  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	PR target/94748
+	* gcc.target/aarch64/pr94748.c: New test.
+
 2020-05-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
 	Backport from mainline.
diff --git a/gcc/testsuite/gcc.target/aarch64/pr94748.c b/gcc/testsuite/gcc.target/aarch64/pr94748.c
new file mode 100644
index 00000000000..2a2850d2fac
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr94748.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+
+__attribute__ ((target("branch-protection=bti")))
+int foo ()
+{
+label:
+  return 0;
+}
+
+/* { dg-final { scan-assembler-not {hint (36|38) // bti (j|jc)} } } */


More information about the Gcc-cvs mailing list