On Fri, 11 Aug 2023, 06:44 François Dumont via Libstdc++, < libstdc++@gcc.gnu.org> wrote: > I hadn't tested the most basic default configuration and it is failing, I did wonder about that when you said which configurations you had tested :) > I need some more time yet. > OK, no problem. I actually have an idea for replacing the __cow_string hack with something better, which I will try to work on next week. That might make things simpler for you, as you won't need the __std_cow_string macro. > François > > > On 10/08/2023 07:13, François Dumont wrote: > > Hi > > > > I've eventually completed this work. > > > > This evolution will allow to build libstdc++ without dual abi and > > using cxx11 abi. For the moment such a config is only accessible > > through the --enable-symvers=gnu-versioned-namespace configuration. > > > > libstdc++: [_GLIBCXX_INLINE_VERSION] Use cxx11 abi [PR83077] > > > > Use cxx11 abi when activating versioned namespace mode. > > > > libstdcxx-v3/ChangeLog: > > > > PR libstdc++/83077 > > * acinclude.m4 [GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI]: > > Default to "new" libstdcxx abi. > > * config/locale/dragonfly/monetary_members.cc > > [!_GLIBCXX_USE_DUAL_ABI]: Define money_base > > members. > > * config/locale/generic/monetary_members.cc > > [!_GLIBCXX_USE_DUAL_ABI]: Likewise. > > * config/locale/gnu/monetary_members.cc > > [!_GLIBCXX_USE_DUAL_ABI]: Likewise. > > * config/locale/gnu/numeric_members.cc > > [!_GLIBCXX_USE_DUAL_ABI](__narrow_multibyte_chars): Define. > > * configure: Regenerate. > > * include/bits/c++config > > [_GLIBCXX_INLINE_VERSION](_GLIBCXX_NAMESPACE_CXX11, > > _GLIBCXX_BEGIN_NAMESPACE_CXX11): > > Define empty. > > [_GLIBCXX_INLINE_VERSION](_GLIBCXX_END_NAMESPACE_CXX11, > > _GLIBCXX_DEFAULT_ABI_TAG): > > Likewise. > > * include/bits/cow_string.h [!_GLIBCXX_USE_CXX11_ABI]: > > Define a light version of COW > > basic_string as __std_cow_string for use in stdexcept. > > * include/std/stdexcept [_GLIBCXX_USE_CXX11_ABI]: Define > > __cow_string. > > (__cow_string(const char*)): New. > > (__cow_string::c_str()): New. > > * python/libstdcxx/v6/printers.py > > (StdStringPrinter::__init__): Set self.new_string to True > > when std::__8::basic_string type is found. > > * src/Makefile.am > > [ENABLE_SYMVERS_GNU_NAMESPACE](ldbl_alt128_compat_sources): Define empty. > > * src/Makefile.in: Regenerate. > > * src/c++11/Makefile.am (cxx11_abi_sources): Rename into... > > (dual_abi_sources): ...this. Also move cow-local_init.cc, > > cxx11-hash_tr1.cc, > > cxx11-ios_failure.cc entries to... > > (sources): ...this. > > (extra_string_inst_sources): Move cow-fstream-inst.cc, > > cow-sstream-inst.cc, cow-string-inst.cc, > > cow-string-io-inst.cc, cow-wtring-inst.cc, > > cow-wstring-io-inst.cc, cxx11-locale-inst.cc, > > cxx11-wlocale-inst.cc entries to... > > (inst_sources): ...this. > > * src/c++11/Makefile.in: Regenerate. > > * src/c++11/cow-fstream-inst.cc [_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++11/cow-locale_init.cc [_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++11/cow-sstream-inst.cc [_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++11/cow-stdexcept.cc [_GLIBCXX_USE_CXX11_ABI]: > > Include . > > [_GLIBCXX_USE_DUAL_ABI || > > _GLIBCXX_USE_CXX11_ABI](__cow_string): Redefine before including > > . Define > > _GLIBCXX_DEFINE_STDEXCEPT_INSTANTIATIONS so that __cow_string definition > > in is skipped. > > [_GLIBCXX_USE_CXX11_ABI]: Skip Transaction Memory TS > > definitions. > > * src/c++11/cow-string-inst.cc [_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++11/cow-string-io-inst.cc > > [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. > > * src/c++11/cow-wstring-inst.cc [_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++11/cow-wstring-io-inst.cc > > [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. > > * src/c++11/cxx11-hash_tr1.cc [!_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++11/cxx11-ios_failure.cc > > [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. > > [!_GLIBCXX_USE_DUAL_ABI] (__ios_failure): Remove. > > * src/c++11/cxx11-locale-inst.cc: Cleanup, just include > > locale-inst.cc. > > * src/c++11/cxx11-stdexcept.cc [!_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++11/cxx11-wlocale-inst.cc > > [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. > > * src/c++11/locale-inst-numeric.h > > [!_GLIBCXX_USE_DUAL_ABI](std::use_facet>, > > std::use_facet>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](std::has_facet>, > > std::has_facet>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](std::num_get > istreambuf_iterator>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](std::num_put > ostreambuf_iterator>): Instantiate. > > * src/c++11/locale-inst.cc [!_GLIBCXX_USE_DUAL_ABI]: Build > > only when configured > > _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. > > [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__numpunct_cache): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__timepunct): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__timepunct_cache): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](time_put > ostreambuf_iterator>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](time_put_byname > ostreambuf_iterator>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__ctype_abstract_base): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](ctype_byname): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__codecvt_abstract_base > mbstate_t>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname > mbstate_t>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname > mbstate_t>): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](use_facet > mbstate_t>>(const locale&)): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](use_facet<__timepunct>(const locale&)): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](has_facet > mbstate_t>>(const locale&)): Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](has_facet<__timepunct>(const locale&)): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__add_grouping): Define. > > [!_GLIBCXX_USE_DUAL_ABI](__pad>): > > Instantiate. > > [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long, > > const C*, > > ios_base::fmtflags, bool)): Define. > > [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long > > long, const C*, > > ios_base::fmtflags, bool)): Define. > > * src/c++11/string-inst.cc > > (_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS): Define following > > _GLIBCXX_USE_CXX11_ABI value. > > [_GLIBCXX_USE_CXX11_ABI && > > !_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS]: > > Define _GLIBCXX_DEFINING_COW_STRING_INSTANTIATIONS. > > Include . > > Define basic_string as __std_cow_string for the current > > translation unit. > > * src/c++11/wlocale-inst.cc [!_GLIBCXX_USE_CXX11_ABI]: > > Skip definitions. > > * src/c++98/Makefile.am (cxx11_abi_sources): Remove, > > unique cow-istream-string.cc entry > > move to... > > (inst_sources): ...this. > > * src/c++98/Makefile.in: Regenerate. > > * src/c++98/cow-istream-string.cc: Include > > . > > [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. > > * src/c++98/hash_tr1.cc [_GLIBCXX_USE_CXX11_ABI]: Skip > > definitions. > > * src/c++98/ios_failure.cc > > [_GLIBCXX_USE_CXX11_ABI][_GLIBCXX_USE_DUAL_ABI]: Skip definitions. > > * src/c++98/istream-string.cc [!_GLIBCXX_USE_DUAL_ABI]: > > Build only when configured > > _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. > > * src/c++98/locale_facets.cc > > [_GLIBCXX_USE_CXX11_ABI](__verify_grouping): Remove. > > * src/c++98/stdexcept.cc > > [_GLIBCXX_USE_CXX11_ABI](logic_error(const string&): Remove. > > [_GLIBCXX_USE_CXX11_ABI](domain_error(const string&): Remove. > > [_GLIBCXX_USE_CXX11_ABI](invalid_argument(const string&): > > Remove. > > [_GLIBCXX_USE_CXX11_ABI](length_error(const string&): Remove. > > [_GLIBCXX_USE_CXX11_ABI](out_of_range(const string&): Remove. > > [_GLIBCXX_USE_CXX11_ABI](runtime_error(const string&): > > Remove. > > [_GLIBCXX_USE_CXX11_ABI](range_error(const string&): Remove. > > [_GLIBCXX_USE_CXX11_ABI](overflow_error(const string&): > > Remove. > > [_GLIBCXX_USE_CXX11_ABI](underflow_error(const string&): > > Remove. > > > > Tested under linux x86_64 with following configs: > > > > --enable-symvers=gnu-versioned-namespace > > > > --disable-libstdcxx-dual-abi > > > > Ok to commit ? > > > > François > > > > >