From 07c60ef701e0fe0c65f0186bd521ee83b6c24c3c Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Thu, 8 Apr 2010 14:48:46 +0000 Subject: [PATCH] re PR target/43643 (gcc -m64 -pg corrupts %rdx / %rcx register) 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 | 5 +++++ gcc/config/i386/gmon-sol2.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr43643.c | 24 ++++++++++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr43643.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e23b3fbcacbb..0d9eb6de3cf0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-04-08 Rainer Orth + + PR target/43643 + * config/i386/gmon-sol2.c [__x86_64__]: Properly restore %rcx. + 2010-04-08 Rainer Orth * doc/install.texi (Specific, i?86-*-solaris2.10): Fix grammar. diff --git a/gcc/config/i386/gmon-sol2.c b/gcc/config/i386/gmon-sol2.c index e0923a0770f6..fb813a12d25a 100644 --- a/gcc/config/i386/gmon-sol2.c +++ b/gcc/config/i386/gmon-sol2.c @@ -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" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d46f37528b9f..738ee299478e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-08 Rainer Orth + + PR target/43643 + * gcc.dg/pr43643.c: New test. + 2010-04-08 Tobias Burnus * 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 index 000000000000..7fbbfc255f36 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr43643.c @@ -0,0 +1,24 @@ +/* Contributed by Jürgen Keil */ + +/* { 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 } } */ -- 2.47.2