On Sat, Jan 16, 2016 at 8:35 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Sat, Jan 16, 2016 at 07:47:33AM -0500, David Edelsohn wrote: >> stage1 libstdc++ builds just fine. the problem is stage2 configure >> fails due to missing ITM_xxx symbols when configure tries to compile >> and run conftest programs. > > On x86_64-linux, the _ITM_xxx symbols are undef weak ones and thus it is > fine to load libstdc++ without libitm and libstdc++ doesn't depend on > libitm. > > So, is AIX defining __GXX_WEAK__ or not? Perhaps some other macro or > configure check needs to be used to determine if undefined weak symbols > work the way libstdc++ needs them to.
__GXX_WEAK__ appears to be defined by gcc/c-family/c-cppbuiltin.c based on SUPPORTS_ONE_ONLY. gcc/defaults.h defines SUPPORTS_ONE_ONLY if the target supports MAKE_DECL_ONE_ONLY and link-once semantics. AIX weak correctly supports link-once semantics. AIX also supports the definition of __GXX_WEAK__ in gcc/doc/cpp.texi, namely collapsing symbols with vague linkage in multiple translation units. libstdc++/src/c++11/cow-stdexcept.cc appears to be using __GXX_WEAK__ and __attribute__ ((weak)) for references to symbols that may not be defined at link time or run time. AIX does not allow undefined symbol errors by default. And the libstdc++ inference about the semantics of __GXX_WEAK__ are different than the documentation. AIX supports MAKE_DECL_ONE_ONLY and the documented meaning of __GXX_WEAK__. AIX does not support extension of the meaning to additional SVR4 semantics not specified in the documentation. Thanks, David