Patchwork [libitm] Link eh-1.exe with -shared-libgcc on Solaris (PR libitm/51822)

login
register
mail settings
Submitter Rainer Orth
Date Jan. 30, 2012, 4:40 p.m.
Message ID <yddaa55xhxm.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/138610/
State New
Headers show

Comments

Rainer Orth - Jan. 30, 2012, 4:40 p.m.
Richard Henderson <rth@redhat.com> writes:

> On 01/25/2012 12:03 AM, Rainer Orth wrote:
>>> Er.. how did we get two copies?
>> 
>> The link line boils down to
>> 
>> ld -o eh-1.exe crt1.o crti.o crtbegin.o eh-1.o -litm -lstdc++ -lm -lgcc -lgcc_eh -lc -lgcc -lgcc_eh crtend.o crtn.o
>> 
>> The eh-1.o reference to _Unwind_Resume drags in one copy of the unwinder
>> from libgcc_eh.a, while libstdc++.so is linked against libgcc_s.so.1,
>> providing another copy.
>
> So... are we linking with the gcc binary, not the g++ binary?
> Because I thought -shared-libgcc is the default for C++.
>
> If this goes too far down a rat-hole, your original patch is ok.

The compiler used is currently set in libitm.exp (libitm_init) without
considering the language used.  Changing this seems too risky for
stage4.  I think we can get away with the following patch instead, which
hardcodes -shared-libgcc for C++.  I think it is safe even with
--disable-shared since -shared-libgcc is simply ignored AFAICS, and is
already used unconditionally in libffi.special/special.exp.

Tested on i386-pc-solaris2.11.

Ok for mainline?

	Rainer


2012-01-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	PR libstdc++/51296
	* testsuite/libitm.c++/c++.exp (lang_link_flags): Add
	-shared-libgcc.
	Correct libgomp references.
Jack Howarth - Jan. 30, 2012, 5:15 p.m.
On Mon, Jan 30, 2012 at 05:40:21PM +0100, Rainer Orth wrote:
> Richard Henderson <rth@redhat.com> writes:
> 
> > On 01/25/2012 12:03 AM, Rainer Orth wrote:
> >>> Er.. how did we get two copies?
> >> 
> >> The link line boils down to
> >> 
> >> ld -o eh-1.exe crt1.o crti.o crtbegin.o eh-1.o -litm -lstdc++ -lm -lgcc -lgcc_eh -lc -lgcc -lgcc_eh crtend.o crtn.o
> >> 
> >> The eh-1.o reference to _Unwind_Resume drags in one copy of the unwinder
> >> from libgcc_eh.a, while libstdc++.so is linked against libgcc_s.so.1,
> >> providing another copy.
> >
> > So... are we linking with the gcc binary, not the g++ binary?
> > Because I thought -shared-libgcc is the default for C++.
> >
> > If this goes too far down a rat-hole, your original patch is ok.
> 
> The compiler used is currently set in libitm.exp (libitm_init) without
> considering the language used.  Changing this seems too risky for
> stage4.  I think we can get away with the following patch instead, which
> hardcodes -shared-libgcc for C++.  I think it is safe even with
> --disable-shared since -shared-libgcc is simply ignored AFAICS, and is
> already used unconditionally in libffi.special/special.exp.
> 
> Tested on i386-pc-solaris2.11.

FYI, this fix has no impact on the eh-1.C execution failures seen at -m32/-m64 on x86_64 darwin10/11
when built with Xcode 4.2(.1).

> 
> Ok for mainline?
> 
> 	Rainer
> 
> 
> 2012-01-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
> 
> 	PR libstdc++/51296
> 	* testsuite/libitm.c++/c++.exp (lang_link_flags): Add
> 	-shared-libgcc.
> 	Correct libgomp references.
> 

