This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] _GLIBCPP_ASM_SYMVER


This should remove the use of asm directives from the source files on
platforms that don't use symbol versioning.

For platforms that use symbol versioning, things should work as before. 

There should probably be a specific autoconf macro for asm directive
support in the acinclude.m4 macro _GLIBCPP_ENABLE_SYMVER, like

AC_CACHE_CHECK(for .symver assembler directive, libc_cv_asm_symver_directive,
[cat > conftest.s <<EOF
${libc_cv_dot_text}
_sym:
.symver _sym,sym@VERS
EOF
if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&AC_FD_CC 2>&AC_FD_CC; then
  libc_cv_asm_symver_directive=yes
else
  libc_cv_asm_symver_directive=no
fi
rm -f conftest*])

in the glibc configure.in. 

I can't figure out how to quote "@@" in acconfig.h: m4 seems to strip
out all ueses of @. Instead of spending another hour or two in an epic
quoting battle, I hacked around it. This should be easy enough to
remove in the future.

In addition, this fixes the introduced failure in ctor_copy_dtor.

tested x86/linux
tested x86/linux --enable-clocale=generic

2002-10-11  Benjamin Kosnik  <bkoz@redhat.com>

	* 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 (__gnu_cxx): Same.
	
	* testsuite/22_locale/ctor_copy_dtor.cc (test04): Fix for


Index: acconfig.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/acconfig.h,v
retrieving revision 1.25
diff -c -p -r1.25 acconfig.h
*** acconfig.h	14 Dec 2001 21:06:32 -0000	1.25
--- acconfig.h	11 Oct 2002 20:59:58 -0000
***************
*** 46,51 ****
--- 46,65 ----
  // 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
  
Index: acinclude.m4
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/acinclude.m4,v
retrieving revision 1.220
diff -c -p -r1.220 acinclude.m4
*** acinclude.m4	17 Sep 2002 05:50:31 -0000	1.220
--- acinclude.m4	11 Oct 2002 21:00:00 -0000
*************** case $enable_symvers in
*** 2194,2199 ****
--- 2194,2200 ----
        ;;
    gnu)
        LINKER_MAP=config/linker-map.gnu
+       AC_DEFINE(_GLIBCPP_SYMVER)	
        ;;
  esac
  
Index: include/bits/c++config
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/c++config,v
retrieving revision 1.509
diff -c -p -r1.509 c++config
*** include/bits/c++config	11 Oct 2002 07:17:12 -0000	1.509
--- include/bits/c++config	11 Oct 2002 21:00:29 -0000
***************
*** 55,60 ****
--- 55,63 ----
  // 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
Index: src/globals.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/src/globals.cc,v
retrieving revision 1.10
diff -c -p -r1.10 globals.cc
*** src/globals.cc	11 Oct 2002 07:09:36 -0000	1.10
--- src/globals.cc	11 Oct 2002 21:00:31 -0000
*************** namespace __gnu_cxx
*** 54,75 ****
    // 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.
    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");
  
    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");
    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");
  
    typedef char fake_facet_name[sizeof(char*)]
    __attribute__ ((aligned(__alignof__(char*))));
--- 54,74 ----
    // 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 uses of
!   // _GLIBCPP_ASM_SYMVER in this file.
    typedef char fake_locale[sizeof(locale)]
    __attribute__ ((aligned(__alignof__(locale))));
    fake_locale c_locale;
!   _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;
!   _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];
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9facet_vecE, _ZSt9facet_vec, GLIBCPP_3.2)
  
    typedef char fake_facet_name[sizeof(char*)]
    __attribute__ ((aligned(__alignof__(char*))));
*************** namespace __gnu_cxx
*** 78,218 ****
    typedef char fake_ctype_c[sizeof(std::ctype<char>)]
    __attribute__ ((aligned(__alignof__(std::ctype<char>))));
    fake_ctype_c ctype_c;
!   asm (".symver _ZN9__gnu_cxx7ctype_cE,_ZSt7ctype_c@@GLIBCPP_3.2");
  
    typedef char fake_collate_c[sizeof(std::collate<char>)]
    __attribute__ ((aligned(__alignof__(std::collate<char>))));
    fake_collate_c collate_c;
