On Sat, Feb 11, 2012 at 07:11:11PM +0100, Eric Botcazou wrote: > > Applied to gcc trunk (r184130) along with the proposed fix for > > Bug libitm/52042... > > OK, I missed the hardcoded(!) spec in config/darwin.h for libgomp, so I guess > we need the same thing for libitm. Revised patch attached. > > > * config/darwin.h (LINK_COMMAND_SPEC_A): Deal with -fgnu-tm. > (GTM_SELF_SPECS): Define. > > > -- > Eric Botcazou
Eric, I missed the regeneration of libitm/configure the first time. The p2.diff with the regenerated libitm/configure passes make check in libitm now on x86_64-apple-darwin11... Native configuration is x86_64-apple-darwin11.3.0 === libitm tests === Running target unix/-m32 === libitm Summary for unix/-m32 === # of expected passes 26 # of expected failures 3 # of unsupported tests 1 Running target unix/-m64 === libitm Summary for unix/-m64 === # of expected passes 26 # of expected failures 3 # of unsupported tests 1 === libitm Summary === # of expected passes 52 # of expected failures 6 # of unsupported tests 2 Compiler version: gcc libitm Platform: x86_64-apple-darwin11.3.0 configure flags: --prefix=/sw --prefix=/sw/lib/gcc4.7 --mandir=/sw/share/man --infodir=/sw/lib/gcc4.7/info --with-build-config=bootstrap-lto --enable-stage1-languages=c,lto --enable-languages=c,c++,fortran,lto,objc,obj-c++,java --with-gmp=/sw --with-libiconv-prefix=/sw --with-ppl=/sw --with-cloog=/sw --with-mpc=/sw --with-system-zlib --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --program-suffix=-fsf-4.7 --enable-checking=release --enable-cloog-backend=isl The addition of support for static libitm in the second version of the patch while probably non-essential is a good idea. Jack ps I'll do a full regression test for p2.diff and will post the results to gcc-testresults. > 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) > @@ -183,6 +183,8 @@ extern GTY(()) int darwin_ms_struct; > %{L*} %(link_libgcc) %o > %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} \ > %{fopenmp|ftree-parallelize-loops=*: \ > %{static|static-libgcc|static-libstdc++|static-libgfortran: > libgomp.a%s; : -lgomp } } \ > + %{fgnu-tm: \ > + %{static|static-libgcc|static-libstdc++|static-libgfortran: > libitm.a%s; : -litm } } \ > %{!nostdlib:%{!nodefaultlibs:\ > %(link_ssp) %(link_gcc_c_sequence)\ > }}\ > @@ -915,6 +917,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-*-*])