Patchwork [libitm] Link with -litm and -pthread

login
register
mail settings
Submitter Eric Botcazou
Date Feb. 11, 2012, 2:14 p.m.
Message ID <201202111514.40618.ebotcazou@adacore.com>
Download mbox | patch
Permalink /patch/140785/
State New
Headers show

Comments

Eric Botcazou - Feb. 11, 2012, 2:14 p.m.
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  <ebotcazou@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  <ebotcazou@adacore.com>

	* configure.ac (link_itm): Fix comment.
	* configure: Regenerate.
	* testsuite/lib/libitm.exp: Do not pass -litm for the link.
Jack Howarth - Feb. 11, 2012, 5:45 p.m.
On Sat, Feb 11, 2012 at 03:14:40PM +0100, Eric Botcazou wrote:
> 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?

This change causes massive failures at -m32/-m64 on x86_64-apple-darwin11
in the libitm testsuite...

FAIL: libitm.c/cancel.c (test for excess errors)
WARNING: libitm.c/cancel.c compilation failed to produce executable
FAIL: libitm.c/clone-1.c (test for excess errors)
WARNING: libitm.c/clone-1.c compilation failed to produce executable
FAIL: libitm.c/dropref-2.c (test for excess errors)
WARNING: libitm.c/dropref-2.c compilation failed to produce executable
FAIL: libitm.c/dropref.c (test for excess errors)
WARNING: libitm.c/dropref.c compilation failed to produce executable
FAIL: libitm.c/memcpy-1.c (test for excess errors)
WARNING: libitm.c/memcpy-1.c compilation failed to produce executable
FAIL: libitm.c/memset-1.c (test for excess errors)
WARNING: libitm.c/memset-1.c compilation failed to produce executable
FAIL: libitm.c/notx.c (test for excess errors)
WARNING: libitm.c/notx.c compilation failed to produce executable
FAIL: libitm.c/reentrant.c (test for excess errors)
WARNING: libitm.c/reentrant.c compilation failed to produce executable
FAIL: libitm.c/simple-1.c (test for excess errors)
WARNING: libitm.c/simple-1.c compilation failed to produce executable
FAIL: libitm.c/simple-2.c (test for excess errors)
WARNING: libitm.c/simple-2.c compilation failed to produce executable
FAIL: libitm.c/stackundo.c (test for excess errors)
WARNING: libitm.c/stackundo.c compilation failed to produce executable
FAIL: libitm.c/txrelease.c (test for excess errors)
WARNING: libitm.c/txrelease.c compilation failed to produce executable
Running /sw/src/fink.build/gcc47-4.7.0-1/gcc-4.7-20120211/libitm/testsuite/libitm.c++/c++.exp ...
FAIL: libitm.c++/dropref.C (test for excess errors)
WARNING: libitm.c++/dropref.C compilation failed to produce executable
FAIL: libitm.c++/eh-1.C (test for excess errors)
WARNING: libitm.c++/eh-1.C compilation failed to produce executable

# of expected passes		1
# of unexpected failures	14
# of unsupported tests		1

These appear in the form...

Executing on host: /sw/src/fink.build/gcc47-4.7.0-1/darwin_objdir/gcc/xgcc -B/sw/src/fink.build/gcc47-4.7.0-1/darwin_objdir/gcc/ /sw/src/fink.build/gcc47-4.7.0-1/gcc-4.7-20120211/libitm/testsuite/libitm.c/cancel.c  -B/sw/src/fink.build/gcc47-4.7.0-1/darwin_objdir/x86_64-apple-darwin11.3.0/./libitm/ -I/sw/src/fink.build/gcc47-4.7.0-1/darwin_objdir/x86_64-apple-darwin11.3.0/./libitm -I/sw/src/fink.build/gcc47-4.7.0-1/gcc-4.7-20120211/libitm/testsuite/.. -shared-libgcc -fmessage-length=0 -fgnu-tm  -O2   -L/sw/src/fink.build/gcc47-4.7.0-1/darwin_objdir/x86_64-apple-darwin11.3.0/./libitm/.libs -lm   -m64 -o ./cancel.exe    (timeout = 300)
Undefined symbols for architecture x86_64:
  "__ITM_registerTMCloneTable", referenced from:
      ___doTMRegistrations in crttms.o
  "__ITM_abortTransaction", referenced from:
      _cancel1 in ccSkMYPk.o
      transaction clone for cancel1 in ccSkMYPk.o
      _main in ccSkMYPk.o
  "__ITM_beginTransaction", referenced from:
      _main in ccSkMYPk.o
  "__ITM_WU4", referenced from:
      _main in ccSkMYPk.o
  "__ITM_commitTransaction", referenced from:
      _main in ccSkMYPk.o
  "__ITM_inTransaction", referenced from:
      _main in ccSkMYPk.o
  "__ITM_deregisterTMCloneTable", referenced from:
      ___doTMdeRegistrations in crttme.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
