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 22:03:09 GMT
Some more wisdom that I had snipped previously:

Travis Vitek wrote:
[...]
 >
 > Note that the basic_string<>::_C_grow() method is not accessed by any
 > inline member functions, but it still causes problems. I don't think we
 > can skip fixing these problems just because a function appears to not be
 > accessable to user code.
 >

Ah, I know why! Because it's called from a member template which
gets instantiated in the test.

So we need to add string::_C_grow() to the list of symbols to
fix in 4.2.0.

Martin


Martin Sebor wrote:
>  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