incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: difference in exported symbols between 4.1.3 and 4.2.0 15d dll's (MSVC 7.1)
Date Wed, 17 Oct 2007 21:50:15 GMT
 From a private discussion (copied below) it sounds like the set
of real ABI problems on Windows is limited to the limits constants,
the runtime exception classes, the __rw::__rw_facet (which is an
alias for std::locale::facet) ctor and dtor, and string::_C_grow:

Travis Vitek wrote:
 > Failing tests and the symbol it fails to access...
 >
 > manual/limits.exe  : ?__rw_dbl_infinity@__rw@@3NB
 > manual/codecvt.exe : ??0__rw_facet@__rw@@QAE@I@Z
 > manual/ifstream.exe: ??0exception@@QAE@ABV0@@Z
 > tutorial/exceptn.exe ??0exception@@QAE@ABV0@@Z
 > tutorial/stocks.exe  ??1__rw_facet@__rw@@UAE@XZ
 > tests/2.smartptr.weak.exe ??0exception@@QAE@ABV0@@Z
 > tests/21.string.insert.exe
 > ?_C_grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AB
 > EIII@Z
 > tests/22.locale.money.get.exe ??0__rw_facet@__rw@@QAE@I@Z
 > tests/22.locale.money.put.exe
 > ?_C_grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AB
 > EIII@Z
 > tests/22.locale.num.put.exe  ??1__rw_facet@__rw@@UAE@XZ
 >
 >> -----Original Message-----
 >> From: Martin Sebor [mailto:sebor@roguewave.com]
 >> Sent: Wednesday, October 17, 2007 1:44 PM
 >> To: Travis Vitek
 >> Subject: Windows patch
 >>
 >> Btw., it occurs to me that only the __rw_facet access changes
 >> (public -> private and vice versa) need to be guarded for MSVC.
 >> The rest of them are purely stylistic since the names of the
 >> functions are already in the private namespace (due to the _C_
 >> prefix). I.e., we can leave them the way they were and just
 >> create a Jira issue to make them private in 5.0. I'm hoping
 >> this will considerably reduce the effort of backing them out
 >> (or guarding them) for 4.2.0.
 >>
 >> Martin
 >>



