This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/52104] go1 fails to link on Solaris 8/9 x86 with native TLS
- From: "redi at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 03 Feb 2012 11:08:47 +0000
- Subject: [Bug libstdc++/52104] go1 fails to link on Solaris 8/9 x86 with native TLS
- Auto-submitted: auto-generated
- References: <bug-52104-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52104
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-02-03 11:08:47 UTC ---
So fixing that configure test should make the problem go away?
There's still a problem on non-TLS targets though. I have no idea how to
explicitly instantiate the std::function template constructor for a lambda
type, I don't think it's possible, so it might be necessary to move the
~_Async_state_base destructor into the header file for non-TLS targets. That
would result in larger object files because the vtable and typeinfo would be
emitted in every object using futures.
And there's still a Solaris 10 problem:
(In reply to comment #4)
> As of 20120202, I get this instead:
>
> libstdc++.a[mutex.o]: [29] | 0| 4|TLS |GLOB |0 |8
> |_ZSt15__once_callable
> libstdc++.a[future.o]: [144] | 0| 0|TLS |GLOB |0 |UNDEF
> |_ZSt15__once_callable
That symbol is the one used when TLS *is* available. __once_callable is just a
__thread void* so doesn't need instantiating.
Why isn't the definition in mutex.o used?