This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ 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]

Re: BSD test of ABI checker code


In article <20020820212433.5032f7db.bkoz@redhat.com> you write:

> Thanks Loren!

Don't thank me; took 5-10 minutes compared to your efforts.  Thank you.

>> Without the explicit `mv 3.2_symbols-2.txt 3.2_symbols.txt', I
>> received no error that file, 3.2_symbols.txt, could not be opened and
>> ~2000 missing symbols were detected...

> Yeah. Sorry about that. (Error checking, what's that? Seems to be the
> chronic issue with my scripts.)

No problem, I should have added the smile.

>> Of course, I moved the Linux baseline out of the way since we don't
>> export wchar symbols, etc and as predicted there are some trivial size
>> differences related to standard typedefs, etc.

> I must admit, I'm curious as to the actual difference. Right now
> incompatible symbols spew out a bunch of info, including sizes for
> objects. Can I see that please?

Oh sure, I should have posted a summary at least.  Here is another
trace of steps with more output:

gzip -d <../abi_checker.tar.gz |tar xf -
/usr/local/bin/g++ abi_check.cc
a.out
[I see same results that Benjamin posted]
cp /usr/local/lib/libstdc++.so.5 libstdc++.so.5.0.0
cp /usr/local/beta-gcc/lib/libstdc++.so.5 libstdc++.so.5.0.1
PATH=/usr/local/beta-gcc/bin:$PATH
# FYI, readelf 2.11.2 from normal path reports that W is invalid option
# beware that many people may still use that binutils or older with gcc
bash ./extract_symbols-3.2.sh
bash ./extract_symbols-3.3.sh
a.out >/tmp/PL
# This did compare verses linux/i386 3.1 baseline

Complete summary of differences.  Remove wchar_t stuff:

c++filt </tmp/PL|grep wchar_t|wc
    1002    6175  119544

c++filt </tmp/PL|grep -v wchar_t
37 added symbols: 
std::ctype<char>::do_scan_is(unsigned long, char const*, char const*) const
std::ctype<char>::do_scan_not(unsigned long, char const*, char const*) const
std::ctype<char>::do_is(char const*, char const*, unsigned long*) const
std::ctype<char>::do_is(unsigned long, char) const
std::moneypunct<char, (bool)0>::_M_initialize_moneypunct(int*, char const*)
std::moneypunct<char, (bool)0>::moneypunct[in-charge](int*, char const*, unsigned)
std::moneypunct<char, (bool)0>::moneypunct[not-in-charge](int*, char const*, unsigned)
std::moneypunct<char, (bool)1>::_M_initialize_moneypunct(int*, char const*)
std::moneypunct<char, (bool)1>::moneypunct[in-charge](int*, char const*, unsigned)
std::moneypunct<char, (bool)1>::moneypunct[not-in-charge](int*, char const*, unsigned)
std::__timepunct<char>::_M_initialize_timepunct(int*)
std::__timepunct<char>::__timepunct[in-charge](int*, char const*, unsigned)
std::__timepunct<char>::__timepunct[not-in-charge](int*, char const*, unsigned)
std::__basic_file<char>::sys_open(__sFILE*, std::_Ios_Openmode)
std::__basic_file<char>::__basic_file[in-charge](pthread_mutex**)
std::__basic_file<char>::__basic_file[not-in-charge](pthread_mutex**)
std::ctype<char>::ctype[in-charge](unsigned long const*, bool, unsigned)
std::ctype<char>::ctype[in-charge](int*, unsigned long const*, bool, unsigned)
std::ctype<char>::ctype[not-in-charge](unsigned long const*, bool, unsigned)
std::ctype<char>::ctype[not-in-charge](int*, unsigned long const*, bool, unsigned)
std::locale::facet::_S_clone_c_locale(int*&)
std::locale::facet::_S_create_c_locale(int*&, char const*, int*)
std::locale::facet::_S_destroy_c_locale(int*&)
std::collate<char>::collate[in-charge](int*, unsigned)
std::collate<char>::collate[not-in-charge](int*, unsigned)
std::messages<char>::messages[in-charge](int*, char const*, unsigned)
std::messages<char>::messages[not-in-charge](int*, char const*, unsigned)
std::numpunct<char>::_M_initialize_numpunct(int*)
std::numpunct<char>::numpunct[in-charge](int*, unsigned)
std::numpunct<char>::numpunct[not-in-charge](int*, unsigned)
void std::__convert_to_v<double>(char const*, double&, std::_Ios_Iostate&, int* const&, int)
void std::__convert_to_v<long double>(char const*, long double&, std::_Ios_Iostate&, int* const&, int)
void std::__convert_to_v<float>(char const*, float&, std::_Ios_Iostate&, int* const&, int)
void std::__convert_to_v<long>(char const*, long&, std::_Ios_Iostate&, int* const&, int)
void std::__convert_to_v<unsigned long>(char const*, unsigned long&, std::_Ios_Iostate&, int* const&, int)
void std::__convert_to_v<long long>(char const*, long long&, std::_Ios_Iostate&, int* const&, int)
void std::__convert_to_v<unsigned long long>(char const*, unsigned long long&, std::_Ios_Iostate&, int* const&, int)
1063 missing symbols: 
std::ctype<char>::do_scan_is(unsigned short, char const*, char const*) const
std::ctype<char>::do_scan_not(unsigned short, char const*, char const*) const
std::ctype<char>::do_is(char const*, char const*, unsigned short*) const
std::ctype<char>::do_is(unsigned short, char) const
std::moneypunct<char, (bool)0>::_M_initialize_moneypunct(__locale_struct*, char const*)
std::moneypunct<char, (bool)0>::moneypunct[in-charge](__locale_struct*, char const*, unsigned)
std::moneypunct<char, (bool)0>::moneypunct[not-in-charge](__locale_struct*, char const*, unsigned)
std::moneypunct<char, (bool)1>::_M_initialize_moneypunct(__locale_struct*, char const*)
std::moneypunct<char, (bool)1>::moneypunct[in-charge](__locale_struct*, char const*, unsigned)
std::moneypunct<char, (bool)1>::moneypunct[not-in-charge](__locale_struct*, char const*, unsigned)
std::__timepunct<char>::_M_initialize_timepunct(__locale_struct*)
std::__timepunct<char>::__timepunct[in-charge](__locale_struct*, char const*, unsigned)
std::__timepunct<char>::__timepunct[not-in-charge](__locale_struct*, char const*, unsigned)
std::__basic_file<char>::sys_open(_IO_FILE*, std::_Ios_Openmode)
std::__basic_file<char>::__basic_file[in-charge](pthread_mutex_t*)
std::__basic_file<char>::__basic_file[not-in-charge](pthread_mutex_t*)
std::__default_alloc_template<(bool)1, (int)0>::reallocate(void*, unsigned, unsigned)
std::ctype<char>::ctype[in-charge](__locale_struct*, unsigned short const*, bool, unsigned)
std::ctype<char>::ctype[in-charge](unsigned short const*, bool, unsigned)
std::ctype<char>::ctype[not-in-charge](__locale_struct*, unsigned short const*, bool, unsigned)
std::ctype<char>::ctype[not-in-charge](unsigned short const*, bool, unsigned)
std::locale::facet::_S_clone_c_locale(__locale_struct*&)
std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*)
std::locale::facet::_S_destroy_c_locale(__locale_struct*&)
std::collate<char>::collate[in-charge](__locale_struct*, unsigned)
std::collate<char>::collate[not-in-charge](__locale_struct*, unsigned)
std::messages<char>::messages[in-charge](__locale_struct*, char const*, unsigned)
std::messages<char>::messages[not-in-charge](__locale_struct*, char const*, unsigned)
std::numpunct<char>::_M_initialize_numpunct(__locale_struct*)
std::numpunct<char>::numpunct[in-charge](__locale_struct*, unsigned)
std::numpunct<char>::numpunct[not-in-charge](__locale_struct*, unsigned)
void std::__convert_to_v<double>(char const*, double&, std::_Ios_Iostate&, __locale_struct* const&, int)
void std::__convert_to_v<long double>(char const*, long double&, std::_Ios_Iostate&, __locale_struct* const&, int)
void std::__convert_to_v<float>(char const*, float&, std::_Ios_Iostate&, __locale_struct* const&, int)
void std::__convert_to_v<long>(char const*, long&, std::_Ios_Iostate&, __locale_struct* const&, int)
void std::__convert_to_v<unsigned long>(char const*, unsigned long&, std::_Ios_Iostate&, __locale_struct* const&, int)
void std::__convert_to_v<long long>(char const*, long long&, std::_Ios_Iostate&, __locale_struct* const&, int)
void std::__convert_to_v<unsigned long long>(char const*, unsigned long long&, std::_Ios_Iostate&, __locale_struct* const&, int)
std::basic_string<char, std::char_traits<char>, std::allocator<char> >* std::__uninitialized_copy_aux<__gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >*>(__gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, __gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_tra!
 its<char>, std::allocator<char> > > > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, __false_type)
std::basic_string<char, std::char_traits<char>, std::allocator<char> >* std::__uninitialized_fill_n_aux<std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, unsigned, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, unsigned, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, __false_type)
std::ctype_w
std::collate_w
std::wcerr
std::wclog
std::wcout
std::wcin
std::buf_wcin
std::buf_wcerr
std::buf_wcout
std::messages_w
std::timepunct_w
std::numpunct_w
std::moneypunct_fw
std::moneypunct_tw
std::time_get_w
std::time_put_w
std::money_get_w
std::money_put_w
std::codecvt_w
std::num_get_w
std::num_put_w
0 incompatible symbols: 

> How many symbols total are you exporting versus linux?

2005 in 3.2.
2002 in mainline.

> If you generate the list of symbols for your platform's 3.2.0
> release and compare it to head gcc, do you see the same missing
> symbols?

Yes.

> It looks like os-cpu matrix of baseline test results is necessary. Damn.
> The configure stuff is organized for cpu or os, but not both. 

I think there may be a way to limit this problem down a bit esp. since
you wrote a program to compare.  Please do not let this detail
hold up check in since check-abi is a non-default thing to run.
-- 
Loren J. Rittle, Principal Staff Engineer, Motorola Labs (IL02/2240)
rittle@labs.mot.com, KeyID: 2048/ADCE34A5, FDC0292446937F2A240BC07D42763672


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