Patchwork [build,c++,fortran,go] Use -noso/-so_archive instead of -Bstatic/-Bdynamic on Tru64 UNIX

login
register
mail settings
Submitter Rainer Orth
Date Jan. 28, 2011, 9:50 a.m.
Message ID <yddmxmlfjc0.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/80813/
State New
Headers show

Comments

Rainer Orth - Jan. 28, 2011, 9:50 a.m.
Like its Solaris and IRIX counterparts, the Tru64 UNIX linker has
support for forcing static or allowing dynamic linking.  This is
necessary to make -static-libstdc++ work, which again is a prerequisite
for Go support and graphite.

The only problem is that the necessary options are called
-noso/-so_archive instead of -Bstatic/-Bdynamic.  The following patch
implements this.  Though larger than the Solaris and IRIX versions, it's
pretty mechanical and I hope to get it into 4.6 so Go and/or graphite
can be made work on Tru64 UNIX.

Tested by a --enable-languages=go bootstrap on alpha-dec-osf5.1b so far,
and go1 was linked statically with libstdc++.  I expect to test it on
both IRIX and Solaris over the weekend to make sure none of the
-Bstatic/-Bdynamic platforms broke.

Ok for mainline afterwards?

	Rainer


2011-01-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gcc:
	* configure.ac (gcc_cv_ld_static_option): Define.
	(gcc_cv_ld_dynamic_option): Define.
	(gcc_cv_ld_static_dynamic): Tru64 UNIX support -noso/-so_archive
	instead.
	(HAVE_LD_STATIC_DYNAMIC): Update message.
	(LD_STATIC_OPTION): Define.
	(LD_DYNAMIC_OPTION): Define.
	* configure: Regenerate.
	* config.in: Regenerate.
	* gcc.c (init_spec) [USE_LIBUNWIND_EXCEPTIONS &&
	HAVE_LD_STATIC_DYNAMIC]: Use them.

	gcc/cp:
	* g++spec.c (lang_specific_driver) [HAVE_LD_STATIC_DYNAMIC] Use
	LD_STATIC_OPTION, LD_DYNAMIC_OPTION.

	gcc/fortran:
	* gfortranspec.c (add_arg_libgfortran) [HAVE_LD_STATIC_DYNAMIC] Use
	LD_STATIC_OPTION, LD_DYNAMIC_OPTION.

	gcc/go:
	* gospec.c (lang_specific_driver) [HAVE_LD_STATIC_DYNAMIC] Use
	LD_STATIC_OPTION, LD_DYNAMIC_OPTION.
Paolo Bonzini - Jan. 28, 2011, 12:15 p.m.
On 01/28/2011 10:50 AM, Rainer Orth wrote:
> The only problem is that the necessary options are called
> -noso/-so_archive instead of -Bstatic/-Bdynamic.  The following patch
> implements this.  Though larger than the Solaris and IRIX versions, it's
> pretty mechanical and I hope to get it into 4.6 so Go and/or graphite
> can be made work on Tru64 UNIX.

The build parts are ok.

Paolo
Ian Taylor - Jan. 28, 2011, 3:29 p.m.
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> 2011-01-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
>
> 	gcc:
> 	* configure.ac (gcc_cv_ld_static_option): Define.
> 	(gcc_cv_ld_dynamic_option): Define.
> 	(gcc_cv_ld_static_dynamic): Tru64 UNIX support -noso/-so_archive
> 	instead.
> 	(HAVE_LD_STATIC_DYNAMIC): Update message.
> 	(LD_STATIC_OPTION): Define.
> 	(LD_DYNAMIC_OPTION): Define.
> 	* configure: Regenerate.
> 	* config.in: Regenerate.
> 	* gcc.c (init_spec) [USE_LIBUNWIND_EXCEPTIONS &&
> 	HAVE_LD_STATIC_DYNAMIC]: Use them.
>
> 	gcc/cp:
> 	* g++spec.c (lang_specific_driver) [HAVE_LD_STATIC_DYNAMIC] Use
> 	LD_STATIC_OPTION, LD_DYNAMIC_OPTION.
>
> 	gcc/fortran:
> 	* gfortranspec.c (add_arg_libgfortran) [HAVE_LD_STATIC_DYNAMIC] Use
> 	LD_STATIC_OPTION, LD_DYNAMIC_OPTION.
>
> 	gcc/go:
> 	* gospec.c (lang_specific_driver) [HAVE_LD_STATIC_DYNAMIC] Use
> 	LD_STATIC_OPTION, LD_DYNAMIC_OPTION.

This is OK.  It seems to me to be a pure bug fix for Tru64, but please
give the RM's a chance to object before committing.

Thanks.

Ian

Patch

diff -r c9252da4cfd9 gcc/configure.ac
--- a/gcc/configure.ac	Thu Jan 27 19:07:20 2011 +0100
+++ b/gcc/configure.ac	Thu Jan 27 19:36:02 2011 +0100
@@ -3112,6 +3112,8 @@ 
 
 AC_MSG_CHECKING(linker -Bstatic/-Bdynamic option)
 gcc_cv_ld_static_dynamic=no
+gcc_cv_ld_static_option='-Bstatic'
+gcc_cv_ld_dynamic_option='-Bdynamic'
 if test $in_tree_ld = yes ; then
   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2; then
     gcc_cv_ld_static_dynamic=yes
@@ -3123,6 +3125,12 @@ 
       gcc_cv_ld_static_dynamic=yes
   else
     case "$target" in