> # HG changeset patch
> # Parent 707821cb5b73761684848cdd143b741881b067ce
> Link eh-1.exe with -shared-libgcc on Solaris (PR libitm/51822)
> 
> diff --git a/libitm/testsuite/libitm.c++/c++.exp b/libitm/testsuite/libitm.c++/c++.exp
> --- a/libitm/testsuite/libitm.c++/c++.exp
> +++ b/libitm/testsuite/libitm.c++/c++.exp
> @@ -1,3 +1,5 @@
> +# Copyright (C) 2011, 2012 Free Software Foundation, Inc.
> +#
>  # This program is free software; you can redistribute it and/or modify
>  # it under the terms of the GNU General Public License as published by
>  # the Free Software Foundation; either version 2 of the License, or
> @@ -17,14 +19,16 @@ load_lib libitm-dg.exp
>  global shlib_ext
>  
>  set shlib_ext [get_shlib_extension]
> -set lang_link_flags "-lstdc++"
> +# The C++ tests should be linked with g++, which defaults to -shared-libgcc.
> +# Doing that is currently too intrusive, so hardcode here.
> +set lang_link_flags "-shared-libgcc -lstdc++"
>  set lang_test_file_found 0
>  set lang_library_path "../libstdc++-v3/src/.libs"
>  
>  # Initialize dg.
>  dg-init
>  
> -set blddir [lookfor_file [get_multilibs] libgomp]
> +set blddir [lookfor_file [get_multilibs] libitm]
>  
>  
>  if { $blddir != "" } {
> @@ -41,7 +45,7 @@ if { $blddir != "" } {
>      }
>  } elseif { [info exists GXX_UNDER_TEST] } {
>      set lang_test_file_found 1
> -    # Needs to exist for libgomp.exp.
> +    # Needs to exist for libitm.exp.
>      set lang_test_file ""
>  } else {
>      puts "GXX_UNDER_TEST not defined, will not execute c++ tests"

> 
> 
> -- 
> -----------------------------------------------------------------------------
> Rainer Orth, Center for Biotechnology, Bielefeld University
Patrick Marlier - Jan. 30, 2012, 5:24 p.m.
On 01/30/2012 12:15 PM, Jack Howarth wrote:
> On Mon, Jan 30, 2012 at 05:40:21PM +0100, Rainer Orth wrote:
>> Richard Henderson<rth@redhat.com>  writes:
>>
>>> On 01/25/2012 12:03 AM, Rainer Orth wrote:
>>>>> Er.. how did we get two copies?
>>>>
>>>> The link line boils down to
>>>>
>>>> ld -o eh-1.exe crt1.o crti.o crtbegin.o eh-1.o -litm -lstdc++ -lm -lgcc -lgcc_eh -lc -lgcc -lgcc_eh crtend.o crtn.o
>>>>
>>>> The eh-1.o reference to _Unwind_Resume drags in one copy of the unwinder
>>>> from libgcc_eh.a, while libstdc++.so is linked against libgcc_s.so.1,
>>>> providing another copy.
>>>
>>> So... are we linking with the gcc binary, not the g++ binary?
>>> Because I thought -shared-libgcc is the default for C++.
>>>
>>> If this goes too far down a rat-hole, your original patch is ok.
>>
>> The compiler used is currently set in libitm.exp (libitm_init) without
>> considering the language used.  Changing this seems too risky for
>> stage4.  I think we can get away with the following patch instead, which
>> hardcodes -shared-libgcc for C++.  I think it is safe even with
>> --disable-shared since -shared-libgcc is simply ignored AFAICS, and is
>> already used unconditionally in libffi.special/special.exp.
>>
>> Tested on i386-pc-solaris2.11.
>
> FYI, this fix has no impact on the eh-1.C execution failures seen at -m32/-m64 on x86_64 darwin10/11
> when built with Xcode 4.2(.1).

Problem was discussed here and not same problem as above:
http://gcc.gnu.org/ml/gcc-patches/2012-01/msg00329.html
http://gcc.gnu.org/ml/gcc-patches/2012-01/msg00285.html

--
Patrick.
Rainer Orth - Jan. 30, 2012, 5:24 p.m.
Jack Howarth <howarth@bromo.med.uc.edu> writes:

> FYI, this fix has no impact on the eh-1.C execution failures seen at -m32/-m64 on x86_64 darwin10/11
> when built with Xcode 4.2(.1).

Then you need to do the analysis why exactly the failure occurs in this
case.

	Rainer
Richard Henderson - Jan. 30, 2012, 8:28 p.m.
On 01/31/2012 03:40 AM, Rainer Orth wrote:
> 2012-01-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
> 
> 	PR libstdc++/51296
> 	* testsuite/libitm.c++/c++.exp (lang_link_flags): Add
> 	-shared-libgcc.
> 	Correct libgomp references.

Ok.


r~
Jack Howarth - Jan. 30, 2012, 8:47 p.m.
On Mon, Jan 30, 2012 at 12:24:07PM -0500, Patrick Marlier wrote:
> On 01/30/2012 12:15 PM, Jack Howarth wrote:
>> On Mon, Jan 30, 2012 at 05:40:21PM +0100, Rainer Orth wrote:
>>> Richard Henderson<rth@redhat.com>  writes:
>>>
>>>> On 01/25/2012 12:03 AM, Rainer Orth wrote:
>>>>>> Er.. how did we get two copies?
>>>>>
>>>>> The link line boils down to
>>>>>
>>>>> ld -o eh-1.exe crt1.o crti.o crtbegin.o eh-1.o -litm -lstdc++ -lm -lgcc -lgcc_eh -lc -lgcc -lgcc_eh crtend.o crtn.o
>>>>>
>>>>> The eh-1.o reference to _Unwind_Resume drags in one copy of the unwinder
>>>>> from libgcc_eh.a, while libstdc++.so is linked against libgcc_s.so.1,
>>>>> providing another copy.
>>>>
>>>> So... are we linking with the gcc binary, not the g++ binary?
>>>> Because I thought -shared-libgcc is the default for C++.
>>>>
>>>> If this goes too far down a rat-hole, your original patch is ok.
>>>
>>> The compiler used is currently set in libitm.exp (libitm_init) without
>>> considering the language used.  Changing this seems too risky for
>>> stage4.  I think we can get away with the following patch instead, which
>>> hardcodes -shared-libgcc for C++.  I think it is safe even with
>>> --disable-shared since -shared-libgcc is simply ignored AFAICS, and is
>>> already used unconditionally in libffi.special/special.exp.
>>>
>>> Tested on i386-pc-solaris2.11.
>>
>> FYI, this fix has no impact on the eh-1.C execution failures seen at -m32/-m64 on x86_64 darwin10/11
>> when built with Xcode 4.2(.1).
>
> Problem was discussed here and not same problem as above:
> http://gcc.gnu.org/ml/gcc-patches/2012-01/msg00329.html
> http://gcc.gnu.org/ml/gcc-patches/2012-01/msg00285.html
>

Patrick,
    My mistake. The issue on darwin with Xcode 4.x will either require avoiding the use of weakref for
darwin or assuming that the user will either use Xcode 3.x or a future fixed Xcode 4.x release. I am
told the weakref linker bug is fixed upstream but won't make it into Xcode 4.3 (so it is currently
unknown when this fix will be available for  Lion).
         Jack