compiler exited with status 1
output is:
Undefined symbols for architecture x86_64:
  "__ITM_registerTMCloneTable", referenced from:
      ___doTMRegistrations in crttms.o
  "__ITM_abortTransaction", referenced from:
      _cancel1 in ccSkMYPk.o
      transaction clone for cancel1 in ccSkMYPk.o
      _main in ccSkMYPk.o
  "__ITM_beginTransaction", referenced from:
      _main in ccSkMYPk.o
  "__ITM_WU4", referenced from:
      _main in ccSkMYPk.o
  "__ITM_commitTransaction", referenced from:
      _main in ccSkMYPk.o
  "__ITM_inTransaction", referenced from:
      _main in ccSkMYPk.o
  "__ITM_deregisterTMCloneTable", referenced from:
      ___doTMdeRegistrations in crttme.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

FAIL: libitm.c/cancel.c (test for excess errors)

> 
> 
> 2012-02-11  Eric Botcazou  <ebotcazou@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  <ebotcazou@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-*-*])
Eric Botcazou - Feb. 11, 2012, 5:54 p.m.
> This change causes massive failures at -m32/-m64 on x86_64-apple-darwin11
> in the libitm testsuite...

How did you test it?
Jack Howarth - Feb. 11, 2012, 6:06 p.m.
On Sat, Feb 11, 2012 at 06:54:05PM +0100, Eric Botcazou wrote:
> > This change causes massive failures at -m32/-m64 on x86_64-apple-darwin11
> > in the libitm testsuite...
> 
> How did you test it?
> 
> -- 
> Eric Botcazou

Eric,
   FYI, if I restore -litm to the linkage of the failing tests, they compile
and run fine. I don't understand why we think -litm can be dropped from linking
the tests in the libitm testsuite.
        Jack
Eric Botcazou - Feb. 11, 2012, 6:13 p.m.
>    FYI, if I restore -litm to the linkage of the failing tests, they
> compile and run fine. I don't understand why we think -litm can be dropped
> from linking the tests in the libitm testsuite.

Because -fgnu-tm will automatically add it on the link line, like for -fopenmp.
IainS - Feb. 11, 2012, 6:15 p.m.
Hi Eric,

On 11 Feb 2012, at 14:14, Eric Botcazou wrote:

> 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  <ebotcazou@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  <ebotcazou@adacore.com>
>
> 	* configure.ac (link_itm): Fix comment.
> 	* configure: Regenerate.
> 	* testsuite/lib/libitm.exp: Do not pass -litm for the link.
>
>
> -- 
> Eric Botcazou
> <p.diff>

very little time - about to go out..

... but I suspect

LINK_COMMAND_SPEC_A in config/darwin.h ... which will need the:

+    %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\

however, that's a very quick look.
Iain
Richard Henderson - Feb. 13, 2012, 9:26 p.m.
On 02/11/2012 06:14 AM, Eric Botcazou wrote:
> 2012-02-11  Eric Botcazou  <ebotcazou@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  <ebotcazou@adacore.com>
> 
> 	* configure.ac (link_itm): Fix comment.
> 	* configure: Regenerate.
> 	* testsuite/lib/libitm.exp: Do not pass -litm for the link.

Ok with the darwin followup-patch.


