aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJames Greenhalgh <james.greenhalgh@arm.com>2014-09-19 09:31:01 +0000
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>2014-09-19 09:31:01 +0000
commitb4e9251d1e73c34f9b99fedcc7e6374edc96adb2 (patch)
tree015533c14eb8c8d7e44ecad5c64cc1c0d3bb44b1 /gcc
parent159d58942f4ccd00e776747be67973a03dfcfc4c (diff)
downloadgcc-b4e9251d1e73c34f9b99fedcc7e6374edc96adb2.zip
gcc-b4e9251d1e73c34f9b99fedcc7e6374edc96adb2.tar.gz
gcc-b4e9251d1e73c34f9b99fedcc7e6374edc96adb2.tar.bz2
[PATCH AArch64]: Add constraint letter for stack_protect_test pattern
gcc/ * config/aarch64/aarch64.md (stack_protect_test_<mode>): Mark scratch register as an output to placate register renaming. gcc/testsuite/ * gcc.dg/ssp-3.c: New. * gcc.dg/ssp-4.c: Likewise. From-SVN: r215385
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.md2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/ssp-3.c16
-rw-r--r--gcc/testsuite/gcc.dg/ssp-4.c18
5 files changed, 45 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e627a78..80bafa4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-19 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/aarch64/aarch64.md (stack_protect_test_<mode>): Mark
+ scratch register as written.
+
2014-09-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_emit_epilogue): Remove bogus
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index c60038a..f15a516 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -4031,7 +4031,7 @@
(unspec:PTR [(match_operand:PTR 1 "memory_operand" "m")
(match_operand:PTR 2 "memory_operand" "m")]
UNSPEC_SP_TEST))
- (clobber (match_scratch:PTR 3 "&r"))]
+ (clobber (match_scratch:PTR 3 "=&r"))]
""
"ldr\t%<w>3, %x1\;ldr\t%<w>0, %x2\;eor\t%<w>0, %<w>3, %<w>0"
[(set_attr "length" "12")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6a7f110..4e3fb0c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-19 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * gcc.dg/ssp-3.c: New.
+ * gcc.dg/ssp-4.c: Likewise.
+
2014-09-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* gcc.target/s390/dfp-conv1.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/ssp-3.c b/gcc/testsuite/gcc.dg/ssp-3.c
new file mode 100644
index 0000000..98c12da
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ssp-3.c
@@ -0,0 +1,16 @@
+/* { dg-do assemble } */
+/* { dg-options "-fstack-protector-strong -O1 -frename-registers" } */
+/* { dg-require-effective-target fstack_protector } */
+
+extern int bar (const char *s, int *argc);
+extern int baz (const char *s);
+
+char
+foo (const char *s)
+{
+ int argc;
+ int ret;
+ if ( !bar (s, &argc))
+ ret = baz (s);
+ return *s;
+}
diff --git a/gcc/testsuite/gcc.dg/ssp-4.c b/gcc/testsuite/gcc.dg/ssp-4.c
new file mode 100644
index 0000000..402033c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ssp-4.c
@@ -0,0 +1,18 @@
+/* { dg-do assemble } */
+/* { dg-options "-fstack-protector-strong -O1 -frename-registers" } */
+/* { dg-require-effective-target fstack_protector } */
+
+typedef unsigned int uint32_t;
+struct ctx
+{
+ uint32_t A;
+};
+
+void *
+buffer_copy (const struct ctx *ctx, void *resbuf)
+{
+ uint32_t buffer[4];
+ buffer[0] = (ctx->A);
+ __builtin_memcpy (resbuf, buffer, sizeof (buffer));
+ return resbuf;
+}