!   asm (".symver _ZN9__gnu_cxx9collate_cE,_ZSt9collate_c@@GLIBCPP_3.2");
  
    typedef char fake_numpunct_c[sizeof(numpunct<char>)]
    __attribute__ ((aligned(__alignof__(numpunct<char>))));
    fake_numpunct_c numpunct_c;
!   asm (".symver _ZN9__gnu_cxx10numpunct_cE,_ZSt10numpunct_c@@GLIBCPP_3.2");
  
    typedef char fake_num_get_c[sizeof(num_get<char>)]
    __attribute__ ((aligned(__alignof__(num_get<char>))));
    fake_num_get_c num_get_c;
!   asm (".symver _ZN9__gnu_cxx9num_get_cE,_ZSt9num_get_c@@GLIBCPP_3.2");
  
    typedef char fake_num_put_c[sizeof(num_put<char>)]
    __attribute__ ((aligned(__alignof__(num_put<char>))));
    fake_num_put_c num_put_c;
!   asm (".symver _ZN9__gnu_cxx9num_put_cE,_ZSt9num_put_c@@GLIBCPP_3.2");
  
    typedef char fake_codecvt_c[sizeof(codecvt<char, char, mbstate_t>)]
    __attribute__ ((aligned(__alignof__(codecvt<char, char, mbstate_t>))));
    fake_codecvt_c codecvt_c;
!   asm (".symver _ZN9__gnu_cxx9codecvt_cE,_ZSt9codecvt_c@@GLIBCPP_3.2");
  
    typedef char fake_moneypunct_c[sizeof(moneypunct<char, true>)]
    __attribute__ ((aligned(__alignof__(moneypunct<char, true>))));
    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");
  
    typedef char fake_money_get_c[sizeof(money_get<char>)]
    __attribute__ ((aligned(__alignof__(money_get<char>))));
    fake_money_get_c money_get_c;
!   asm (".symver _ZN9__gnu_cxx11money_get_cE,_ZSt11money_get_c@@GLIBCPP_3.2");
    
    typedef char fake_money_put_c[sizeof(money_put<char>)]
    __attribute__ ((aligned(__alignof__(money_put<char>))));
    fake_money_put_c money_put_c;
!   asm (".symver _ZN9__gnu_cxx11money_put_cE,_ZSt11money_put_c@@GLIBCPP_3.2");
  
    typedef char fake_timepunct_c[sizeof(__timepunct<char>)]
    __attribute__ ((aligned(__alignof__(__timepunct<char>))));
    fake_timepunct_c timepunct_c;
!   asm (".symver _ZN9__gnu_cxx11timepunct_cE,_ZSt11timepunct_c@@GLIBCPP_3.2");
  
    typedef char fake_time_get_c[sizeof(time_get<char>)]
    __attribute__ ((aligned(__alignof__(time_get<char>))));
    fake_time_get_c time_get_c;
!   asm (".symver _ZN9__gnu_cxx10time_get_cE,_ZSt10time_get_c@@GLIBCPP_3.2");
  
    typedef char fake_time_put_c[sizeof(time_put<char>)]
    __attribute__ ((aligned(__alignof__(time_put<char>))));
    fake_time_put_c time_put_c;
!   asm (".symver _ZN9__gnu_cxx10time_put_cE,_ZSt10time_put_c@@GLIBCPP_3.2");
  
    typedef char fake_messages_c[sizeof(messages<char>)]
    __attribute__ ((aligned(__alignof__(messages<char>))));
    fake_messages_c messages_c;
!   asm (".symver _ZN9__gnu_cxx10messages_cE,_ZSt10messages_c@@GLIBCPP_3.2");
  
  #ifdef  _GLIBCPP_USE_WCHAR_T
    typedef char fake_wtype_w[sizeof(std::ctype<wchar_t>)]
    __attribute__ ((aligned(__alignof__(std::ctype<wchar_t>))));
    fake_wtype_w ctype_w;
!   asm (".symver _ZN9__gnu_cxx7ctype_wE,_ZSt7ctype_w@@GLIBCPP_3.2");
  
    typedef char fake_wollate_w[sizeof(std::collate<wchar_t>)]
    __attribute__ ((aligned(__alignof__(std::collate<wchar_t>))));
    fake_wollate_w collate_w;
