This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: Couple of new issues in mainline
- From: Paolo Carlini <pcarlini at suse dot de>
- To: Paolo Carlini <pcarlini at suse dot de>
- Cc: libstdc++ <libstdc++ at gcc dot gnu dot org>, Benjamin Kosnik <bkoz at redhat dot com>
- Date: Sat, 02 Dec 2006 19:06:52 +0100
- Subject: Re: Couple of new issues in mainline
- References: <45705BAB.4000207@suse.de> <45718F85.3000401@suse.de>
Paolo Carlini wrote:
Well, maybe the solution for those boring issues is very simple (in
principle): use for gnu-linux systems too (besides x86-darwin, per
Howard's patch, which, by the way, is approved but still unapplied,
I'm going to take care of that), -fvisibility-inlines-hidden! I think
that (in principle, again), there are no objections, therefore I'm
going to prepare that configury change and check that nothing breaks...
... and something breaks: turns out we have in the ABI baseline quite a
few inlines, see below. We should analyze this issue more in detail.
Something I don't fully understand is going on with the std exception
classes destructors, which are indeed trivial but *not* inline: those
appear as 'W' in stdexcept.o, but as 't' in the final .so (thus in the
below). Similarly for ~basic_stringbuf, synthetized by the compiler, it
appear as 'W' in sstream-inst.o and as 't' in the .so. It looks like
this 'W' -> 't' change is the visibility fall-out of a link-time
optimization, which at the moment I don't fully understand (help in
clarifying this issue would be particularly appreciated)
For reference, I'm also attaching the trivial configure.host change I'm
using.
Paolo.
///////////
23 missing symbols
0
_ZNK10__cxxabiv117__pbase_type_info15__pointer_catchEPKS0_PPvj
__cxxabiv1::__pbase_type_info::__pointer_catch(__cxxabiv1::__pbase_type_info
const*, void**, unsigned int) const
version status: unversioned
type: function
status: subtracted
1
_ZNKSt5ctypeIcE8do_widenEPKcS2_Pc
std::ctype<char>::do_widen(char const*, char const*, char*) const
version status: unversioned
type: function
status: subtracted
2
_ZNKSt5ctypeIcE8do_widenEc
std::ctype<char>::do_widen(char) const
version status: unversioned
type: function
status: subtracted
3
_ZNKSt5ctypeIcE9do_narrowEPKcS2_cPc
std::ctype<char>::do_narrow(char const*, char const*, char, char*) const
version status: unversioned
type: function
status: subtracted
4
_ZNKSt5ctypeIcE9do_narrowEcc
std::ctype<char>::do_narrow(char, char) const
version status: unversioned
type: function
status: subtracted
5
_ZNSt11range_errorD0Ev
std::range_error::~range_error()
version status: unversioned
type: function
status: subtracted
6
_ZNSt11range_errorD1Ev
std::range_error::~range_error()
version status: unversioned
type: function
status: subtracted
7
_ZNSt12domain_errorD0Ev
std::domain_error::~domain_error()
version status: unversioned
type: function
status: subtracted
8
_ZNSt12domain_errorD1Ev
std::domain_error::~domain_error()
version status: unversioned
type: function
status: subtracted
9
_ZNSt12length_errorD0Ev
std::length_error::~length_error()
version status: unversioned
type: function
status: subtracted
10
_ZNSt12length_errorD1Ev
std::length_error::~length_error()
version status: unversioned
type: function
status: subtracted
11
_ZNSt12out_of_rangeD0Ev
std::out_of_range::~out_of_range()
version status: unversioned
type: function
status: subtracted
12
_ZNSt12out_of_rangeD1Ev
std::out_of_range::~out_of_range()
version status: unversioned
type: function
status: subtracted
13
_ZNSt14overflow_errorD0Ev
std::overflow_error::~overflow_error()
version status: unversioned
type: function
status: subtracted
14
_ZNSt14overflow_errorD1Ev
std::overflow_error::~overflow_error()
version status: unversioned
type: function
status: subtracted
15
_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev
std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char>
>::~basic_stringbuf()
version status: unversioned
type: function
status: subtracted
16
_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev
std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char>
>::~basic_stringbuf()
version status: unversioned
type: function
status: subtracted
17
_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED0Ev
std::basic_stringbuf<wchar_t, std::char_traits<wchar_t>,
std::allocator<wchar_t> >::~basic_stringbuf()
version status: unversioned
type: function
status: subtracted
18
_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED1Ev
std::basic_stringbuf<wchar_t, std::char_traits<wchar_t>,
std::allocator<wchar_t> >::~basic_stringbuf()
version status: unversioned
type: function
status: subtracted
19
_ZNSt15underflow_errorD0Ev
std::underflow_error::~underflow_error()
version status: unversioned
type: function
status: subtracted
20
_ZNSt15underflow_errorD1Ev
std::underflow_error::~underflow_error()
version status: unversioned
type: function
status: subtracted
21
_ZNSt16invalid_argumentD0Ev
std::invalid_argument::~invalid_argument()
version status: unversioned
type: function
status: subtracted
22
_ZNSt16invalid_argumentD1Ev
std::invalid_argument::~invalid_argument()
version status: unversioned
type: function
status: subtracted
Index: configure.host
===================================================================
--- configure.host (revision 119450)
+++ configure.host (working copy)
@@ -220,6 +220,7 @@
os_include_dir="os/uclibc"
else
os_include_dir="os/gnu-linux"
+ OPTIMIZE_CXXFLAGS="${OPTIMIZE_CXXFLAGS} -fvisibility-inlines-hidden"
fi
;;
hpux*)