As reported in the PR, LIB_THREAD_LDFLAGS_SPEC (effectively
-L/usr/lib/lwp(/64)? -R/usr/lib/lwp(/64)? to make use of the alternate
thread library on Solaris 8, which also provides the only implementation
of __tls_get_addr) could be overridden by the regular -L flags from the
%D spec for 64-bit compilations to find /lib/sparcv9/libthread.so
instead, which lacks that function, causing link failures.
This patch fixes this by moving the -L/-R flags from LIB_SPEC to
LINK_SPEC which is before %D.
Bootstrapped without regressions on sparc-sun-solaris2.8 and
i386-pc-solaris2.8 by myself (though in a branded zone which doesn't
show the problem directly) and by Eric on bare-metal Solaris 8.
Installed on mainline, will backport to the 4.6 branch after testing.
Rainer
2011-07-08 Rainer Orth <[email protected]>
PR target/49541
* config/sol2.h (LIB_SPEC): Simplify.
Move LIB_THREAD_LDFLAGS_SPEC ...
(LINK_SPEC): ... here.
diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h
--- a/gcc/config/sol2.h
+++ b/gcc/config/sol2.h
@@ -109,10 +109,8 @@ along with GCC; see the file COPYING3.
#undef LIB_SPEC
#define LIB_SPEC \
"%{!symbolic:\
- %{pthreads|pthread:" \
- LIB_THREAD_LDFLAGS_SPEC " -lpthread " LIB_TLS_SPEC "} \
- %{fprofile-generate*:" \
- LIB_THREAD_LDFLAGS_SPEC " " LIB_TLS_SPEC "} \
+ %{pthreads|pthread:-lpthread} \
+ %{pthreads|pthread|fprofile-generate*:" LIB_TLS_SPEC "} \
%{p|pg:-ldl} -lc}"
#ifndef CROSS_DIRECTORY_STRUCTURE
@@ -175,6 +173,7 @@ along with GCC; see the file COPYING3.
%{static:-dn -Bstatic} \
%{shared:-G -dy %{!mimpure-text:-z text}} \
%{symbolic:-Bsymbolic -G -dy -z text} \
+ %{pthreads|pthread|fprofile-generate*:" LIB_THREAD_LDFLAGS_SPEC "} \
%(link_arch) \
%{Qy:} %{!Qn:-Qy}"
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University