targhooks.c (default_stack_protect_guard): Avoid sharing RTL for __stack_chk_guard.
authorMaxim Kuvyrkov <maxim@codesourcery.com>
Wed, 12 May 2010 11:05:19 +0000 (11:05 +0000)
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>
Wed, 12 May 2010 11:05:19 +0000 (11:05 +0000)
* targhooks.c (default_stack_protect_guard): Avoid sharing RTL
for __stack_chk_guard.

* gcc.target/m68k/20100512-1.c: New.

From-SVN: r159310

gcc/ChangeLog
gcc/targhooks.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/m68k/20100512-1.c [new file with mode: 0644]

index b9b67952f1df16f537e10274b7104c94c59b8650..b63cde5115b975c1c4f3898a00a6fc9f0486360e 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+       * targhooks.c (default_stack_protect_guard): Avoid sharing RTL
+       for __stack_chk_guard.
+
 2010-05-11  Jakub Jelinek  <jakub@redhat.com>
 
        * c-opts.c (c_common_parse_file): If start_end_main_source_file,
index 8df0de421f818e69c9b9c3d86f1eb9c223b462b8..2c0a65dc92636e8168c2298f3194299348e970d9 100644 (file)
@@ -499,6 +499,8 @@ default_stack_protect_guard (void)
 
   if (t == NULL)
     {
+      rtx x;
+
       t = build_decl (UNKNOWN_LOCATION,
                      VAR_DECL, get_identifier ("__stack_chk_guard"),
                      ptr_type_node);
@@ -510,6 +512,11 @@ default_stack_protect_guard (void)
       DECL_ARTIFICIAL (t) = 1;
       DECL_IGNORED_P (t) = 1;
 
+      /* Do not share RTL as the declaration is visible outside of
+        current function.  */
+      x = DECL_RTL (t);
+      RTX_FLAG (x, used) = 1;
+
       stack_chk_guard_decl = t;
     }
 
index a1275c845c7b6973426880b032ecc266fd7e7fec..4daeaa6b6b729a337d10f449d62d248951b14db9 100644 (file)
@@ -1,3 +1,7 @@
+2010-05-12  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+       * gcc.target/m68k/20100512-1.c: New.
+
 2010-05-12  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/lto8.adb: New test.
diff --git a/gcc/testsuite/gcc.target/m68k/20100512-1.c b/gcc/testsuite/gcc.target/m68k/20100512-1.c
new file mode 100644 (file)
index 0000000..d07bb51
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fstack-protector" } */
+/* { dg-require-effective-target fstack_protector } */
+/* There should be 2 references to __stack_chk_guard in every function.  */
+/* { dg-final { scan-assembler-times "__stack_chk_guard" 4 } } */
+
+#include <stdlib.h>
+#include <string.h>
+void doTest1(void) {
+  volatile char foo[10];
+  memset((void *)foo, 1, 100);
+}
+void doTest2(void) {
+  volatile char foo[10];
+  memset((void *)foo, 1, 100);
+}