Hi, this completes the half-implemented linking scheme of libitm and makes it mimic that of libgomp entirely. We need the -pthread thing on Solaris 8.
Tested on SPARC/Solaris 8 & 9 and i586/Linux, OK for the mainline? 2012-02-11 Eric Botcazou <ebotca...@adacore.com> * gcc.c (LINK_COMMAND_SPEC): Deal with -fgnu-tm. (GTM_SELF_SPECS): Define if not already defined. (driver_self_specs): Add GTM_SELF_SPECS. * config/darwin.h (GTM_SELF_SPECS): Define. * config/i386/cygwin.h (GTM_SELF_SPECS): Likewise. * config/i386/mingw32.h (GTM_SELF_SPECS): Likewise. 2012-02-11 Eric Botcazou <ebotca...@adacore.com> * configure.ac (link_itm): Fix comment. * configure: Regenerate. * testsuite/lib/libitm.exp: Do not pass -litm for the link. -- Eric Botcazou
Index: gcc/gcc.c =================================================================== --- gcc/gcc.c (revision 183864) +++ gcc/gcc.c (working copy) @@ -675,6 +675,7 @@ proper position among the other output f %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}}\ %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\ %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\ + %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ %(mflib) " STACK_SPLIT_SPEC "\ %{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\ %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\ @@ -839,9 +840,14 @@ static const char *const multilib_defaul #define GOMP_SELF_SPECS "%{fopenmp|ftree-parallelize-loops=*: -pthread}" #endif +/* Likewise for -fgnu-tm. */ +#ifndef GTM_SELF_SPECS +#define GTM_SELF_SPECS "%{fgnu-tm: -pthread}" +#endif + static const char *const driver_self_specs[] = { "%{fdump-final-insns:-fdump-final-insns=.} %<fdump-final-insns", - DRIVER_SELF_SPECS, CONFIGURE_SPECS, GOMP_SELF_SPECS + DRIVER_SELF_SPECS, CONFIGURE_SPECS, GOMP_SELF_SPECS, GTM_SELF_SPECS }; #ifndef OPTION_DEFAULT_SPECS Index: gcc/config/i386/cygwin.h =================================================================== --- gcc/config/i386/cygwin.h (revision 183864) +++ gcc/config/i386/cygwin.h (working copy) @@ -126,6 +126,8 @@ along with GCC; see the file COPYING3. and the -pthread flag is not recognized. */ #undef GOMP_SELF_SPECS #define GOMP_SELF_SPECS "" +#undef GTM_SELF_SPECS +#define GTM_SELF_SPECS "" /* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygwin. */ #if DWARF2_UNWIND_INFO Index: gcc/config/i386/mingw32.h =================================================================== --- gcc/config/i386/mingw32.h (revision 183864) +++ gcc/config/i386/mingw32.h (working copy) @@ -187,6 +187,8 @@ do { \ #undef GOMP_SELF_SPECS #define GOMP_SELF_SPECS "%{fopenmp|ftree-parallelize-loops=*: " \ "-mthreads -pthread}" +#undef GTM_SELF_SPECS +#define GTM_SELF_SPECS "%{fgnu-tm:-mthreads -pthread}" /* mingw32 atexit function is safe to use in shared libraries. Use it to register C++ static destructors. */ Index: gcc/config/darwin.h =================================================================== --- gcc/config/darwin.h (revision 183864) +++ gcc/config/darwin.h (working copy) @@ -915,6 +915,8 @@ void add_framework_path (char *); #undef GOMP_SELF_SPECS #define GOMP_SELF_SPECS "" +#undef GTM_SELF_SPECS +#define GTM_SELF_SPECS "" /* Darwin disables section anchors by default. They should be enabled per arch where support exists in that arch. */ Index: libitm/configure.ac =================================================================== --- libitm/configure.ac (revision 183864) +++ libitm/configure.ac (working copy) @@ -268,7 +268,7 @@ else fi # Set up the set of libraries that we need to link against for libitm. -# Note that the GOMP_SELF_SPEC in gcc.c will force -pthread for -fopenmp, +# Note that the GTM_SELF_SPECS in gcc.c will force -pthread for -fgnu-tm, # which will force linkage against -lpthread (or equivalent for the system). # That's not 100% ideal, but about the best we can do easily. if test $enable_shared = yes; then Index: libitm/testsuite/lib/libitm.exp =================================================================== --- libitm/testsuite/lib/libitm.exp (revision 183864) +++ libitm/testsuite/lib/libitm.exp (working copy) @@ -140,7 +140,6 @@ proc libitm_init { args } { lappend ALWAYS_CFLAGS "ldflags=-L${blddir}/.libs" } lappend ALWAYS_CFLAGS "additional_flags=-I${srcdir}/.." - lappend ALWAYS_CFLAGS "ldflags=-litm" # We use atomic operations in the testcases to validate results. if { ([istarget i?86-*-*] || [istarget x86_64-*-*])