+      # Tru64 UNIX support -noso/-so_archive instead of -Bstatic/-Bdynamic.
+      alpha*-dec-osf*)
+        gcc_cv_ld_static_dynamic=yes
+	gcc_cv_ld_static_option="-noso"
+	gcc_cv_ld_dynamic_option="-so_archive"
+        ;;
       # IRIX 6 ld supports -Bstatic/-Bdynamic.
       mips-sgi-irix6*)
         gcc_cv_ld_static_dynamic=yes
@@ -3136,7 +3144,11 @@ 
 fi
 if test x"$gcc_cv_ld_static_dynamic" = xyes; then
 	AC_DEFINE(HAVE_LD_STATIC_DYNAMIC, 1,
-[Define if your linker supports -Bstatic/-Bdynamic option.])
+[Define if your linker supports -Bstatic/-Bdynamic or equivalent options.])
+	AC_DEFINE_UNQUOTED(LD_STATIC_OPTION, "$gcc_cv_ld_static_option",
+[Define to the linker option to disable use of shared objects.])
+	AC_DEFINE_UNQUOTED(LD_DYNAMIC_OPTION, "$gcc_cv_ld_dynamic_option",
+[Define to the linker option to enable use of shared objects.])
 fi
 AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
 
diff -r c9252da4cfd9 gcc/cp/g++spec.c
--- a/gcc/cp/g++spec.c	Thu Jan 27 19:07:20 2011 +0100
+++ b/gcc/cp/g++spec.c	Thu Jan 27 19:36:02 2011 +0100
@@ -1,6 +1,6 @@ 
 /* Specific flags and argument handling of the C++ front end.
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -316,7 +316,7 @@ 
 #ifdef HAVE_LD_STATIC_DYNAMIC
       if (library > 1 && !static_link)
 	{
-	  generate_option (OPT_Wl_, "-Bstatic", 1, CL_DRIVER,
+	  generate_option (OPT_Wl_, LD_STATIC_OPTION, 1, CL_DRIVER,
 			   &new_decoded_options[j]);
 	  j++;
 	}
@@ -337,7 +337,7 @@ 
 #ifdef HAVE_LD_STATIC_DYNAMIC
       if (library > 1 && !static_link)
 	{
-	  generate_option (OPT_Wl_, "-Bdynamic", 1, CL_DRIVER,
+	  generate_option (OPT_Wl_, LD_DYNAMIC_OPTION, 1, CL_DRIVER,
 			   &new_decoded_options[j]);
 	  j++;
 	}
diff -r c9252da4cfd9 gcc/fortran/gfortranspec.c
--- a/gcc/fortran/gfortranspec.c	Thu Jan 27 19:07:20 2011 +0100
+++ b/gcc/fortran/gfortranspec.c	Thu Jan 27 19:36:02 2011 +0100
@@ -192,12 +192,12 @@ 
 {
 #ifdef HAVE_LD_STATIC_DYNAMIC
   if (force_static)
-    append_option (OPT_Wl_, "-Bstatic", 1);
+    append_option (OPT_Wl_, LD_STATIC_OPTION, 1);
 #endif
   append_option (OPT_l, FORTRAN_LIBRARY, 1);
 #ifdef HAVE_LD_STATIC_DYNAMIC
   if (force_static)
-    append_option (OPT_Wl_, "-Bdynamic", 1);
+    append_option (OPT_Wl_, LD_DYNAMIC_OPTION, 1);
 #endif
 }
 
diff -r c9252da4cfd9 gcc/gcc.c
--- a/gcc/gcc.c	Thu Jan 27 19:07:20 2011 +0100
+++ b/gcc/gcc.c	Thu Jan 27 19:36:02 2011 +0100
@@ -1375,7 +1375,8 @@ 
 			    "-lgcc_eh"
 #ifdef USE_LIBUNWIND_EXCEPTIONS
 # ifdef HAVE_LD_STATIC_DYNAMIC
-			    " %{!static:-Bstatic} -lunwind %{!static:-Bdynamic}"
+			    " %{!static:" LD_STATIC_OPTION "} -lunwind"
+			    " %{!static:" LD_DYNAMIC_OPTION "}"
 # else
 			    " -lunwind"
 # endif
diff -r c9252da4cfd9 gcc/go/gospec.c
--- a/gcc/go/gospec.c	Thu Jan 27 19:07:20 2011 +0100
+++ b/gcc/go/gospec.c	Thu Jan 27 19:36:02 2011 +0100
@@ -1,5 +1,5 @@ 
 /* gospec.c -- Specific flags and argument handling of the gcc Go front end.
-   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -301,7 +301,7 @@ 
 #ifdef HAVE_LD_STATIC_DYNAMIC
       if (library > 1 && !static_link)
 	{
-	  generate_option (OPT_Wl_, "-Bstatic", 1, CL_DRIVER,
+	  generate_option (OPT_Wl_, LD_STATIC_OPTION, 1, CL_DRIVER,
 			   &new_decoded_options[j]);
 	  j++;
 	}
@@ -315,7 +315,7 @@ 
 #ifdef HAVE_LD_STATIC_DYNAMIC
       if (library > 1 && !static_link)
 	{
-	  generate_option (OPT_Wl_, "-Bdynamic", 1, CL_DRIVER,
+	  generate_option (OPT_Wl_, LD_DYNAMIC_OPTION, 1, CL_DRIVER,
 			   &new_decoded_options[j]);
 	  j++;
 	}