]> gcc.gnu.org Git - gcc.git/commitdiff
re PR target/43643 (gcc -m64 -pg corrupts %rdx / %rcx register)
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Thu, 8 Apr 2010 14:48:46 +0000 (14:48 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Thu, 8 Apr 2010 14:48:46 +0000 (14:48 +0000)
gcc:
PR target/43643
* config/i386/gmon-sol2.c [__x86_64__]: Properly restore %rcx.

gcc/testsuite:
PR target/43643
* gcc.dg/pr43643.c: New test.

From-SVN: r158130

gcc/ChangeLog
gcc/config/i386/gmon-sol2.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr43643.c [new file with mode: 0644]

index e23b3fbcacbbf0cac5f12d1f15b6f72bfed1b3dc..0d9eb6de3cf077bc765f4d69b400ecf52df0f22d 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       PR target/43643
+       * config/i386/gmon-sol2.c [__x86_64__]: Properly restore %rcx.
+
 2010-04-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * doc/install.texi (Specific, i?86-*-solaris2.10): Fix grammar.
index e0923a0770f6aeed436b3afbd8da8f9a58335569..fb813a12d25aa99e6b224f12599eb73a0079d020 100644 (file)
@@ -275,7 +275,7 @@ asm(".globl _mcount\n"
     "\tmovq\t0x20(%rsp),%rdi\n"
     "\tmovq\t0x18(%rsp),%rsi\n"
     "\tmovq\t0x10(%rsp),%rdx\n"
-    "\tmovq\t0x08(%rsp),%rdx\n"
+    "\tmovq\t0x08(%rsp),%rcx\n"
     "\tmovq\t(%rsp),%rax\n"
     "\taddq\t$0x38,%rsp\n"
     "\tretq\n"
index d46f37528b9f170756c4887ba5de491c461bfed2..738ee299478e7e550d3b90f015278c5173c08ff3 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       PR target/43643
+       * gcc.dg/pr43643.c: New test.
+
 2010-04-08  Tobias Burnus  <burnus@net-b.de>
 
        * gfortran.dg/iso_fortran_env_6.f90: Add more checks.
diff --git a/gcc/testsuite/gcc.dg/pr43643.c b/gcc/testsuite/gcc.dg/pr43643.c
new file mode 100644 (file)
index 0000000..7fbbfc2
--- /dev/null
@@ -0,0 +1,24 @@
+/* Contributed by Jürgen Keil <jrgn.keil@googlemail.com> */
+
+/* { dg-do run } */
+/* { dg-require-profiling "-pg" } */
+/* { dg-options "-O2 -pg" } */
+
+extern char *strdup (const char *);
+
+void
+func(char *a, char *b, char *c)
+{
+  strdup(a);
+  strdup(b);
+  strdup(c);
+}
+
+int
+main(void)
+{
+  func("a", "b", "c");
+  return 0;
+}
+
+/* { dg-final { cleanup-profile-file } } */
This page took 0.096839 seconds and 5 git commands to generate.