> --
> Patrick.

Patch

# HG changeset patch
# Parent 707821cb5b73761684848cdd143b741881b067ce
Link eh-1.exe with -shared-libgcc on Solaris (PR libitm/51822)

diff --git a/libitm/testsuite/libitm.c++/c++.exp b/libitm/testsuite/libitm.c++/c++.exp
--- a/libitm/testsuite/libitm.c++/c++.exp
+++ b/libitm/testsuite/libitm.c++/c++.exp
@@ -1,3 +1,5 @@ 
+# Copyright (C) 2011, 2012 Free Software Foundation, Inc.
+#
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
@@ -17,14 +19,16 @@  load_lib libitm-dg.exp
 global shlib_ext
 
 set shlib_ext [get_shlib_extension]
-set lang_link_flags "-lstdc++"
+# The C++ tests should be linked with g++, which defaults to -shared-libgcc.
+# Doing that is currently too intrusive, so hardcode here.
+set lang_link_flags "-shared-libgcc -lstdc++"
 set lang_test_file_found 0
 set lang_library_path "../libstdc++-v3/src/.libs"
 
 # Initialize dg.
 dg-init
 
-set blddir [lookfor_file [get_multilibs] libgomp]
+set blddir [lookfor_file [get_multilibs] libitm]
 
 
 if { $blddir != "" } {
@@ -41,7 +45,7 @@  if { $blddir != "" } {
     }
 } elseif { [info exists GXX_UNDER_TEST] } {
     set lang_test_file_found 1
-    # Needs to exist for libgomp.exp.
+    # Needs to exist for libitm.exp.
     set lang_test_file ""
 } else {
     puts "GXX_UNDER_TEST not defined, will not execute c++ tests"