This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/49660] New: 64-bit gcc doesn't enable -mv8plus with -m32 on Solaris/SPARC
- From: "ro at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 6 Jul 2011 14:36:51 +0000
- Subject: [Bug target/49660] New: 64-bit gcc doesn't enable -mv8plus with -m32 on Solaris/SPARC
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49660
Summary: 64-bit gcc doesn't enable -mv8plus with -m32 on
Solaris/SPARC
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: ro@gcc.gnu.org
CC: ebotcazou@gcc.gnu.org
Host: sparcv9-sun-solaris2*
Target: sparcv9-sun-solaris2*
Build: sparcv9-sun-solaris2*
While testing my amd64-*-solaris2 patches in the sparcv9-sun-solaris2
configuration,
I noticed that all Go tests failed to link:
output is:
Undefined first referenced
symbol in file
__sync_bool_compare_and_swap_8
/var/gcc/gcc-4.7.0-20110628/11-gcc-v9/sparcv9-sun-solaris2.11/sparcv8plus/libgo/.libs/libgo.so
__sync_add_and_fetch_8
/var/gcc/gcc-4.7.0-20110628/11-gcc-v9/sparcv9-sun-solaris2.11/sparcv8plus/libgo/.libs/libgo.so
ld: fatal: symbol referencing errors. No output written to
/var/gcc/gcc-4.7.0-20110628/11-gcc-v9/gcc/testsuite/go/array-1.x
collect2: error: ld returned 1 exit status
The problem can be reduced to the following testcase:
#include <stdint.h>
extern int64_t *val, old, new;
int
cas64 (void)
{
return __sync_bool_compare_and_swap (val, old, new);
}
If compiled with a sparc-sun-solaris2.11 gcc
$ gcc -S sync.c
it contains no calls to __sync_bool_compare_and_swap_8.
If compiled with a sparcv9-sun-solaris2.11 gcc instead
$ gcc -m32 -S sync.c
it does have a call to that function. Comparing the -fverbose-asm output,
I see that the only difference in enabled options is that -mv8plus is
present in the first configuation, but missing in the second one. Indeed,
If I add -mv8plus to the second invocation, the call is gone.
Unfortunately, I don't have a good idea where best to fix this.