re PR target/18788 ("-pthreads" option with "-shared" does not cause libpthread.so to be linked in.)
libjava: * configure.ac (*-*-solaris2.8): Use alternate thread library. Add libthread. (*-*-solaris2.9): Use libthread. * configure: Regenerate. libgomp: * configure.tgt (*-*-solaris2.[56]*): Removed. gcc: * configure.ac: Don't disable TLS on Solaris 8/9 by default Set tga_func for Solaris 2/x86 resp. SPARC. Remove duplicate parts of sparc*-sun-solaris2.* TLS check. (LIB_THREAD_LDFLAGS_SPEC): Define. (LIB_TLS_SPEC): Define. Check for required Sun ld version. * configure: Regenerate. * config.in: Regenerate. * config/sol2.h (LIB_SPEC): Use LIB_THREAD_LDFLAGS_SPEC with -pthread, -threads, LIB_TLS_SPEC with -pthread. * doc/install.texi (Specific, *-*-solaris2*): Document use of alternate thread libraries on Solaris 8. Document TLS patch requirements. * doc/sourcebuild.texi (Add Options): Sort alphabetically. Document tls. PR target/18788 * config/sol2.h (LIB_SPEC): Link with thread libraries even with -shared. gcc/testsuite: * lib/target-supports.exp (add_options_for_tls): New proc. * g++.dg/tls/static-1.C: Use dg-add-options tls. * g++.dg/tls/static-1a.cc: Likewise. * gcc.dg/tls/emutls-1.c: Likewise. * gcc.dg/tls/opt-11.c: Likewise. * gcc.dg/tls/opt-12.c: Likewise. * gcc.dg/tls/pr24428-2.c: Likewise. * gcc.dg/tls/pr24428.c: Likewise. * obj-c++.dg/tls/static-1.mm: Likewise. * obj-c++.dg/torture/tls/thr-init-1.mm: Likewise. * obj-c++.dg/torture/tls/thr-init-2.mm: Likewise. * obj-c++.dg/torture/tls/thr-init-3.mm: Likewise. * objc.dg/torture/tls/thr-init-2.m: Likewise. * objc.dg/torture/tls/thr-init-3.m: Likewise. * objc.dg/torture/tls/thr-init.m: Likewise. * gcc.dg/lto/20090210_0.c: Add -pthread for *-*-solaris2.[89]. From-SVN: r162478
This commit is contained in:
parent
7a6faad6e7
commit
16c9d3b171
29 changed files with 431 additions and 112 deletions
|
@ -1,3 +1,25 @@
|
|||
2010-07-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* configure.ac: Don't disable TLS on Solaris 8/9 by default
|
||||
Set tga_func for Solaris 2/x86 resp. SPARC.
|
||||
Remove duplicate parts of sparc*-sun-solaris2.* TLS check.
|
||||
(LIB_THREAD_LDFLAGS_SPEC): Define.
|
||||
(LIB_TLS_SPEC): Define.
|
||||
Check for required Sun ld version.
|
||||
* configure: Regenerate.
|
||||
* config.in: Regenerate.
|
||||
* config/sol2.h (LIB_SPEC): Use LIB_THREAD_LDFLAGS_SPEC with
|
||||
-pthread, -threads, LIB_TLS_SPEC with -pthread.
|
||||
* doc/install.texi (Specific, *-*-solaris2*): Document use of
|
||||
alternate thread libraries on Solaris 8.
|
||||
Document TLS patch requirements.
|
||||
* doc/sourcebuild.texi (Add Options): Sort alphabetically.
|
||||
Document tls.
|
||||
|
||||
PR target/18788
|
||||
* config/sol2.h (LIB_SPEC): Link with thread libraries even with
|
||||
-shared.
|
||||
|
||||
2010-07-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* tree.h (struct tree_base): Add nameless_flag bitfield.
|
||||
|
|
|
@ -449,7 +449,7 @@
|
|||
#endif
|
||||
|
||||
|
||||
/* Define if your assembler supports thread-local storage. */
|
||||
/* Define if your assembler and linker support thread-local storage. */
|
||||
#ifndef USED_FOR_TARGET
|
||||
#undef HAVE_AS_TLS
|
||||
#endif
|
||||
|
@ -1537,6 +1537,18 @@
|
|||
#endif
|
||||
|
||||
|
||||
/* Define to the linker flags to use for -pthread. */
|
||||
#ifndef USED_FOR_TARGET
|
||||
#undef LIB_THREAD_LDFLAGS_SPEC
|
||||
#endif
|
||||
|
||||
|
||||
/* Define to the library containing __tls_get_addr/___tls_get_addr. */
|
||||
#ifndef USED_FOR_TARGET
|
||||
#undef LIB_TLS_SPEC
|
||||
#endif
|
||||
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#ifndef USED_FOR_TARGET
|
||||
|
|
|
@ -124,11 +124,12 @@ along with GCC; see the file COPYING3. If not see
|
|||
#undef LIB_SPEC
|
||||
#define LIB_SPEC \
|
||||
"%{compat-bsd:-lucb -lsocket -lnsl -lelf -laio} \
|
||||
%{!shared:\
|
||||
%{!symbolic:\
|
||||
%{pthreads|pthread:-lpthread} \
|
||||
%{!pthreads:%{!pthread:%{threads:-lthread}}} \
|
||||
%{p|pg:-ldl} -lc}}"
|
||||
%{!symbolic:\
|
||||
%{pthreads|pthread:" \
|
||||
LIB_THREAD_LDFLAGS_SPEC " -lpthread " LIB_TLS_SPEC "} \
|
||||
%{!pthreads:%{!pthread:%{threads:" \
|
||||
LIB_THREAD_LDFLAGS_SPEC " -lthread}}} \
|
||||
%{p|pg:-ldl} -lc}"
|
||||
|
||||
#undef ENDFILE_SPEC
|
||||
#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
|
||||
|
|
212
gcc/configure
vendored
212
gcc/configure
vendored
|
@ -22108,17 +22108,9 @@ foo: .long 25
|
|||
;;
|
||||
i[34567]86-*-*)
|
||||
case "$target" in
|
||||
i[34567]86-*-solaris2.[89]*)
|
||||
# TLS was introduced in the Solaris 9 4/04 release but
|
||||
# we do not enable it by default on Solaris 9 either.
|
||||
if test "x$enable_tls" = xyes ; then
|
||||
on_solaris=yes
|
||||
else
|
||||
enable_tls=no;
|
||||
fi
|
||||
;;
|
||||
i[34567]86-*-solaris2.*)
|
||||
on_solaris=yes
|
||||
tga_func=___tls_get_addr
|
||||
;;
|
||||
*)
|
||||
on_solaris=no
|
||||
|
@ -22333,17 +22325,9 @@ foo: .long 25
|
|||
;;
|
||||
sparc*-*-*)
|
||||
case "$target" in
|
||||
sparc*-sun-solaris2.[89]*)
|
||||
# TLS was introduced in the Solaris 9 4/04 release but
|
||||
# we do not enable it by default on Solaris 9 either.
|
||||
if test "x$enable_tls" = xyes ; then
|
||||
on_solaris=yes
|
||||
else
|
||||
enable_tls=no;
|
||||
fi
|
||||
;;
|
||||
sparc*-sun-solaris2.*)
|
||||
on_solaris=yes
|
||||
tga_func=__tls_get_addr
|
||||
;;
|
||||
*)
|
||||
on_solaris=no
|
||||
|
@ -22351,32 +22335,17 @@ foo: .long 25
|
|||
esac
|
||||
if test x$on_solaris = xyes && test x$gas_flag = xno; then
|
||||
conftest_s='
|
||||
.section ".tdata",#alloc,#write,#tls
|
||||
foo: .long 25
|
||||
.text
|
||||
sethi %tgd_hi22(foo), %o0
|
||||
add %o0, %tgd_lo10(foo), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(foo)
|
||||
call __tls_get_addr, %tgd_call(foo)
|
||||
sethi %tldm_hi22(foo), %l1
|
||||
add %l1, %tldm_lo10(foo), %l2
|
||||
add %l7, %l2, %o0, %tldm_add(foo)
|
||||
call __tls_get_addr, %tldm_call(foo)
|
||||
sethi %tldo_hix22(foo), %l3
|
||||
xor %l3, %tldo_lox10(foo), %l4
|
||||
add %o0, %l4, %l5, %tldo_add(foo)
|
||||
sethi %tie_hi22(foo), %o3
|
||||
add %o3, %tie_lo10(foo), %o3
|
||||
ld [%l7 + %o3], %o2, %tie_ld(foo)
|
||||
add %g7, %o2, %o4, %tie_add(foo)
|
||||
sethi %tle_hix22(foo), %l1
|
||||
xor %l1, %tle_lox10(foo), %o5
|
||||
ld [%g7 + %o5], %o1'
|
||||
.section ".tdata",#alloc,#write,#tls'
|
||||
tls_first_major=0
|
||||
tls_first_minor=0
|
||||
else
|
||||
conftest_s='
|
||||
.section ".tdata","awT",@progbits
|
||||
.section ".tdata","awT",@progbits'
|
||||
tls_first_major=2
|
||||
tls_first_minor=14
|
||||
tls_as_opt="-32 --fatal-warnings"
|
||||
fi
|
||||
conftest_s="$conftest_s
|
||||
foo: .long 25
|
||||
.text
|
||||
sethi %tgd_hi22(foo), %o0
|
||||
|
@ -22396,11 +22365,7 @@ foo: .long 25
|
|||
add %g7, %o2, %o4, %tie_add(foo)
|
||||
sethi %tle_hix22(foo), %l1
|
||||
xor %l1, %tle_lox10(foo), %o5
|
||||
ld [%g7 + %o5], %o1'
|
||||
tls_first_major=2
|
||||
tls_first_minor=14
|
||||
tls_as_opt="-32 --fatal-warnings"
|
||||
fi
|
||||
ld [%g7 + %o5], %o1"
|
||||
;;
|
||||
xtensa*-*-*)
|
||||
conftest_s='
|
||||
|
@ -22455,6 +22420,163 @@ if test $gcc_cv_as_tls = yes; then
|
|||
set_have_as_tls=yes
|
||||
fi
|
||||
fi
|
||||
case "$target" in
|
||||
# TLS was introduced in the Solaris 9 FCS release and backported to
|
||||
# Solaris 8 patches. Support for GNU-style TLS on x86 was only
|
||||
# introduced in Solaris 9 4/04, replacing the earlier Sun style that Sun
|
||||
# ld and GCC don't support any longer.
|
||||
*-*-solaris2.*)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker and ld.so.1 TLS support" >&5
|
||||
$as_echo_n "checking linker and ld.so.1 TLS support... " >&6; }
|
||||
ld_tls_support=no
|
||||
# Check ld and ld.so.1 TLS support.
|
||||
if echo "$ld_ver" | grep GNU > /dev/null; then
|
||||
# Assume all interesting versions of GNU ld have TLS support.
|
||||
# FIXME: still need ld.so.1 support, i.e. ld version checks below.
|
||||
ld_tls_support=yes
|
||||
else
|
||||
case "$target" in
|
||||
# Solaris 8/x86 ld has GNU style TLS support since version 1.280.
|
||||
i?86-*-solaris2.8)
|
||||
min_tls_ld_vers_minor=280
|
||||
;;
|
||||
# Solaris 8/SPARC ld has TLS support since version 1.272.
|
||||
sparc*-*-solaris2.8)
|
||||
min_tls_ld_vers_minor=272
|
||||
;;
|
||||
# Solaris 9/x86 ld has GNU style TLS support since version 1.374.
|
||||
i?86-*-solaris2.9)
|
||||
min_tls_ld_vers_minor=374
|
||||
;;
|
||||
# Solaris 9/SPARC and Solaris 10+ ld have TLS support since FCS.
|
||||
sparc*-*-solaris2.9 | *-*-solaris2.1[0-9]*)
|
||||
min_tls_ld_vers_minor=343
|
||||
;;
|
||||
esac
|
||||
if test "$ls_vers_major" -gt 1 || \
|
||||
test "$ld_vers_minor" -ge "$min_tls_ld_vers_minor"; then
|
||||
ld_tls_support=yes
|
||||
else
|
||||
set_have_as_tls=no
|
||||
fi
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_tls_support" >&5
|
||||
$as_echo "$ld_tls_support" >&6; }
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
save_LDFLAGS="$LDFLAGS"
|
||||
LIBS=
|
||||
LDFLAGS=
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alternate thread library" >&5
|
||||
$as_echo_n "checking alternate thread library... " >&6; }
|
||||
case "$target" in
|
||||
# TLS support was backported to Solaris 8 patches, but only lives in
|
||||
# the alternate thread library which became the default in Solaris 9.
|
||||
# We want to always use that, irrespective of TLS support.
|
||||
*-*-solaris2.8)
|
||||
# Take multilib subdir into account. There's no spec to handle
|
||||
# this. The 64 symlink exists since Solaris 8.
|
||||
lwp_dir=/usr/lib/lwp
|
||||
lwp_spec="-L$lwp_dir%{m64:/64} -R$lwp_dir%{m64:/64}"
|
||||
LDFLAGS="-L$lwp_dir -R$lwp_dir"
|
||||
;;
|
||||
*-*-solaris2*)
|
||||
lwp_dir="none"
|
||||
lwp_spec=""
|
||||
;;
|
||||
esac
|
||||
# Always define LIB_THREAD_LDFLAGS_SPEC, even without TLS support.
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define LIB_THREAD_LDFLAGS_SPEC "$lwp_spec"
|
||||
_ACEOF
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lwp_dir" >&5
|
||||
$as_echo "$lwp_dir" >&6; }
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking library containing $tga_func" >&5
|
||||
$as_echo_n "checking library containing $tga_func... " >&6; }
|
||||
# Before Solaris 10, __tls_get_addr (SPARC/x64) resp. ___tls_get_addr
|
||||
# (32-bit x86) only lived in libthread, so check for that. Keep
|
||||
# set_have_as_tls if found, disable if not.
|
||||
as_ac_Search=`$as_echo "ac_cv_search_$tga_func" | $as_tr_sh`
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing $tga_func" >&5
|
||||
$as_echo_n "checking for library containing $tga_func... " >&6; }
|
||||
if { as_var=$as_ac_Search; eval "test \"\${$as_var+set}\" = set"; }; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_func_search_save_LIBS=$LIBS
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char $tga_func ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return $tga_func ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
for ac_lib in '' thread; do
|
||||
if test -z "$ac_lib"; then
|
||||
ac_res="none required"
|
||||
else
|
||||
ac_res=-l$ac_lib
|
||||
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
|
||||
fi
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
eval "$as_ac_Search=\$ac_res"
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext
|
||||
if { as_var=$as_ac_Search; eval "test \"\${$as_var+set}\" = set"; }; then :
|
||||
break
|
||||
fi
|
||||
done
|
||||
if { as_var=$as_ac_Search; eval "test \"\${$as_var+set}\" = set"; }; then :
|
||||
|
||||
else
|
||||
eval "$as_ac_Search=no"
|
||||
fi
|
||||
rm conftest.$ac_ext
|
||||
LIBS=$ac_func_search_save_LIBS
|
||||
fi
|
||||
eval ac_res=\$$as_ac_Search
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
||||
$as_echo "$ac_res" >&6; }
|
||||
eval ac_res=\$$as_ac_Search
|
||||
if test "$ac_res" != no; then :
|
||||
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
|
||||
|
||||
else
|
||||
set_have_as_tls=no
|
||||
fi
|
||||
|
||||
# Clear LIBS if we cannot support TLS.
|
||||
if test $set_have_as_tls = no; then
|
||||
LIBS=
|
||||
fi
|
||||
# Always define LIB_TLS_SPEC, even without TLS support.
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define LIB_TLS_SPEC "$LIBS"
|
||||
_ACEOF
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBS" >&5
|
||||
$as_echo "$LIBS" >&6; }
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
LDFLAGS="$save_LDFLAGS"
|
||||
;;
|
||||
esac
|
||||
if test $set_have_as_tls = yes ; then
|
||||
|
||||
$as_echo "#define HAVE_AS_TLS 1" >>confdefs.h
|
||||
|
|
143
gcc/configure.ac
143
gcc/configure.ac
|
@ -2687,17 +2687,9 @@ foo: .long 25
|
|||
;;
|
||||
i[34567]86-*-*)
|
||||
case "$target" in
|
||||
i[34567]86-*-solaris2.[89]*)
|
||||
# TLS was introduced in the Solaris 9 4/04 release but
|
||||
# we do not enable it by default on Solaris 9 either.
|
||||
if test "x$enable_tls" = xyes ; then
|
||||
on_solaris=yes
|
||||
else
|
||||
enable_tls=no;
|
||||
fi
|
||||
;;
|
||||
i[34567]86-*-solaris2.*)
|
||||
on_solaris=yes
|
||||
tga_func=___tls_get_addr
|
||||
;;
|
||||
*)
|
||||
on_solaris=no
|
||||
|
@ -2913,17 +2905,9 @@ foo: .long 25
|
|||
;;
|
||||
sparc*-*-*)
|
||||
case "$target" in
|
||||
sparc*-sun-solaris2.[89]*)
|
||||
# TLS was introduced in the Solaris 9 4/04 release but
|
||||
# we do not enable it by default on Solaris 9 either.
|
||||
if test "x$enable_tls" = xyes ; then
|
||||
on_solaris=yes
|
||||
else
|
||||
enable_tls=no;
|
||||
fi
|
||||
;;
|
||||
sparc*-sun-solaris2.*)
|
||||
on_solaris=yes
|
||||
tga_func=__tls_get_addr
|
||||
;;
|
||||
*)
|
||||
on_solaris=no
|
||||
|
@ -2931,32 +2915,17 @@ foo: .long 25
|
|||
esac
|
||||
if test x$on_solaris = xyes && test x$gas_flag = xno; then
|
||||
conftest_s='
|
||||
.section ".tdata",#alloc,#write,#tls
|
||||
foo: .long 25
|
||||
.text
|
||||
sethi %tgd_hi22(foo), %o0
|
||||
add %o0, %tgd_lo10(foo), %o1
|
||||
add %l7, %o1, %o0, %tgd_add(foo)
|
||||
call __tls_get_addr, %tgd_call(foo)
|
||||
sethi %tldm_hi22(foo), %l1
|
||||
add %l1, %tldm_lo10(foo), %l2
|
||||
add %l7, %l2, %o0, %tldm_add(foo)
|
||||
call __tls_get_addr, %tldm_call(foo)
|
||||
sethi %tldo_hix22(foo), %l3
|
||||
xor %l3, %tldo_lox10(foo), %l4
|
||||
add %o0, %l4, %l5, %tldo_add(foo)
|
||||
sethi %tie_hi22(foo), %o3
|
||||
add %o3, %tie_lo10(foo), %o3
|
||||
ld [%l7 + %o3], %o2, %tie_ld(foo)
|
||||
add %g7, %o2, %o4, %tie_add(foo)
|
||||
sethi %tle_hix22(foo), %l1
|
||||
xor %l1, %tle_lox10(foo), %o5
|
||||
ld [%g7 + %o5], %o1'
|
||||
.section ".tdata",#alloc,#write,#tls'
|
||||
tls_first_major=0
|
||||
tls_first_minor=0
|
||||
else
|
||||
conftest_s='
|
||||
.section ".tdata","awT",@progbits
|
||||
.section ".tdata","awT",@progbits'
|
||||
tls_first_major=2
|
||||
tls_first_minor=14
|
||||
tls_as_opt="-32 --fatal-warnings"
|
||||
fi
|
||||
conftest_s="$conftest_s
|
||||
foo: .long 25
|
||||
.text
|
||||
sethi %tgd_hi22(foo), %o0
|
||||
|
@ -2976,11 +2945,7 @@ foo: .long 25
|
|||
add %g7, %o2, %o4, %tie_add(foo)
|
||||
sethi %tle_hix22(foo), %l1
|
||||
xor %l1, %tle_lox10(foo), %o5
|
||||
ld [%g7 + %o5], %o1'
|
||||
tls_first_major=2
|
||||
tls_first_minor=14
|
||||
tls_as_opt="-32 --fatal-warnings"
|
||||
fi
|
||||
ld [%g7 + %o5], %o1"
|
||||
;;
|
||||
xtensa*-*-*)
|
||||
conftest_s='
|
||||
|
@ -3007,9 +2972,95 @@ else
|
|||
[$tls_first_major,$tls_first_minor,0], [$tls_as_opt], [$conftest_s],,
|
||||
[set_have_as_tls=yes])
|
||||
fi
|
||||
case "$target" in
|
||||
# TLS was introduced in the Solaris 9 FCS release and backported to
|
||||
# Solaris 8 patches. Support for GNU-style TLS on x86 was only
|
||||
# introduced in Solaris 9 4/04, replacing the earlier Sun style that Sun
|
||||
# ld and GCC don't support any longer.
|
||||
*-*-solaris2.*)
|
||||
AC_MSG_CHECKING(linker and ld.so.1 TLS support)
|
||||
ld_tls_support=no
|
||||
# Check ld and ld.so.1 TLS support.
|
||||
if echo "$ld_ver" | grep GNU > /dev/null; then
|
||||
# Assume all interesting versions of GNU ld have TLS support.
|
||||
# FIXME: still need ld.so.1 support, i.e. ld version checks below.
|
||||
ld_tls_support=yes
|
||||
else
|
||||
case "$target" in
|
||||
# Solaris 8/x86 ld has GNU style TLS support since version 1.280.
|
||||
i?86-*-solaris2.8)
|
||||
min_tls_ld_vers_minor=280
|
||||
;;
|
||||
# Solaris 8/SPARC ld has TLS support since version 1.272.
|
||||
sparc*-*-solaris2.8)
|
||||
min_tls_ld_vers_minor=272
|
||||
;;
|
||||
# Solaris 9/x86 ld has GNU style TLS support since version 1.374.
|
||||
i?86-*-solaris2.9)
|
||||
min_tls_ld_vers_minor=374
|
||||
;;
|
||||
# Solaris 9/SPARC and Solaris 10+ ld have TLS support since FCS.
|
||||
sparc*-*-solaris2.9 | *-*-solaris2.1[[0-9]]*)
|
||||
min_tls_ld_vers_minor=343
|
||||
;;
|
||||
esac
|
||||
if test "$ls_vers_major" -gt 1 || \
|
||||
test "$ld_vers_minor" -ge "$min_tls_ld_vers_minor"; then
|
||||
ld_tls_support=yes
|
||||
else
|
||||
set_have_as_tls=no
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT($ld_tls_support)
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
save_LDFLAGS="$LDFLAGS"
|
||||
LIBS=
|
||||
LDFLAGS=
|
||||
|
||||
AC_MSG_CHECKING(alternate thread library)
|
||||
case "$target" in
|
||||
# TLS support was backported to Solaris 8 patches, but only lives in
|
||||
# the alternate thread library which became the default in Solaris 9.
|
||||
# We want to always use that, irrespective of TLS support.
|
||||
*-*-solaris2.8)
|
||||
# Take multilib subdir into account. There's no spec to handle
|
||||
# this. The 64 symlink exists since Solaris 8.
|
||||
lwp_dir=/usr/lib/lwp
|
||||
lwp_spec="-L$lwp_dir%{m64:/64} -R$lwp_dir%{m64:/64}"
|
||||
LDFLAGS="-L$lwp_dir -R$lwp_dir"
|
||||
;;
|
||||
*-*-solaris2*)
|
||||
lwp_dir="none"
|
||||
lwp_spec=""
|
||||
;;
|
||||
esac
|
||||
# Always define LIB_THREAD_LDFLAGS_SPEC, even without TLS support.
|
||||
AC_DEFINE_UNQUOTED(LIB_THREAD_LDFLAGS_SPEC, "$lwp_spec",
|
||||
[Define to the linker flags to use for -pthread.])
|
||||
AC_MSG_RESULT($lwp_dir)
|
||||
|
||||
AC_MSG_CHECKING(library containing $tga_func)
|
||||
# Before Solaris 10, __tls_get_addr (SPARC/x64) resp. ___tls_get_addr
|
||||
# (32-bit x86) only lived in libthread, so check for that. Keep
|
||||
# set_have_as_tls if found, disable if not.
|
||||
AC_SEARCH_LIBS([$tga_func], [thread],, [set_have_as_tls=no])
|
||||
# Clear LIBS if we cannot support TLS.
|
||||
if test $set_have_as_tls = no; then
|
||||
LIBS=
|
||||
fi
|
||||
# Always define LIB_TLS_SPEC, even without TLS support.
|
||||
AC_DEFINE_UNQUOTED(LIB_TLS_SPEC, "$LIBS",
|
||||
[Define to the library containing __tls_get_addr/___tls_get_addr.])
|
||||
AC_MSG_RESULT($LIBS)
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
LDFLAGS="$save_LDFLAGS"
|
||||
;;
|
||||
esac
|
||||
if test $set_have_as_tls = yes ; then
|
||||
AC_DEFINE(HAVE_AS_TLS, 1,
|
||||
[Define if your assembler supports thread-local storage.])
|
||||
[Define if your assembler and linker support thread-local storage.])
|
||||
fi
|
||||
|
||||
# Target-specific assembler checks.
|
||||
|
|
|
@ -4165,6 +4165,29 @@ There are patches for Solaris 8 (117350-12 or newer for SPARC,
|
|||
117351-12 or newer for Intel) and Solaris 9 (117171-11 or newer for
|
||||
SPARC, 117172-11 or newer for Intel) that address this problem.
|
||||
|
||||
Solaris~8 provides an alternate implementation of the thread libraries,
|
||||
@samp{libpthread} and @samp{libthread}. They are required for TLS
|
||||
support and have been made the default in Solaris~9, so they are always
|
||||
used on Solaris~8.
|
||||
|
||||
Thread-local storage (TLS) is supported in Solaris~8 and 9, but requires
|
||||
some patches. The @samp{libthread} patches provide the
|
||||
@code{__tls_get_addr} (SPARC, 64-bit x86) resp.@ @code{___tls_get_addr}
|
||||
(32-bit x86) functions. On Solaris~8, you need 108993-26 or newer on
|
||||
SPARC, 108994-26 or newer on Intel. On Solaris~9, the necessary support
|
||||
on SPARC is present since FCS, while 114432-05 or newer is reqired on
|
||||
Intel. Additionally, on Solaris~8, patch 109147-14 or newer on SPARC or
|
||||
109148-22 or newer on Intel are required for the Sun @command{ld} and
|
||||
runtime linker (@command{ld.so.1}) support. Again, Solaris~9/SPARC
|
||||
works since FCS, while 113986-02 is required on Intel. The linker
|
||||
patches must be installed even if GNU @command{ld} is used. Sun
|
||||
@command{as} in Solaris~8 and 9 doesn't support the necessary
|
||||
relocations, so GNU @command{as} must be used. The @command{configure}
|
||||
script checks for those prerequisites and automatically enables TLS
|
||||
support if they are met. Although those minimal patch versions should
|
||||
work, it is recommended to use the latest patch versions which include
|
||||
additional bug fixes.
|
||||
|
||||
@html
|
||||
<hr />
|
||||
@end html
|
||||
|
|
|
@ -1879,6 +1879,16 @@ The supported values of @var{feature} for directive @code{dg-add-options}
|
|||
are:
|
||||
|
||||
@table @code
|
||||
@item arm_neon
|
||||
NEON support. Only ARM targets support this feature, and only then
|
||||
in certain modes; see the @ref{arm_neon_ok,,arm_neon_ok effective target
|
||||
keyword}.
|
||||
|
||||
@item arm_neon_fp16
|
||||
NEON and half-precision floating point support. Only ARM targets
|
||||
support this feature, and only then in certain modes; see
|
||||
the @ref{arm_neon_ok,,arm_neon_fp16_ok effective target keyword}.
|
||||
|
||||
@item bind_pic_locally
|
||||
Add the target-specific flags needed to enable functions to bind
|
||||
locally when using pic/PIC passes in the testsuite.
|
||||
|
@ -1894,15 +1904,8 @@ compliance mode.
|
|||
@code{mips16} function attributes.
|
||||
Only MIPS targets support this feature, and only then in certain modes.
|
||||
|
||||
@item arm_neon
|
||||
NEON support. Only ARM targets support this feature, and only then
|
||||
in certain modes; see the @ref{arm_neon_ok,,arm_neon_ok effective target
|
||||
keyword}.
|
||||
|
||||
@item arm_neon_fp16
|
||||
NEON and half-precision floating point support. Only ARM targets
|
||||
support this feature, and only then in certain modes; see
|
||||
the @ref{arm_neon_ok,,arm_neon_fp16_ok effective target keyword}.
|
||||
@item tls
|
||||
Add the target-specific flags needed to use thread-local storage.
|
||||
@end table
|
||||
|
||||
@node Require Support
|
||||
|
|
|
@ -1,3 +1,22 @@
|
|||
2010-07-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* lib/target-supports.exp (add_options_for_tls): New proc.
|
||||
* g++.dg/tls/static-1.C: Use dg-add-options tls.
|
||||
* g++.dg/tls/static-1a.cc: Likewise.
|
||||
* gcc.dg/tls/emutls-1.c: Likewise.
|
||||
* gcc.dg/tls/opt-11.c: Likewise.
|
||||
* gcc.dg/tls/opt-12.c: Likewise.
|
||||
* gcc.dg/tls/pr24428-2.c: Likewise.
|
||||
* gcc.dg/tls/pr24428.c: Likewise.
|
||||
* obj-c++.dg/tls/static-1.mm: Likewise.
|
||||
* obj-c++.dg/torture/tls/thr-init-1.mm: Likewise.
|
||||
* obj-c++.dg/torture/tls/thr-init-2.mm: Likewise.
|
||||
* obj-c++.dg/torture/tls/thr-init-3.mm: Likewise.
|
||||
* objc.dg/torture/tls/thr-init-2.m: Likewise.
|
||||
* objc.dg/torture/tls/thr-init-3.m: Likewise.
|
||||
* objc.dg/torture/tls/thr-init.m: Likewise.
|
||||
* gcc.dg/lto/20090210_0.c: Add -pthread for *-*-solaris2.[89].
|
||||
|
||||
2010-07-23 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* gcc.dg/tree-ssa/loadpre6.c: Cleanup fre dump file.
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// { dg-do run }
|
||||
// { dg-options "-O2" }
|
||||
// { dg-require-effective-target tls_runtime }
|
||||
// { dg-add-options tls }
|
||||
// { dg-additional-sources "static-1a.cc" }
|
||||
|
||||
extern "C" void abort ();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// { dg-do run }
|
||||
// { dg-options "-O2" }
|
||||
// { dg-require-effective-target tls_runtime }
|
||||
// { dg-add-options tls }
|
||||
// { dg-additional-sources "static-1a.cc" }
|
||||
|
||||
struct A
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* { dg-lto-do run } */
|
||||
/* { dg-suppress-ld-options {-fPIC} } */
|
||||
/* { dg-require-effective-target tls } */
|
||||
/* { dg-extra-ld-options "-pthread" { target *-*-solaris2.[89] } } */
|
||||
int foo (int x)
|
||||
{
|
||||
return x;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-do run { target *-wrs-vxworks } } */
|
||||
/* { dg-require-effective-target tls } */
|
||||
/* { dg-add-options tls } */
|
||||
|
||||
/* vxworks' TLS model requires no extra padding on the tls proxy
|
||||
objects. */
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target tls_runtime } */
|
||||
/* { dg-add-options tls } */
|
||||
|
||||
extern void abort (void);
|
||||
extern void *memset (void *, int, __SIZE_TYPE__);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -fpic" } */
|
||||
/* { dg-require-effective-target tls_runtime } */
|
||||
/* { dg-add-options tls } */
|
||||
/* { dg-require-effective-target fpic } */
|
||||
|
||||
extern void abort (void);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-require-effective-target tls_runtime } */
|
||||
/* { dg-add-options tls } */
|
||||
|
||||
__thread double thrtest[81];
|
||||
int main ()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2" } */
|
||||
/* { dg-require-effective-target tls_runtime } */
|
||||
/* { dg-add-options tls } */
|
||||
|
||||
__thread double thrtest[81];
|
||||
int main ()
|
||||
|
|
|
@ -569,6 +569,24 @@ proc check_effective_target_pcc_bitfield_type_matters { } {
|
|||
}]
|
||||
}
|
||||
|
||||
# Add to FLAGS all the target-specific flags needed to use thread-local storage.
|
||||
|
||||
proc add_options_for_tls { flags } {
|
||||
# On Solaris 8 and 9, __tls_get_addr/___tls_get_addr only lives in
|
||||
# libthread, so always pass -pthread for native TLS.
|
||||
# Need to duplicate native TLS check from
|
||||
# check_effective_target_tls_native to avoid recursion.
|
||||
if { [istarget *-*-solaris2.\[89\]*] &&
|
||||
[check_no_messages_and_pattern tls_native "!emutls" assembly {
|
||||
__thread int i;
|
||||
int f (void) { return i; }
|
||||
void g (int j) { i = j; }
|
||||
}] } {
|
||||
return "$flags -pthread"
|
||||
}
|
||||
return $flags
|
||||
}
|
||||
|
||||
# Return 1 if thread local storage (TLS) is supported, 0 otherwise.
|
||||
|
||||
proc check_effective_target_tls {} {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// { dg-do run }
|
||||
// { dg-require-effective-target tls }
|
||||
// { dg-add-options tls }
|
||||
// { dg-additional-sources "static-1a.mm" }
|
||||
|
||||
extern "C" {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// { dg-do run }
|
||||
// { dg-require-effective-target tls }
|
||||
// { dg-add-options tls }
|
||||
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
|
||||
extern "C" {
|
||||
extern void abort ();
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// { dg-do run }
|
||||
// { dg-require-effective-target tls }
|
||||
// { dg-add-options tls }
|
||||
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
|
||||
|
||||
extern "C" {
|
||||
|
@ -42,4 +43,4 @@ int main (int ac, char *av[])
|
|||
abort () ;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target tls } */
|
||||
/* { dg-add-options tls } */
|
||||
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// { dg-do run }
|
||||
// { dg-require-effective-target tls }
|
||||
// { dg-add-options tls }
|
||||
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
|
||||
|
||||
extern void _exit(int);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target tls } */
|
||||
/* { dg-add-options tls } */
|
||||
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
|
||||
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
|
||||
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target tls } */
|
||||
/* { dg-add-options tls } */
|
||||
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
|
||||
|
||||
extern void _exit(int);
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2010-07-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* configure.tgt (*-*-solaris2.[56]*): Removed.
|
||||
|
||||
2010-07-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* acinclude.m4 (LIBGOMP_ENABLE_SYMVERS): Handle sun style.
|
||||
|
|
|
@ -116,11 +116,6 @@ case "${target}" in
|
|||
config_path="mingw32 posix"
|
||||
;;
|
||||
|
||||
*-*-solaris2.[56]*)
|
||||
config_path="posix95 posix"
|
||||
XLDFLAGS="${XLDFLAGS} -lposix4"
|
||||
;;
|
||||
|
||||
*-*-darwin*)
|
||||
config_path="bsd posix"
|
||||
;;
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2010-07-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* configure.ac (*-*-solaris2.8): Use alternate thread library.
|
||||
Add libthread.
|
||||
(*-*-solaris2.9): Use libthread.
|
||||
* configure: Regenerate.
|
||||
|
||||
2010-07-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* include/sparc-signal.h: Renamed to ...
|
||||
|
|
13
libjava/configure
vendored
13
libjava/configure
vendored
|
@ -20712,6 +20712,19 @@ case "$THREADS" in
|
|||
THREADLIBS='-lpthread -lrt'
|
||||
THREADSPEC='-lpthread -lrt'
|
||||
;;
|
||||
*-*-solaris2.8)
|
||||
# Always use alternate thread library on Solaris 8. Need libthread
|
||||
# for TLS support.
|
||||
# Need -Wl,-R to get it through libtool ...
|
||||
THREADLIBS='-L/usr/lib/lwp$(MULTISUBDIR) -Wl,-R -Wl,/usr/lib/lwp$(MULTISUBDIR) -lpthread -lthread'
|
||||
# ... while ld only accepts -R.
|
||||
THREADSPEC='-L/usr/lib/lwp%{m64:/64} -R/usr/lib/lwp%{m64:/64} -lpthread -lthread'
|
||||
;;
|
||||
*-*-solaris2.9)
|
||||
# As on Solaris 8, need libthread for TLS support.
|
||||
THREADLIBS='-lpthread -lthread'
|
||||
THREADSPEC='-lpthread -lthread'
|
||||
;;
|
||||
*)
|
||||
THREADLIBS=-lpthread
|
||||
THREADSPEC=-lpthread
|
||||
|
|
|
@ -1064,6 +1064,19 @@ case "$THREADS" in
|
|||
THREADLIBS='-lpthread -lrt'
|
||||
THREADSPEC='-lpthread -lrt'
|
||||
;;
|
||||
*-*-solaris2.8)
|
||||
# Always use alternate thread library on Solaris 8. Need libthread
|
||||
# for TLS support.
|
||||
# Need -Wl,-R to get it through libtool ...
|
||||
THREADLIBS='-L/usr/lib/lwp$(MULTISUBDIR) -Wl,-R -Wl,/usr/lib/lwp$(MULTISUBDIR) -lpthread -lthread'
|
||||
# ... while ld only accepts -R.
|
||||
THREADSPEC='-L/usr/lib/lwp%{m64:/64} -R/usr/lib/lwp%{m64:/64} -lpthread -lthread'
|
||||
;;
|
||||
*-*-solaris2.9)
|
||||
# As on Solaris 8, need libthread for TLS support.
|
||||
THREADLIBS='-lpthread -lthread'
|
||||
THREADSPEC='-lpthread -lthread'
|
||||
;;
|
||||
*)
|
||||
THREADLIBS=-lpthread
|
||||
THREADSPEC=-lpthread
|
||||
|
|
Loading…
Add table
Reference in a new issue