aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSudakshina Das <sudi.das@arm.com>2020-11-02 15:52:22 +0000
committerSudakshina Das <sudi.das@arm.com>2020-11-02 15:52:22 +0000
commitce99142c11b8090105cbf2aa853262f6d9abc0d3 (patch)
tree654b0f5a7c46cd1c799a635b28992fab99cc4a38 /gcc
parente881774d0dda6d5127eb8f0642f6edc16dc0b1e7 (diff)
downloadgcc-ce99142c11b8090105cbf2aa853262f6d9abc0d3.zip
gcc-ce99142c11b8090105cbf2aa853262f6d9abc0d3.tar.gz
gcc-ce99142c11b8090105cbf2aa853262f6d9abc0d3.tar.bz2
[PATCH] aarch64: Fix PR97638
Currently the testcase in the patch was failing to produce a 'bti c' at the beginning of the function. This was because in aarch64_pac_insn_p, we were wrongly returning at the first check! 2020-10-30 Sudakshina Das <sudi.das@arm.com> gcc/ChangeLog: PR target/97638 * config/aarch64/aarch64-bti-insert.c (aarch64_pac_insn_p): Update return value on INSN_P check. gcc/testsuite/ChangeLog: PR target/97638 * gcc.target/aarch64/pr97638.c: New test.a
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/aarch64/aarch64-bti-insert.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr97638.c17
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64-bti-insert.c b/gcc/config/aarch64/aarch64-bti-insert.c
index 57663ee..9802669 100644
--- a/gcc/config/aarch64/aarch64-bti-insert.c
+++ b/gcc/config/aarch64/aarch64-bti-insert.c
@@ -95,7 +95,7 @@ static bool
aarch64_pac_insn_p (rtx x)
{
if (!INSN_P (x))
- return x;
+ return false;
subrtx_var_iterator::array_type array;
FOR_EACH_SUBRTX_VAR (iter, array, PATTERN (x), ALL)
diff --git a/gcc/testsuite/gcc.target/aarch64/pr97638.c b/gcc/testsuite/gcc.target/aarch64/pr97638.c
new file mode 100644
index 0000000..e5869e8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr97638.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mbranch-protection=bti" } */
+
+char *foo (const char *s, const int c)
+{
+ const char *p = 0;
+ for (;;)
+ {
+ if (*s == c)
+ p = s;
+ if (p != 0 || *s++ == 0)
+ break;
+ }
+ return (char *)p;
+}
+
+/* { dg-final { scan-assembler "hint\t34" } } */