!   asm (".symver _ZN9__gnu_cxx9collate_wE,_ZSt9collate_w@@GLIBCPP_3.2");
  
    typedef char fake_numpunct_w[sizeof(numpunct<wchar_t>)]
    __attribute__ ((aligned(__alignof__(numpunct<wchar_t>))));
    fake_numpunct_w numpunct_w;
!   asm (".symver _ZN9__gnu_cxx10numpunct_wE,_ZSt10numpunct_w@@GLIBCPP_3.2");
  
    typedef char fake_num_get_w[sizeof(num_get<wchar_t>)]
    __attribute__ ((aligned(__alignof__(num_get<wchar_t>))));
    fake_num_get_w num_get_w;
!   asm (".symver _ZN9__gnu_cxx9num_get_wE,_ZSt9num_get_w@@GLIBCPP_3.2");
  
    typedef char fake_num_put_w[sizeof(num_put<wchar_t>)]
    __attribute__ ((aligned(__alignof__(num_put<wchar_t>))));
    fake_num_put_w num_put_w;
!   asm (".symver _ZN9__gnu_cxx9num_put_wE,_ZSt9num_put_w@@GLIBCPP_3.2");
  
    typedef char fake_wodecvt_w[sizeof(codecvt<wchar_t, char, mbstate_t>)]
    __attribute__ ((aligned(__alignof__(codecvt<wchar_t, char, mbstate_t>))));
    fake_wodecvt_w codecvt_w;
!   asm (".symver _ZN9__gnu_cxx9codecvt_wE,_ZSt9codecvt_w@@GLIBCPP_3.2");
  
    typedef char fake_moneypunct_w[sizeof(moneypunct<wchar_t, true>)]
    __attribute__ ((aligned(__alignof__(moneypunct<wchar_t, true>))));
    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");
  
    typedef char fake_money_get_w[sizeof(money_get<wchar_t>)]
    __attribute__ ((aligned(__alignof__(money_get<wchar_t>))));
    fake_money_get_w money_get_w;
!   asm (".symver _ZN9__gnu_cxx11money_get_wE,_ZSt11money_get_w@@GLIBCPP_3.2");
    
    typedef char fake_money_put_w[sizeof(money_put<wchar_t>)]
    __attribute__ ((aligned(__alignof__(money_put<wchar_t>))));
    fake_money_put_w money_put_w;
!   asm (".symver _ZN9__gnu_cxx11money_put_wE,_ZSt11money_put_w@@GLIBCPP_3.2");
  
    typedef char fake_timepunct_w[sizeof(__timepunct<wchar_t>)]
    __attribute__ ((aligned(__alignof__(__timepunct<wchar_t>))));
    fake_timepunct_w timepunct_w;
!   asm (".symver _ZN9__gnu_cxx11timepunct_wE,_ZSt11timepunct_w@@GLIBCPP_3.2");
  
    typedef char fake_time_get_w[sizeof(time_get<wchar_t>)]
    __attribute__ ((aligned(__alignof__(time_get<wchar_t>))));
    fake_time_get_w time_get_w;
!   asm (".symver _ZN9__gnu_cxx10time_get_wE,_ZSt10time_get_w@@GLIBCPP_3.2");
  
    typedef char fake_time_put_w[sizeof(time_put<wchar_t>)]
    __attribute__ ((aligned(__alignof__(time_put<wchar_t>))));
    fake_time_put_w time_put_w;
!   asm (".symver _ZN9__gnu_cxx10time_put_wE,_ZSt10time_put_w@@GLIBCPP_3.2");
  
    typedef char fake_messages_w[sizeof(messages<wchar_t>)]
    __attribute__ ((aligned(__alignof__(messages<wchar_t>))));
    fake_messages_w messages_w;
!   asm (".symver _ZN9__gnu_cxx10messages_wE,_ZSt10messages_w@@GLIBCPP_3.2");
  #endif
  
    typedef char fake_filebuf[sizeof(stdio_filebuf<char>)]
