diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3aa1a554a3f..f3712043917 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,19 @@ +2002-10-11 Benjamin Kosnik + + * acconfig.h (_GLIBCPP_SYMVER): Add. + (_GLIBCPP_ASM_SYMVER): Add. + * acinclude.m4 (GLIBCPP_ENABLE_SYMVERS): Define _GLIBCPP_SYMVER. + * aclocal.m4: Regenerate. + * config.h.in: Regenerate. + * configure: Regenerate. + * include/bits/c++config (_GLIBCPP_AT_AT): Define, as an expedient + hack around m4 issues with quoting '@'. + * src/locale.cc: Use _GLIBCPP_ASM_SYMVER. + * src/globals.cc: Same. + + * testsuite/22_locale/ctor_copy_dtor.cc (test04): Fix for + non-glibc systems. + 2002-10-10 Benjamin Kosnik * config/linker-map.gnu (GLIBCPP_3.2.1): Add. diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in index 04d4a02e658..7d0551f6ca3 100644 --- a/libstdc++-v3/Makefile.in +++ b/libstdc++-v3/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am +# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation @@ -158,7 +158,44 @@ MULTICLEAN = true # Work around what appears to be a GNU make bug handling MAKEFLAGS # values defined in terms of make variables, as is the case for CC and # friends when we are called from the top level Makefile. -AM_MAKEFLAGS = "AR_FLAGS=$(AR_FLAGS)" "CC_FOR_BUILD=$(CC_FOR_BUILD)" "CC_FOR_TARGET=$(CC_FOR_TARGET)" "CFLAGS=$(CFLAGS)" "CXXFLAGS=$(CXXFLAGS)" "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" "INSTALL=$(INSTALL)" "INSTALL_DATA=$(INSTALL_DATA)" "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" "LDFLAGS=$(LDFLAGS)" "LIBCFLAGS=$(LIBCFLAGS)" "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" "MAKE=$(MAKE)" "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" "PICFLAG=$(PICFLAG)" "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" "SHELL=$(SHELL)" "RUNTESTFLAGS=$(RUNTESTFLAGS)" "exec_prefix=$(exec_prefix)" "infodir=$(infodir)" "libdir=$(libdir)" "includedir=$(includedir)" "prefix=$(prefix)" "tooldir=$(tooldir)" "AR=$(AR)" "AS=$(AS)" "LD=$(LD)" "LIBCFLAGS=$(LIBCFLAGS)" "PICFLAG=$(PICFLAG)" "RANLIB=$(RANLIB)" "NM=$(NM)" "NM_FOR_BUILD=$(NM_FOR_BUILD)" "NM_FOR_TARGET=$(NM_FOR_TARGET)" "DESTDIR=$(DESTDIR)" "WERROR=$(WERROR)" +AM_MAKEFLAGS = \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LDFLAGS=$(LDFLAGS)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ + "MAKE=$(MAKE)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + "PICFLAG=$(PICFLAG)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ + "SHELL=$(SHELL)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "libdir=$(libdir)" \ + "includedir=$(includedir)" \ + "prefix=$(prefix)" \ + "tooldir=$(tooldir)" \ + "AR=$(AR)" \ + "AS=$(AS)" \ + "LD=$(LD)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "PICFLAG=$(PICFLAG)" \ + "RANLIB=$(RANLIB)" \ + "NM=$(NM)" \ + "NM_FOR_BUILD=$(NM_FOR_BUILD)" \ + "NM_FOR_TARGET=$(NM_FOR_TARGET)" \ + "DESTDIR=$(DESTDIR)" \ + "WERROR=$(WERROR)" # Subdir rules rely on $(FLAGS_TO_PASS) @@ -173,7 +210,7 @@ mkcheck.in testsuite_flags.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) -TAR = tar +TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: diff --git a/libstdc++-v3/acconfig.h b/libstdc++-v3/acconfig.h index aa0dd99cfa9..777e94a5039 100644 --- a/libstdc++-v3/acconfig.h +++ b/libstdc++-v3/acconfig.h @@ -46,6 +46,20 @@ // Define if you have the copysignf function. #undef _GLIBCPP_HAVE_COPYSIGNF +// Define to use symbol versioning in the shared library. +#undef _GLIBCPP_SYMVER + +// Define symbol versioning in assember directives. If symbol +// versioning is beigng used, and the assembler supports this kind of +// thing, then use it. +// NB: _GLIBCPP_AT_AT is a hack to work around quoting issues in m4. +#if _GLIBCPP_SYMVER + #define _GLIBCPP_ASM_SYMVER(cur, old, version) \ + asm (".symver " #cur "," #old _GLIBCPP_AT_AT #version); +#else + #define _GLIBCPP_ASM_SYMVER(cur, old, version) +#endif + // Define if mbstate_t exists in wchar.h. #undef HAVE_MBSTATE_T diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index f0a7c365ef1..2bfec92da0f 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -2194,6 +2194,7 @@ case $enable_symvers in ;; gnu) LINKER_MAP=config/linker-map.gnu + AC_DEFINE(_GLIBCPP_SYMVER) ;; esac diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4 index 2aed25b9601..3bde35d3b3f 100644 --- a/libstdc++-v3/aclocal.m4 +++ b/libstdc++-v3/aclocal.m4 @@ -2206,6 +2206,7 @@ case $enable_symvers in ;; gnu) LINKER_MAP=config/linker-map.gnu + AC_DEFINE(_GLIBCPP_SYMVER) ;; esac diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index a310bc8454d..c565a8ba006 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -24,6 +24,20 @@ // Define to use concept checking code from the boost libraries. #undef _GLIBCPP_CONCEPT_CHECKS +// Define to use symbol versioning in the shared library. +#undef _GLIBCPP_SYMVER + +// Define symbol versioning in assember directives. If symbol +// versioning is beigng used, and the assembler supports this kind of +// thing, then use it. +// NB: _GLIBCPP_AT_AT is a hack to work around quoting issues in m4. +#if _GLIBCPP_SYMVER + #define _GLIBCPP_ASM_SYMVER(cur, old, version) \ + asm (".symver " #cur "," #old _GLIBCPP_AT_AT #version); +#else + #define _GLIBCPP_ASM_SYMVER(cur, old, version) +#endif + // Define if mbstate_t exists in wchar.h. #undef HAVE_MBSTATE_T diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index fd0c325cd01..a7659c907d5 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -22214,6 +22214,10 @@ case $enable_symvers in ;; gnu) LINKER_MAP=config/linker-map.gnu + cat >> confdefs.h <<\EOF +#define _GLIBCPP_SYMVER 1 +EOF + ;; esac @@ -22228,7 +22232,7 @@ else GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE= fi echo $ac_n "checking versioning on shared library symbols""... $ac_c" 1>&6 -echo "configure:22232: checking versioning on shared library symbols" >&5 +echo "configure:22236: checking versioning on shared library symbols" >&5 echo "$ac_t""$enable_symvers" 1>&6 @@ -22315,7 +22319,7 @@ glibcpp_prefixdir=${prefix} # Process the option --with-gxx-include-dir= echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6 -echo "configure:22319: checking for --with-gxx-include-dir" >&5 +echo "configure:22323: checking for --with-gxx-include-dir" >&5 # Check whether --with-gxx-include-dir or --without-gxx-include-dir was given. if test "${with_gxx_include_dir+set}" = set; then withval="$with_gxx_include_dir" @@ -22339,7 +22343,7 @@ echo "$ac_t""$gxx_include_dir" 1>&6 # Process the option "--enable-version-specific-runtime-libs" echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6 -echo "configure:22343: checking for --enable-version-specific-runtime-libs" >&5 +echo "configure:22347: checking for --enable-version-specific-runtime-libs" >&5 # Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given. if test "${enable_version_specific_runtime_libs+set}" = set; then enableval="$enable_version_specific_runtime_libs" @@ -22385,7 +22389,7 @@ if test x"$glibcpp_toolexecdir" = x"no"; then fi echo $ac_n "checking for install location""... $ac_c" 1>&6 -echo "configure:22389: checking for install location" >&5 +echo "configure:22393: checking for install location" >&5 echo "$ac_t""$gxx_include_dir" 1>&6 diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 7222123d509..d8082ea5b57 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -55,6 +55,9 @@ // Use corrected code from the committee library group's issues list. #define _GLIBCPP_RESOLVE_LIB_DEFECTS 1 +// Hopefully temporary workaround to autoconf/m4 issue with quoting '@'. +#define _GLIBCPP_AT_AT "@@" + // In those parts of the standard C++ library that use a mutex instead // of a spin-lock, we now unconditionally use GCC's gthr.h mutex // abstraction layer. All support to directly map to various diff --git a/libstdc++-v3/src/globals.cc b/libstdc++-v3/src/globals.cc index 27f8be19891..7eb1a9477d1 100644 --- a/libstdc++-v3/src/globals.cc +++ b/libstdc++-v3/src/globals.cc @@ -54,22 +54,21 @@ namespace __gnu_cxx // The rename syntax is // asm (".symver currentname,oldname@@GLIBCPP_3.2") // At the same time, these new __gnu_cxx symbols are not exported. - // In the future, GLIBCXX_ABI > 5 should remove all asm directives - // in this file. + // In the future, GLIBCXX_ABI > 5 should remove all uses of + // _GLIBCPP_ASM_SYMVER in this file. typedef char fake_locale[sizeof(locale)] __attribute__ ((aligned(__alignof__(locale)))); fake_locale c_locale; - asm (".symver _ZN9__gnu_cxx8c_localeE,_ZSt8c_locale@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8c_localeE, _ZSt8c_locale, GLIBCPP_3.2) typedef char fake_locale_Impl[sizeof(locale::_Impl)] __attribute__ ((aligned(__alignof__(locale::_Impl)))); fake_locale_Impl c_locale_impl; - asm (".symver _ZN9__gnu_cxx13c_locale_implE,\ - _ZSt13c_locale_impl@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13c_locale_implE, _ZSt13c_locale_impl, GLIBCPP_3.2) typedef char fake_facet_vec[sizeof(locale::facet*)] __attribute__ ((aligned(__alignof__(locale::facet*)))); fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS]; - asm (".symver _ZN9__gnu_cxx9facet_vecE,_ZSt9facet_vec@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9facet_vecE, _ZSt9facet_vec, GLIBCPP_3.2) typedef char fake_facet_name[sizeof(char*)] __attribute__ ((aligned(__alignof__(char*)))); @@ -78,141 +77,141 @@ namespace __gnu_cxx typedef char fake_ctype_c[sizeof(std::ctype)] __attribute__ ((aligned(__alignof__(std::ctype)))); fake_ctype_c ctype_c; - asm (".symver _ZN9__gnu_cxx7ctype_cE,_ZSt7ctype_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7ctype_cE, _ZSt7ctype_c, GLIBCPP_3.2) typedef char fake_collate_c[sizeof(std::collate)] __attribute__ ((aligned(__alignof__(std::collate)))); fake_collate_c collate_c; - asm (".symver _ZN9__gnu_cxx9collate_cE,_ZSt9collate_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9collate_cE, _ZSt9collate_c, GLIBCPP_3.2) typedef char fake_numpunct_c[sizeof(numpunct)] __attribute__ ((aligned(__alignof__(numpunct)))); fake_numpunct_c numpunct_c; - asm (".symver _ZN9__gnu_cxx10numpunct_cE,_ZSt10numpunct_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10numpunct_cE, _ZSt10numpunct_c, GLIBCPP_3.2) typedef char fake_num_get_c[sizeof(num_get)] __attribute__ ((aligned(__alignof__(num_get)))); fake_num_get_c num_get_c; - asm (".symver _ZN9__gnu_cxx9num_get_cE,_ZSt9num_get_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_get_cE, _ZSt9num_get_c, GLIBCPP_3.2) typedef char fake_num_put_c[sizeof(num_put)] __attribute__ ((aligned(__alignof__(num_put)))); fake_num_put_c num_put_c; - asm (".symver _ZN9__gnu_cxx9num_put_cE,_ZSt9num_put_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_put_cE, _ZSt9num_put_c, GLIBCPP_3.2) typedef char fake_codecvt_c[sizeof(codecvt)] __attribute__ ((aligned(__alignof__(codecvt)))); fake_codecvt_c codecvt_c; - asm (".symver _ZN9__gnu_cxx9codecvt_cE,_ZSt9codecvt_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9codecvt_cE, _ZSt9codecvt_c, GLIBCPP_3.2) typedef char fake_moneypunct_c[sizeof(moneypunct)] __attribute__ ((aligned(__alignof__(moneypunct)))); fake_moneypunct_c moneypunct_tc; fake_moneypunct_c moneypunct_fc; - asm (".symver _ZN9__gnu_cxx13moneypunct_tcE,\ - _ZSt13moneypunct_tc@@GLIBCPP_3.2"); - asm (".symver _ZN9__gnu_cxx13moneypunct_fcE,\ - _ZSt13moneypunct_fc@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_tcE,\ + _ZSt13moneypunct_tc, GLIBCPP_3.2) + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_fcE,\ + _ZSt13moneypunct_fc, GLIBCPP_3.2) typedef char fake_money_get_c[sizeof(money_get)] __attribute__ ((aligned(__alignof__(money_get)))); fake_money_get_c money_get_c; - asm (".symver _ZN9__gnu_cxx11money_get_cE,_ZSt11money_get_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_get_cE, _ZSt11money_get_c, GLIBCPP_3.2) typedef char fake_money_put_c[sizeof(money_put)] __attribute__ ((aligned(__alignof__(money_put)))); fake_money_put_c money_put_c; - asm (".symver _ZN9__gnu_cxx11money_put_cE,_ZSt11money_put_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_put_cE, _ZSt11money_put_c, GLIBCPP_3.2) typedef char fake_timepunct_c[sizeof(__timepunct)] __attribute__ ((aligned(__alignof__(__timepunct)))); fake_timepunct_c timepunct_c; - asm (".symver _ZN9__gnu_cxx11timepunct_cE,_ZSt11timepunct_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11timepunct_cE, _ZSt11timepunct_c, GLIBCPP_3.2) typedef char fake_time_get_c[sizeof(time_get)] __attribute__ ((aligned(__alignof__(time_get)))); fake_time_get_c time_get_c; - asm (".symver _ZN9__gnu_cxx10time_get_cE,_ZSt10time_get_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_get_cE, _ZSt10time_get_c, GLIBCPP_3.2) typedef char fake_time_put_c[sizeof(time_put)] __attribute__ ((aligned(__alignof__(time_put)))); fake_time_put_c time_put_c; - asm (".symver _ZN9__gnu_cxx10time_put_cE,_ZSt10time_put_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_put_cE, _ZSt10time_put_c, GLIBCPP_3.2) typedef char fake_messages_c[sizeof(messages)] __attribute__ ((aligned(__alignof__(messages)))); fake_messages_c messages_c; - asm (".symver _ZN9__gnu_cxx10messages_cE,_ZSt10messages_c@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10messages_cE, _ZSt10messages_c, GLIBCPP_3.2) #ifdef _GLIBCPP_USE_WCHAR_T typedef char fake_wtype_w[sizeof(std::ctype)] __attribute__ ((aligned(__alignof__(std::ctype)))); fake_wtype_w ctype_w; - asm (".symver _ZN9__gnu_cxx7ctype_wE,_ZSt7ctype_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7ctype_wE, _ZSt7ctype_w, GLIBCPP_3.2) typedef char fake_wollate_w[sizeof(std::collate)] __attribute__ ((aligned(__alignof__(std::collate)))); fake_wollate_w collate_w; - asm (".symver _ZN9__gnu_cxx9collate_wE,_ZSt9collate_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9collate_wE, _ZSt9collate_w, GLIBCPP_3.2) typedef char fake_numpunct_w[sizeof(numpunct)] __attribute__ ((aligned(__alignof__(numpunct)))); fake_numpunct_w numpunct_w; - asm (".symver _ZN9__gnu_cxx10numpunct_wE,_ZSt10numpunct_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10numpunct_wE, _ZSt10numpunct_w, GLIBCPP_3.2) typedef char fake_num_get_w[sizeof(num_get)] __attribute__ ((aligned(__alignof__(num_get)))); fake_num_get_w num_get_w; - asm (".symver _ZN9__gnu_cxx9num_get_wE,_ZSt9num_get_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_get_wE, _ZSt9num_get_w, GLIBCPP_3.2) typedef char fake_num_put_w[sizeof(num_put)] __attribute__ ((aligned(__alignof__(num_put)))); fake_num_put_w num_put_w; - asm (".symver _ZN9__gnu_cxx9num_put_wE,_ZSt9num_put_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_put_wE, _ZSt9num_put_w, GLIBCPP_3.2) typedef char fake_wodecvt_w[sizeof(codecvt)] __attribute__ ((aligned(__alignof__(codecvt)))); fake_wodecvt_w codecvt_w; - asm (".symver _ZN9__gnu_cxx9codecvt_wE,_ZSt9codecvt_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9codecvt_wE, _ZSt9codecvt_w, GLIBCPP_3.2) typedef char fake_moneypunct_w[sizeof(moneypunct)] __attribute__ ((aligned(__alignof__(moneypunct)))); fake_moneypunct_w moneypunct_tw; fake_moneypunct_w moneypunct_fw; - asm (".symver _ZN9__gnu_cxx13moneypunct_twE,\ - _ZSt13moneypunct_tw@@GLIBCPP_3.2"); - asm (".symver _ZN9__gnu_cxx13moneypunct_fwE,\ - _ZSt13moneypunct_fw@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_twE,\ + _ZSt13moneypunct_tw, GLIBCPP_3.2) + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13moneypunct_fwE,\ + _ZSt13moneypunct_fw, GLIBCPP_3.2) typedef char fake_money_get_w[sizeof(money_get)] __attribute__ ((aligned(__alignof__(money_get)))); fake_money_get_w money_get_w; - asm (".symver _ZN9__gnu_cxx11money_get_wE,_ZSt11money_get_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_get_wE, _ZSt11money_get_w, GLIBCPP_3.2) typedef char fake_money_put_w[sizeof(money_put)] __attribute__ ((aligned(__alignof__(money_put)))); fake_money_put_w money_put_w; - asm (".symver _ZN9__gnu_cxx11money_put_wE,_ZSt11money_put_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_put_wE, _ZSt11money_put_w, GLIBCPP_3.2) typedef char fake_timepunct_w[sizeof(__timepunct)] __attribute__ ((aligned(__alignof__(__timepunct)))); fake_timepunct_w timepunct_w; - asm (".symver _ZN9__gnu_cxx11timepunct_wE,_ZSt11timepunct_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11timepunct_wE, _ZSt11timepunct_w, GLIBCPP_3.2) typedef char fake_time_get_w[sizeof(time_get)] __attribute__ ((aligned(__alignof__(time_get)))); fake_time_get_w time_get_w; - asm (".symver _ZN9__gnu_cxx10time_get_wE,_ZSt10time_get_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_get_wE, _ZSt10time_get_w, GLIBCPP_3.2) typedef char fake_time_put_w[sizeof(time_put)] __attribute__ ((aligned(__alignof__(time_put)))); fake_time_put_w time_put_w; - asm (".symver _ZN9__gnu_cxx10time_put_wE,_ZSt10time_put_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_put_wE, _ZSt10time_put_w, GLIBCPP_3.2) typedef char fake_messages_w[sizeof(messages)] __attribute__ ((aligned(__alignof__(messages)))); fake_messages_w messages_w; - asm (".symver _ZN9__gnu_cxx10messages_wE,_ZSt10messages_w@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10messages_wE, _ZSt10messages_w, GLIBCPP_3.2) #endif typedef char fake_filebuf[sizeof(stdio_filebuf)] @@ -220,9 +219,9 @@ namespace __gnu_cxx fake_filebuf buf_cout; fake_filebuf buf_cin; fake_filebuf buf_cerr; - asm (".symver _ZN9__gnu_cxx8buf_coutE,_ZSt8buf_cout@@GLIBCPP_3.2"); - asm (".symver _ZN9__gnu_cxx7buf_cinE,_ZSt7buf_cin@@GLIBCPP_3.2"); - asm (".symver _ZN9__gnu_cxx8buf_cerrE,_ZSt8buf_cerr@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8buf_coutE, _ZSt8buf_cout, GLIBCPP_3.2) + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7buf_cinE, _ZSt7buf_cin, GLIBCPP_3.2) + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8buf_cerrE, _ZSt8buf_cerr, GLIBCPP_3.2) #ifdef _GLIBCPP_USE_WCHAR_T typedef char fake_wfilebuf[sizeof(stdio_filebuf)] @@ -230,9 +229,9 @@ namespace __gnu_cxx fake_wfilebuf buf_wcout; fake_wfilebuf buf_wcin; fake_wfilebuf buf_wcerr; - asm (".symver _ZN9__gnu_cxx9buf_wcoutE,_ZSt9buf_wcout@@GLIBCPP_3.2"); - asm (".symver _ZN9__gnu_cxx8buf_wcinE,_ZSt8buf_wcin@@GLIBCPP_3.2"); - asm (".symver _ZN9__gnu_cxx9buf_wcerrE,_ZSt9buf_wcerr@@GLIBCPP_3.2"); + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9buf_wcoutE, _ZSt9buf_wcout, GLIBCPP_3.2) + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8buf_wcinE, _ZSt8buf_wcin, GLIBCPP_3.2) + _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9buf_wcerrE, _ZSt9buf_wcerr, GLIBCPP_3.2) #endif // Globals for once-only runtime initialization of mutex objects. This diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc index f858a327cd1..127197d0138 100644 --- a/libstdc++-v3/src/locale.cc +++ b/libstdc++-v3/src/locale.cc @@ -55,15 +55,13 @@ namespace std const locale::category locale::messages; const locale::category locale::all; - // In the future, GLIBCXX_ABI > 5 should remove all asm directives - // in this file, and remove exports of any static data members of locale. + // In the future, GLIBCXX_ABI > 5 should remove all uses of + // _GLIBCPP_ASM_SYMVER in this file, and remove exports of any + // static data members of locale. locale::_Impl* locale::_S_classic; - locale::_Impl* locale::_S_global; - const size_t locale::_S_categories_size; - asm (".symver _ZNSt6locale18_S_categories_sizeE,_ZNSt6locale17_S_num_categoriesE@@GLIBCPP_3.2"); - + _GLIBCPP_ASM_SYMVER(_ZNSt6locale18_S_categories_sizeE, _ZNSt6locale17_S_num_categoriesE, GLIBCPP_3.2) const size_t locale::_S_extra_categories_size; // Definitions for static const data members of locale::id diff --git a/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc b/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc index 6f4b1bf5cff..534af61a1e2 100644 --- a/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc +++ b/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc @@ -362,26 +362,39 @@ void test04() if (!setenv("LC_COLLATE", "de_DE", 1)) { std::locale loc(""); + +#if _GLIBCPP_NUM_CATEGORIES VERIFY( loc.name() == "LC_CTYPE=C;LC_NUMERIC=C;LC_COLLATE=de_DE;" "LC_TIME=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;" "LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;" "LC_IDENTIFICATION=C" ); +#else + VERIFY( loc.name() == "LC_CTYPE=C;LC_NUMERIC=C;LC_COLLATE=de_DE;" + "LC_TIME=C;LC_MONETARY=C;LC_MESSAGES=C" ); +#endif } // Changing the LANG default while LC_COLLATE is set. if (!setenv("LANG", "fr_FR", 1)) { std::locale loc(""); +#if _GLIBCPP_NUM_CATEGORIES VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;" "LC_COLLATE=de_DE;LC_TIME=fr_FR;LC_MONETARY=fr_FR;" "LC_MESSAGES=fr_FR;LC_PAPER=fr_FR;LC_NAME=fr_FR;" "LC_ADDRESS=fr_FR;LC_TELEPHONE=fr_FR;LC_MEASUREMENT=fr_FR;" "LC_IDENTIFICATION=fr_FR" ); +#else + VERIFY( loc.name() == "LC_CTYPE=fr_FR;LC_NUMERIC=fr_FR;" + "LC_COLLATE=de_DE;LC_TIME=fr_FR;LC_MONETARY=fr_FR;" + "LC_MESSAGES=fr_FR" ); +#endif } // Changing another (C only) category. const char* oldLC_IDENTIFICATION = getenv("LC_IDENTIFICATION") ? strdup(getenv("LC_IDENTIFICATION")) : ""; +#if _GLIBCPP_NUM_CATEGORIES if (!setenv("LC_IDENTIFICATION", "it_IT", 1)) { std::locale loc(""); @@ -391,6 +404,7 @@ void test04() "LC_ADDRESS=fr_FR;LC_TELEPHONE=fr_FR;LC_MEASUREMENT=fr_FR;" "LC_IDENTIFICATION=it_IT" ); } +#endif // Restore the environment. setenv("LC_ALL", oldLC_ALL ? oldLC_ALL : "", 1);