[Bug target/38085] gcc -m64 -pg generates invalid assembler code on Solaris 10/x86
bennett dot schneider at yahoo dot com
gcc-bugzilla@gcc.gnu.org
Thu Jul 30 13:07:00 GMT 2009
------- Comment #3 from bennett dot schneider at yahoo dot com 2009-07-30 13:06 -------
internal_mcount's from and self arguments were reversed from glibc's version.
Here's the full diff of gmon-sol2.c that produces correct output:
--- gcc/config/i386/gmon-sol2.c.orig Wed Jul 29 08:57:15 2009
+++ gcc/config/i386/gmon-sol2.c Thu Jul 30 07:53:16 2009
@@ -66,7 +66,7 @@
extern void _mcleanup (void);
extern void internal_mcount (
#ifdef __x86_64__
- char *, unsigned short *
+ unsigned short *, char *
#else
void
#endif
@@ -266,8 +266,8 @@
"\tmovq\t%r9,0x30(%rsp)\n"
/* Get SELFPC (pushed by the call to this function) and
FROMPCINDEX (via the frame pointer. */
- "\tmovq\t0x38(%rsp),%rdi\n"
- "\tmovq\t0x8(%rbp),%rsi\n"
+ "\tmovq\t0x38(%rsp),%rsi\n"
+ "\tmovq\t0x8(%rbp),%rdi\n"
"\tcallq\tinternal_mcount\n"
/* Restore the saved registers. */
"\tmovq\t0x30(%rsp),%r9\n"
@@ -275,7 +275,7 @@
"\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"
@@ -290,8 +290,8 @@
void
internal_mcount (
#ifdef __x86_64__
- char *selfpc,
- unsigned short *frompcindex
+ unsigned short *frompcindex,
+ char *selfpc
#else
void
#endif
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38085
More information about the Gcc-bugs
mailing list