Martin Sebor wrote:
> Farid Zaripov wrote:
>>   Below is the difference in exported symbols between 4.1.3 and 4.2.0
>> 15d dll's (MSVC 7.1).
>> I've removed the symbols, which appears in 4.2.0 dll but not exist in
>> 4.1.3 dll.
> 
> To make the list easier to read I've replaced the long names with
> their standard typedefs (and unsigned short with wchar_t even though
> they're not synonymous):
> 
> ***** stdlib15d.dll.4.1.3
> public: __rw::__rw_facet::__rw_facet(unsigned)
> ***** libstd15d.dll.4.2.0
> protected: __rw::__rw_facet::__rw_facet(unsigned)
> *****
> 
> ***** stdlib15d.dll.4.1.3
> public: virtual __rw::__rw_facet::~__rw_facet()
> ***** libstd15d.dll.4.2.0
> protected: virtual __rw::__rw_facet::~__rw_facet()
> *****
> 
> ***** stdlib15d.dll.4.1.3
> private: unsigned std::string::_C_grow(unsigned, unsigned) const
> private: unsigned std::wstring >::_C_grow(unsigned, unsigned) const
> private: int std::stringbuf::_C_grow(int, int) const
> private: int std::wstringbuf::_C_grow(int, int) const
> ***** libstd15d.dll.4.2.0
> public: unsigned std::string::_C_grow(unsigned, unsigned) const
> public: unsigned std::wstring::_C_grow(unsigned, unsigned) const
> private: int std::stringbuf_C_grow(int) const
> private: int std::wstringbuf::_C_grow(int) const
> *****
> 
> ***** stdlib15d.dll.4.1.3
> protected: int std::streambuf::_C_putback_avail() const
> protected: int std::wstreambuf::_C_putback_avail() const
> ***** libstd15d.dll.4.2.0
> protected: unsigned std::streambuf::_C_putback_avail() const
> protected: unsigned std::wstreambuf::_C_putback_avail() const
> *****
> 
> ***** stdlib15d.dll.4.1.3
> protected: int std::streambuf::_C_write_avail() const
> protected: int std::wstreambuf::_C_write_avail() const
> ***** libstd15d.dll.4.2.0
> protected: unsigned std::streambuf::_C_write_avail() const
> protected: unsigned std::wstreambuf::_C_write_avail() const
> *****
> 
> ***** stdlib15d.dll.4.1.3
> public: bad_cast::bad_cast(bad_cast const &)
> public: bad_typeid::bad_typeid(bad_typeid const &)
> public: exception::exception( exception const &)
> public: exception::exception()
> public: virtual bad_cast::~bad_cast()
> public: virtual bad_typeid::~bad_typeid()
> public: virtual exception::~exception()
> public: bad_cast & bad_cast::operator=(bad_cast const &)
> public: bad_typeid & bad_typeid::operator=(bad_typeid const &)
> public: exception & exception::operator=(exception const &)
> const exception::`vftable'
> protected: int std::stringbuf::_C_strlen() const
> protected: int std::wstringbuf::_C_strlen() const
> public: std::string& std::string::insert(unsigned, unsigned, char)
> public: std::wstring& std::wstring::insert(unsigned, unsigned, wchar_t)
> public: virtual char const* exception::what() const
> 
> ***** libstd15d.dll.4.2.0
> *****
> 
> ***** stdlib15d.dll.4.1.3
> double const __rw::__rw_dbl_denorm_min
> double const __rw::__rw_dbl_infinity
> double const __rw::__rw_dbl_qNaN
> double const __rw::__rw_dbl_sNaN
> float const __rw::__rw_flt_denorm_min
> float const __rw::__rw_flt_infinity
> float const __rw::__rw_flt_qNaN
> float const __rw::__rw_flt_sNaN
> long double const __rw::__rw_ldbl_denorm_min
> long double const __rw::__rw_ldbl_infinity
> long double const __rw::__rw_ldbl_qNaN
> long double const __rw::__rw_ldbl_sNaN
> ***** libstd15d.dll.4.2.0
> __rw_dbl_denorm_min
> __rw_dbl_infinity
> __rw_dbl_qNaN
> __rw_dbl_sNaN
> __rw_flt_denorm_min
> __rw_flt_infinity
> __rw_flt_qNaN
> __rw_flt_sNaN
> __rw_ldbl_denorm_min
> __rw_ldbl_infinity
> __rw_ldbl_qNaN
> __rw_ldbl_sNaN
> __rw_once
> *****
> 
> 
> 
>>
>> ***** stdlib15d.dll.4.1.3
>> public: __thiscall __rw::__rw_facet::__rw_facet(unsigned int)
>> ***** libstd15d.dll.4.2.0
>> protected: __thiscall __rw::__rw_facet::__rw_facet(unsigned int)
>> *****
>>
>> ***** stdlib15d.dll.4.1.3
>> public: virtual __thiscall __rw::__rw_facet::~__rw_facet(void)
>> ***** libstd15d.dll.4.2.0
>> protected: virtual __thiscall __rw::__rw_facet::~__rw_facet(void)
>> *****
>>
>> ***** stdlib15d.dll.4.1.3
>> private: unsigned int __thiscall std::basic_string<char,struct
>> std::char_traits<char>,class std::allocator<char> >::_C_grow(unsigned
>> int,unsigned int)const private: unsigned int __thiscall 
>> std::basic_string<unsigned short,struct
>> std::char_traits<unsigned short>,class std::allocator<unsigned short>
>>> ::_C_grow(unsigned int,unsigned int)const 
>> private: int __thiscall std::basic_stringbuf<char,struct
>> std::char_traits<char>,class std::allocator<char>
>>> ::_C_grow(int,int)const 
>> private: int __thiscall std::basic_stringbuf<unsigned short,struct
>> std::char_traits<unsigned short>,class std::allocator<unsigned short>
>>> ::_C_grow(int,int)const 
>> ***** libstd15d.dll.4.2.0
>> public: unsigned int __thiscall std::basic_string<char,struct
>> std::char_traits<char>,class std::allocator<char> >::_C_grow(unsigned
>> int,unsigned int)const public: unsigned int __thiscall 
>> std::basic_string<unsigned short,struct
>> std::char_traits<unsigned short>,class std::allocator<unsigned short>
>>> ::_C_grow(unsigned int,unsigned int)const 
>> private: int __thiscall std::basic_stringbuf<char,struct
>> std::char_traits<char>,class std::allocator<char> >::_C_grow(int)const

>> private: int __thiscall std::basic_stringbuf<unsigned short,struct
>> std::char_traits<unsigned short>,class std::allocator<unsigned short>
>>> ::_C_grow(int)const 
>> *****
>>
>> ***** stdlib15d.dll.4.1.3
>> protected: int __thiscall std::basic_streambuf<char,struct
>> std::char_traits<char> >::_C_putback_avail(void)const protected: int 
>> __thiscall std::basic_streambuf<unsigned short,struct
>> std::char_traits<unsigned short> >::_C_putback_avail(void)const ***** 
>> libstd15d.dll.4.2.0
>> protected: unsigned int __thiscall std::basic_streambuf<char,struct
>> std::char_traits<char> >::_C_putback_avail(void)const protected: 
>> unsigned int __thiscall std::basic_streambuf<unsigned
>> short,struct std::char_traits<unsigned short>
>>> ::_C_putback_avail(void)const 
>> *****
>>
>> ***** stdlib15d.dll.4.1.3
>> protected: int __thiscall std::basic_streambuf<char,struct
>> std::char_traits<char> >::_C_write_avail(void)const protected: int 
>> __thiscall std::basic_streambuf<unsigned short,struct
>> std::char_traits<unsigned short> >::_C_write_avail(void)const ***** 
>> libstd15d.dll.4.2.0
>> protected: unsigned int __thiscall std::basic_streambuf<char,struct
>> std::char_traits<char> >::_C_write_avail(void)const protected: 
>> unsigned int __thiscall std::basic_streambuf<unsigned
>> short,struct std::char_traits<unsigned short>
>>> ::_C_write_avail(void)const 
>> *****
>>
>> ***** stdlib15d.dll.4.1.3
>> public: __thiscall bad_cast::bad_cast(class bad_cast const &)
>> public: __thiscall bad_typeid::bad_typeid(class bad_typeid const &)
>> public: __thiscall exception::exception(class exception const &)
>> public: __thiscall exception::exception(void)
>> public: virtual __thiscall bad_cast::~bad_cast(void)
>> public: virtual __thiscall bad_typeid::~bad_typeid(void)
>> public: virtual __thiscall exception::~exception(void)
>> public: class bad_cast & __thiscall bad_cast::operator=(class bad_cast
>> const &)
>> public: class bad_typeid & __thiscall bad_typeid::operator=(class
>> bad_typeid const &)
>> public: class exception & __thiscall exception::operator=(class
>> exception const &)
>> const exception::`vftable'
>> protected: int __thiscall std::basic_stringbuf<char,struct
>> std::char_traits<char>,class std::allocator<char>
>>> ::_C_strlen(void)const 
>> protected: int __thiscall std::basic_stringbuf<unsigned short,struct
>> std::char_traits<unsigned short>,class std::allocator<unsigned short>
>>> ::_C_strlen(void)const 
>> public: class std::basic_string<char,struct std::char_traits<char>,class
>> std::allocator<char> > & __thiscall std::basic_string<char,struct
>> std::char_traits<char>,class std::allocator<char> >::insert(unsigned
>> int,unsigned int,char)
>> public: class std::basic_string<unsigned short,struct
>> std::char_traits<unsigned short>,class std::allocator<unsigned short>
>
>> & __thiscall std::basic_string<unsigned short,struct
>> std::char_traits<unsigned short>,class std::allocator<unsigned short>
>>> ::insert(unsigned int,unsigned int,unsigned short)
>> public: virtual char const * __thiscall exception::what(void)const 
>> ***** libstd15d.dll.4.2.0
>> *****
>>
>> ***** stdlib15d.dll.4.1.3
>> double const __rw::__rw_dbl_denorm_min
>> double const __rw::__rw_dbl_infinity
>> double const __rw::__rw_dbl_qNaN
>> double const __rw::__rw_dbl_sNaN
>> float const __rw::__rw_flt_denorm_min
>> float const __rw::__rw_flt_infinity
>> float const __rw::__rw_flt_qNaN
>> float const __rw::__rw_flt_sNaN
>> long double const __rw::__rw_ldbl_denorm_min
>> long double const __rw::__rw_ldbl_infinity
>> long double const __rw::__rw_ldbl_qNaN
>> long double const __rw::__rw_ldbl_sNaN
>> ***** libstd15d.dll.4.2.0
>> __rw_dbl_denorm_min
>> __rw_dbl_infinity
>> __rw_dbl_qNaN
>> __rw_dbl_sNaN
>> __rw_flt_denorm_min
>> __rw_flt_infinity
>> __rw_flt_qNaN
>> __rw_flt_sNaN
>> __rw_ldbl_denorm_min
>> __rw_ldbl_infinity
>> __rw_ldbl_qNaN
>> __rw_ldbl_sNaN
>> __rw_once
>> *****
>>
>> Farid.
> 


Mime
View raw message