http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52104
Rainer Orth <ro at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bonzini at gnu dot org Target Milestone|--- |4.7.0 --- Comment #8 from Rainer Orth <ro at gcc dot gnu.org> 2012-02-03 13:09:00 UTC --- (In reply to comment #7) > So fixing that configure test should make the problem go away? I'd hope so. Actually, the problem is in toplevel config/tls.m4 (GCC_CHECK_TLS): on Solaris 8 and 9, the very first AC_RUN_IFELSE can only work if linked with -pthread. I'm uncertain wether to hardcode that as was done in the testsuite (gcc/testsuite/lib/target-supports.exp (add_options_for_tls)). Probably Paolo has a suggestion/preference? > 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. The strange thing is that onSolaris 8 with Sun as/ld, i.e. emutls, everything seems to work. > 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 Right: on Solaris 10 and 11, native TLS is available irrespective of toolchain used. > __thread void* so doesn't need instantiating. > Why isn't the definition in mutex.o used? I've no idea: this all works with Sun ld, both with Sun as and gas. Seems like a pure gld issue to me (still only occured within the last week). Rainer