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

2012-01-30 Thread Jack Howarth
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  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.


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

2012-01-30 Thread Richard Henderson
On 01/31/2012 03:40 AM, Rainer Orth wrote:
> 2012-01-28  Rainer Orth  
> 
>   PR libstdc++/51296
>   * testsuite/libitm.c++/c++.exp (lang_link_flags): Add
>   -shared-libgcc.
>   Correct libgomp references.

Ok.


r~


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

2012-01-30 Thread Rainer Orth
Jack Howarth  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

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


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

2012-01-30 Thread Patrick Marlier

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  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.


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

2012-01-30 Thread Jack Howarth
On Mon, Jan 30, 2012 at 05:40:21PM +0100, Rainer Orth wrote:
> Richard Henderson  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  
> 
>   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



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

2012-01-30 Thread Rainer Orth
Richard Henderson  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  

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


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

2012-01-25 Thread Rainer Orth
Richard Henderson  writes:

>> 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?

Right.  This was just copied over from libgomp, like most of the libitm
build and test framework.

> Because I thought -shared-libgcc is the default for C++.

Indeed: manually replacing xgcc with g++ in the link line fixes the
test, and is certainly far better than a per-platform per-test
workaround.

I'll see what it takes to properly fix that.

> If this goes too far down a rat-hole, your original patch is ok.

Thanks.
Rainer

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


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

2012-01-24 Thread Richard Henderson
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.


r~


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

2012-01-24 Thread Rainer Orth
Richard Henderson  writes:

> On 01/17/2012 04:07 AM, Rainer Orth wrote:
>> * The 32-bit failures on Solaris 8 to 10 have a different root cause:
>>   _Unwind_Find_FDE returns NULL for an address in _ZGTtL2f1v (f1()).  It
>>   turns out that there are two copies of the unwinder in eh-1.exe: one
>>   from libgcc_s.so.1, and another one from libgcc_eh.a.  eh-1.o has a
>>   reference to _Unwind_Resume (don't yet know why), which is resolved
>>   from libgcc_eh.a.  This doesn't happen on Solaris 11, which uses the
>>   dl_iterate_phdr based unwinder, thus no __register_frame_info_bases.
>
> 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.

> I don't think this change is correct, as it seems just as likely
> that we'd hit the same problem with real applications.  This just
> seems like it's papering over the real problem.

Quite possible.

Rainer

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


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

2012-01-22 Thread Richard Henderson
On 01/17/2012 04:07 AM, Rainer Orth wrote:
> * The 32-bit failures on Solaris 8 to 10 have a different root cause:
>   _Unwind_Find_FDE returns NULL for an address in _ZGTtL2f1v (f1()).  It
>   turns out that there are two copies of the unwinder in eh-1.exe: one
>   from libgcc_s.so.1, and another one from libgcc_eh.a.  eh-1.o has a
>   reference to _Unwind_Resume (don't yet know why), which is resolved
>   from libgcc_eh.a.  This doesn't happen on Solaris 11, which uses the
>   dl_iterate_phdr based unwinder, thus no __register_frame_info_bases.

Er.. how did we get two copies?

I don't think this change is correct, as it seems just as likely
that we'd hit the same problem with real applications.  This just
seems like it's papering over the real problem.


r~


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

2012-01-16 Thread Rainer Orth
As reported in PR libitm/51822, the libitm.c++/eh-1.C test FAILs on
Solaris with 

terminate called after throwing an instance of 'int'

I found that the failures are for two different reasons:

* Enabling ld.so.1 debugging (LD_DEBUG=bindings), it turned out that the
  64-bit failures on Solaris 10 and 11 happen since
  _Unwind_RaiseException from libc is used:

25243: 1: binding file=../../../gcc/amd64/libgcc_s.so.1 
(0xfd7fc21e6910:0x16910) at plt[27]:full to file=/lib/64/libc.so.1 
(0xfd7fff05a250:0x12a250): symbol '_Unwind_RaiseException'

  Unlike SPARC and the 32-bit libc, the 64-bit one provides an
  implementation of the unwinder, which seems to break this test.
  Linking the test with -shared-libgcc fixes it.

* The 32-bit failures on Solaris 8 to 10 have a different root cause:
  _Unwind_Find_FDE returns NULL for an address in _ZGTtL2f1v (f1()).  It
  turns out that there are two copies of the unwinder in eh-1.exe: one
  from libgcc_s.so.1, and another one from libgcc_eh.a.  eh-1.o has a
  reference to _Unwind_Resume (don't yet know why), which is resolved
  from libgcc_eh.a.  This doesn't happen on Solaris 11, which uses the
  dl_iterate_phdr based unwinder, thus no __register_frame_info_bases.

  Again, linking with shared-libgcc allows the testcase to succeed.

Bootstrapped without regressions on i386-pc-solaris2.11.

Ok for mainline?

Rainer


2012-01-15  Rainer Orth  

PR libitm/51822
* testsuite/libitm.c++/eh-1.C: Add -shared-libgcc on *-*-solaris2*.

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

diff --git a/libitm/testsuite/libitm.c++/eh-1.C b/libitm/testsuite/libitm.c++/eh-1.C
--- a/libitm/testsuite/libitm.c++/eh-1.C
+++ b/libitm/testsuite/libitm.c++/eh-1.C
@@ -1,4 +1,5 @@
 // { dg-do run }
+// { dg-options "-shared-libgcc" { target *-*-solaris2* } }
 
 extern "C" void abort ();
 


-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University