r~
Hans-Peter Nilsson - Feb. 14, 2012, 2:30 a.m.
On Sat, 11 Feb 2012, Eric Botcazou wrote:
> 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.

It broke all targets that don't implement threads and as such
don't support -pthread.  And you need to gate *all* tm-related
tests on something like check_effective_target_pthread.
I see regress-155 for cris-elf.

Can't you just limit adding -pthread to Solaris 8 or something?

brgds, H-P
Eric Botcazou - Feb. 14, 2012, 8:35 a.m.
> It broke all targets that don't implement threads and as such
> don't support -pthread.  And you need to gate *all* tm-related
> tests on something like check_effective_target_pthread.

The question is, how is libitm supposed to work on these systems?  The 
configure.ac file contains:

# Check to see if -pthread or -lpthread is needed.  Prefer the former.
# In case the pthread.h system header is not found, this test will fail.
XPCFLAGS=""
CFLAGS="$CFLAGS -pthread"
AC_LINK_IFELSE(
 [AC_LANG_PROGRAM(
  [#include <pthread.h>
   void *g(void *d) { return NULL; }],
  [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
 [XPCFLAGS=" -Wc,-pthread"],
 [CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
  AC_LINK_IFELSE(
   [AC_LANG_PROGRAM(
    [#include <pthread.h>
     void *g(void *d) { return NULL; }],
    [pthread_t t; pthread_create(&t,NULL,g,NULL);])],
   [],
   [AC_MSG_ERROR([Pthreads are required to build libitm])])])

> Can't you just limit adding -pthread to Solaris 8 or something?

I didn't invent anything here, this is exactly how -fopenmp/libgomp works.

Just define GTM_SELF_SPECS to "" like Darwin and Windows.
Hans-Peter Nilsson - Feb. 14, 2012, 11:53 a.m.
On Tue, 14 Feb 2012, Eric Botcazou wrote:
> > It broke all targets that don't implement threads and as such
> > don't support -pthread.  And you need to gate *all* tm-related
> > tests on something like check_effective_target_pthread.
>
> The question is, how is libitm supposed to work on these systems?

I didn't think about that before since whatever was there
compiled and the tests passed, but right, that's a clue.

>  The
> configure.ac file contains:

Which is incidental, because configure.tgt already declares
non-support and I get:
checking for libitm support... no

Hm, so it seems an oversight in the framework that tm is
enabled for such systems?

> Just define GTM_SELF_SPECS to "" like Darwin and Windows.

That seems to imply that *every* such system should define
GTM_SELF_SPECS (and should have been part of your recent
changes).  But on a second look it seems best to follow the lead
of -fopenmp which implies instead that all tm tests should be
gated on a new check_effective_target_fgnu-tm.  Your ball.

brgds, H-P
Andreas Krebbel - Feb. 14, 2012, 4:08 p.m.
On 02/11/2012 03:14 PM, Eric Botcazou wrote:
> 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  <ebotcazou@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  <ebotcazou@adacore.com>
> 
> 	* configure.ac (link_itm): Fix comment.
> 	* configure: Regenerate.
> 	* testsuite/lib/libitm.exp: Do not pass -litm for the link.

Hi,

I see several new fails on s390x with that patch (r184174):

> FAIL: gcc.dg/lto/trans-mem-1 c_lto_trans-mem-1_0.o-c_lto_trans-mem-1_1.o link, -flto
-fgnu-tm
> UNRESOLVED: gcc.dg/lto/trans-mem-1 c_lto_trans-mem-1_0.o-c_lto_trans-mem-1_1.o execute
-flto -fgnu-tm
> FAIL: gcc.dg/lto/trans-mem-2 c_lto_trans-mem-2_0.o-c_lto_trans-mem-2_1.o link, -flto
-fgnu-tm
> UNRESOLVED: gcc.dg/lto/trans-mem-2 c_lto_trans-mem-2_0.o-c_lto_trans-mem-2_1.o execute
-flto -fgnu-tm
> FAIL: gcc.dg/lto/trans-mem-4 c_lto_trans-mem-4_0.o-c_lto_trans-mem-4_1.o link, -flto
-fgnu-tm
> UNRESOLVED: gcc.dg/lto/trans-mem-4 c_lto_trans-mem-4_0.o-c_lto_trans-mem-4_1.o execute
-flto -fgnu-tm


Executing on host: /home/andreas/patched/gcc-head-build/gcc/xgcc
-B/home/andreas/patched/gcc-head-build/gcc/ c_lto_trans-mem-2_0.o c_lto_trans-mem-2_1.o
-flto -fgnu-tm       -o gcc-dg-lto-trans-mem-2-01.exe    (timeout = 300)
xgcc: error: libitm.spec: No such file or directory^M
compiler exited with status 1

Bye,

-Andreas-
IainS - Feb. 14, 2012, 4:24 p.m.
On 14 Feb 2012, at 16:08, Andreas Krebbel wrote:

> On 02/11/2012 03:14 PM, Eric Botcazou wrote:
>> 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  <ebotcazou@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  <ebotcazou@adacore.com>
>>
>> 	* configure.ac (link_itm): Fix comment.
>> 	* configure: Regenerate.
>> 	* testsuite/lib/libitm.exp: Do not pass -litm for the link.
>
> Hi,
>
> I see several new fails on s390x with that patch (r184174):
>
>> FAIL: gcc.dg/lto/trans-mem-1 c_lto_trans-mem-1_0.o-c_lto_trans- 
>> mem-1_1.o link, -flto
> -fgnu-tm
>> UNRESOLVED: gcc.dg/lto/trans-mem-1 c_lto_trans-mem-1_0.o- 
>> c_lto_trans-mem-1_1.o execute
> -flto -fgnu-tm
>> FAIL: gcc.dg/lto/trans-mem-2 c_lto_trans-mem-2_0.o-c_lto_trans- 
>> mem-2_1.o link, -flto
> -fgnu-tm
>> UNRESOLVED: gcc.dg/lto/trans-mem-2 c_lto_trans-mem-2_0.o- 
>> c_lto_trans-mem-2_1.o execute
> -flto -fgnu-tm
>> FAIL: gcc.dg/lto/trans-mem-4 c_lto_trans-mem-4_0.o-c_lto_trans- 
>> mem-4_1.o link, -flto
> -fgnu-tm
>> UNRESOLVED: gcc.dg/lto/trans-mem-4 c_lto_trans-mem-4_0.o- 
>> c_lto_trans-mem-4_1.o execute
> -flto -fgnu-tm
>
>
> Executing on host: /home/andreas/patched/gcc-head-build/gcc/xgcc
> -B/home/andreas/patched/gcc-head-build/gcc/ c_lto_trans-mem-2_0.o  
> c_lto_trans-mem-2_1.o
> -flto -fgnu-tm       -o gcc-dg-lto-trans-mem-2-01.exe    (timeout =  
> 300)
> xgcc: error: libitm.spec: No such file or directory^M

... any .exp causing use of the libitm spec will need to arrange for - 
B /path/to/libitm/build to be appended to the options?
Eric Botcazou - Feb. 14, 2012, 10:58 p.m.
> I see several new fails on s390x with that patch (r184174):

People should realize that -fgnu-tm doesn't really work if libitm hasn't been 
ported to the architecture, for example s390/s390x.  My understanding is that 
Hans-Peter's patch should have taken care of this now.
Andreas Krebbel - Feb. 17, 2012, 5:50 p.m.
On 02/14/2012 11:58 PM, Eric Botcazou wrote:
>> I see several new fails on s390x with that patch (r184174):
> 
> People should realize that -fgnu-tm doesn't really work if libitm hasn't been 
> ported to the architecture, for example s390/s390x.  My understanding is that 
> Hans-Peter's patch should have taken care of this now.
> 
Sure I'm very well aware that -fgnu-tm cannot work on s390 since we do not have libitm
support yet. So I think the option should simply *not* be used by the testsuite.

However, it still fails with r184339.

The dg-require check does not seem to work properly. Since it only affects the lto tm
testcases perhaps the lib/lto.exp magic dealing with the _0 and _1 files doesn't handle it
properly?!

Bye,

-Andreas-

Patch

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-*-*])