Patchwork [libitm] Link with -litm and -pthread

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

Comments

Eric Botcazou - Feb. 11, 2012, 6:11 p.m.
>     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.
Jack Howarth - Feb. 11, 2012, 7:13 p.m.
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-*-*])
Eric Botcazou - Feb. 11, 2012, 7:23 p.m.
>    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...

Great, thanks for the testing.
Jack Howarth - Feb. 12, 2012, 3:41 p.m.
On Sat, Feb 11, 2012 at 08:23:45PM +0100, Eric Botcazou wrote:
> >    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...
> 
> Great, thanks for the testing.

Eric,
   The full regression tests show no new failures on x86_64-apple-darwin11...

   http://gcc.gnu.org/ml/gcc-testresults/2012-02/msg01063.html

       Jack
> 
> -- 
> Eric Botcazou
Greta Yorsh - Feb. 15, 2012, 12:19 p.m.
This patch causes all tm tests to fail on arm-none-eabi target that doesn't
support -pthread command line option:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52259


> -----Original Message-----
> From: Eric Botcazou [mailto:ebotcazou@adacore.com]
> Sent: 11 February 2012 19:24
> To: Jack Howarth
> Cc: gcc-patches@gcc.gnu.org
> Subject: Re: [libitm] Link with -litm and -pthread
> 
> >    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...
> 
> Great, thanks for the testing.
> 
> --
> Eric Botcazou

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