--- 77,217 ----
    typedef char fake_ctype_c[sizeof(std::ctype<char>)]
    __attribute__ ((aligned(__alignof__(std::ctype<char>))));
    fake_ctype_c ctype_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7ctype_cE, _ZSt7ctype_c, GLIBCPP_3.2)
  
    typedef char fake_collate_c[sizeof(std::collate<char>)]
    __attribute__ ((aligned(__alignof__(std::collate<char>))));
    fake_collate_c collate_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9collate_cE, _ZSt9collate_c, GLIBCPP_3.2)
  
    typedef char fake_numpunct_c[sizeof(numpunct<char>)]
    __attribute__ ((aligned(__alignof__(numpunct<char>))));
    fake_numpunct_c numpunct_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10numpunct_cE, _ZSt10numpunct_c, GLIBCPP_3.2)
  
    typedef char fake_num_get_c[sizeof(num_get<char>)]
    __attribute__ ((aligned(__alignof__(num_get<char>))));
    fake_num_get_c num_get_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_get_cE, _ZSt9num_get_c, GLIBCPP_3.2)
  
    typedef char fake_num_put_c[sizeof(num_put<char>)]
    __attribute__ ((aligned(__alignof__(num_put<char>))));
    fake_num_put_c num_put_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_put_cE, _ZSt9num_put_c, GLIBCPP_3.2)
  
    typedef char fake_codecvt_c[sizeof(codecvt<char, char, mbstate_t>)]
    __attribute__ ((aligned(__alignof__(codecvt<char, char, mbstate_t>))));
    fake_codecvt_c codecvt_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9codecvt_cE, _ZSt9codecvt_c, GLIBCPP_3.2)
  
    typedef char fake_moneypunct_c[sizeof(moneypunct<char, true>)]
    __attribute__ ((aligned(__alignof__(moneypunct<char, true>))));
    fake_moneypunct_c moneypunct_tc;
    fake_moneypunct_c moneypunct_fc;
!   _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<char>)]
    __attribute__ ((aligned(__alignof__(money_get<char>))));
    fake_money_get_c money_get_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_get_cE, _ZSt11money_get_c, GLIBCPP_3.2)
    
    typedef char fake_money_put_c[sizeof(money_put<char>)]
    __attribute__ ((aligned(__alignof__(money_put<char>))));
    fake_money_put_c money_put_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_put_cE, _ZSt11money_put_c, GLIBCPP_3.2)
  
    typedef char fake_timepunct_c[sizeof(__timepunct<char>)]
    __attribute__ ((aligned(__alignof__(__timepunct<char>))));
    fake_timepunct_c timepunct_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11timepunct_cE, _ZSt11timepunct_c, GLIBCPP_3.2)
  
    typedef char fake_time_get_c[sizeof(time_get<char>)]
    __attribute__ ((aligned(__alignof__(time_get<char>))));
    fake_time_get_c time_get_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_get_cE, _ZSt10time_get_c, GLIBCPP_3.2)
  
    typedef char fake_time_put_c[sizeof(time_put<char>)]
    __attribute__ ((aligned(__alignof__(time_put<char>))));
    fake_time_put_c time_put_c;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_put_cE, _ZSt10time_put_c, GLIBCPP_3.2)
  
    typedef char fake_messages_c[sizeof(messages<char>)]
    __attribute__ ((aligned(__alignof__(messages<char>))));
    fake_messages_c messages_c;
!   _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<wchar_t>)]
    __attribute__ ((aligned(__alignof__(std::ctype<wchar_t>))));
    fake_wtype_w ctype_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx7ctype_wE, _ZSt7ctype_w, GLIBCPP_3.2)
  
    typedef char fake_wollate_w[sizeof(std::collate<wchar_t>)]
    __attribute__ ((aligned(__alignof__(std::collate<wchar_t>))));
    fake_wollate_w collate_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9collate_wE, _ZSt9collate_w, GLIBCPP_3.2)
  
    typedef char fake_numpunct_w[sizeof(numpunct<wchar_t>)]
    __attribute__ ((aligned(__alignof__(numpunct<wchar_t>))));
    fake_numpunct_w numpunct_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10numpunct_wE, _ZSt10numpunct_w, GLIBCPP_3.2)
  
    typedef char fake_num_get_w[sizeof(num_get<wchar_t>)]
    __attribute__ ((aligned(__alignof__(num_get<wchar_t>))));
    fake_num_get_w num_get_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_get_wE, _ZSt9num_get_w, GLIBCPP_3.2)
  
    typedef char fake_num_put_w[sizeof(num_put<wchar_t>)]
    __attribute__ ((aligned(__alignof__(num_put<wchar_t>))));
    fake_num_put_w num_put_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9num_put_wE, _ZSt9num_put_w, GLIBCPP_3.2)
  
    typedef char fake_wodecvt_w[sizeof(codecvt<wchar_t, char, mbstate_t>)]
    __attribute__ ((aligned(__alignof__(codecvt<wchar_t, char, mbstate_t>))));
    fake_wodecvt_w codecvt_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9codecvt_wE, _ZSt9codecvt_w, GLIBCPP_3.2)
  
    typedef char fake_moneypunct_w[sizeof(moneypunct<wchar_t, true>)]
    __attribute__ ((aligned(__alignof__(moneypunct<wchar_t, true>))));
    fake_moneypunct_w moneypunct_tw;
    fake_moneypunct_w moneypunct_fw;
!   _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<wchar_t>)]
    __attribute__ ((aligned(__alignof__(money_get<wchar_t>))));
    fake_money_get_w money_get_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_get_wE, _ZSt11money_get_w, GLIBCPP_3.2)
    
    typedef char fake_money_put_w[sizeof(money_put<wchar_t>)]
    __attribute__ ((aligned(__alignof__(money_put<wchar_t>))));
    fake_money_put_w money_put_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11money_put_wE, _ZSt11money_put_w, GLIBCPP_3.2)
  
    typedef char fake_timepunct_w[sizeof(__timepunct<wchar_t>)]
    __attribute__ ((aligned(__alignof__(__timepunct<wchar_t>))));
    fake_timepunct_w timepunct_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx11timepunct_wE, _ZSt11timepunct_w, GLIBCPP_3.2)
  
    typedef char fake_time_get_w[sizeof(time_get<wchar_t>)]
    __attribute__ ((aligned(__alignof__(time_get<wchar_t>))));
    fake_time_get_w time_get_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_get_wE, _ZSt10time_get_w, GLIBCPP_3.2)
  
    typedef char fake_time_put_w[sizeof(time_put<wchar_t>)]
    __attribute__ ((aligned(__alignof__(time_put<wchar_t>))));
    fake_time_put_w time_put_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10time_put_wE, _ZSt10time_put_w, GLIBCPP_3.2)
  
    typedef char fake_messages_w[sizeof(messages<wchar_t>)]
    __attribute__ ((aligned(__alignof__(messages<wchar_t>))));
    fake_messages_w messages_w;
!   _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx10messages_wE, _ZSt10messages_w, GLIBCPP_3.2)
  #endif
  
    typedef char fake_filebuf[sizeof(stdio_filebuf<char>)]
*************** namespace __gnu_cxx
*** 220,228 ****
    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");
  
  #ifdef _GLIBCPP_USE_WCHAR_T
    typedef char fake_wfilebuf[sizeof(stdio_filebuf<wchar_t>)]
--- 219,227 ----
    fake_filebuf buf_cout;
    fake_filebuf buf_cin;
    fake_filebuf buf_cerr;
!   _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<wchar_t>)]
*************** namespace __gnu_cxx
*** 230,238 ****
    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");
  #endif
  
    // Globals for once-only runtime initialization of mutex objects.  This
--- 229,237 ----
    fake_wfilebuf buf_wcout;
    fake_wfilebuf buf_wcin;
    fake_wfilebuf buf_wcerr;
!   _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
Index: src/locale.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/src/locale.cc,v
retrieving revision 1.68
diff -c -p -r1.68 locale.cc
*** src/locale.cc	11 Oct 2002 07:09:36 -0000	1.68
--- src/locale.cc	11 Oct 2002 21:00:33 -0000
*************** namespace std 
*** 55,69 ****
    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.
    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");
! 
    const size_t 			locale::_S_extra_categories_size;
  
    // Definitions for static const data members of locale::id
--- 55,67 ----
    const locale::category 	locale::messages;
    const locale::category 	locale::all;
  
!   // 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;
!   _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
Index: testsuite/22_locale/ctor_copy_dtor.cc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc,v
retrieving revision 1.17
diff -c -p -r1.17 ctor_copy_dtor.cc
*** testsuite/22_locale/ctor_copy_dtor.cc	8 Oct 2002 23:32:23 -0000	1.17
--- testsuite/22_locale/ctor_copy_dtor.cc	11 Oct 2002 21:00:33 -0000
*************** void test04()
*** 362,387 ****
--- 362,400 ----
    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("");
*************** void test04()
*** 391,396 ****
--- 404,410 ----
  	      "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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]