[9/10 PATCH] Update {x86_64,i?86,powerpc64,s390x,aarch64}-linux baseline_symbols.txt files

Jonathan Wakely jwakely@redhat.com
Fri Apr 26 15:58:00 GMT 2019


On 26/04/19 15:05 +0100, Jonathan Wakely wrote:
>On 26/04/19 14:36 +0100, Jonathan Wakely wrote:
>>On 26/04/19 14:30 +0200, Jakub Jelinek wrote:
>>>On Fri, Apr 26, 2019 at 01:25:37PM +0100, Jonathan Wakely wrote:
>>>>On 26/04/19 12:48 +0200, Jakub Jelinek wrote:
>>>>>Hi!
>>>>>
>>>>>The following patch updates the baseline symbols files from April 18th
>>>>>Fedora rpm build.  I've verified the only added lines are for the
>>>>>GLIBCXX_3.4.26 or CXXABI_1.3.12 symvers and I don't see any new long double
>>>>>symbol on powerpc64 or s390x, except I had to manually remove
>>>>>FUNC:_ZNSbIwSt11char_traitsIwESaIwEE19_M_replace_dispatchIPKcEERS2_N9__gnu_cxx17__normal_iteratorIPwS2_EESA_T_SB_St12__false_type@@GLIBCXX_3.4
>>>>>lines that started to appear on all but s390x builds in Fedora rpm builds
>>>>>(but they don't show up e.g. on my workstation).  Guess we need to make the
>>>>>wildcards more careful.
>>>>
>>>>The attached patch would do that. The symbol above is a function
>>>>template, so we don't need to export it from the lib (because user
>>>>code that needs it will instantiate it anyway). It's only called from
>>>>the basic_string<C,T,A>::replace<Iter>(iterator, iterator, Iter, Iter)
>>>>function template, which isn't exported from the lib.
>>>
>>>Thanks, LGTM.
>>>grep _ZNSbIwSt11char_traitsIwESaIwEE.*_M_replace libstdc++-v3/config/abi/post/*/{,*/}*.txt | grep -v _ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_aux | grep -v _ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safe
>>>prints nothing, so the patch looks correct and safe.
>>>
>>>Ok for 9.1.
>>
>>I tracked down where that symbol was being instantiated, and it's not
>>needed anyway, and can be suppressed by using if-constexpr. Here's
>>what I'm going to commit for trunk (after testing finishes).
>>
>>This should be safe for the branch too, but we can just make the
>>linker script change for now and backport this for 9.2 once it's been
>>on trunk for a while.
>
>Here's the final patch I tested and committed to trunk (I had to
>replace std::-si_same_v with std::is_same because the
><bits/locale_conv.h> header is used in C++11 and C++14 too).
>
>

>commit 7ef6887dab4368b82b1cda06775dcd5810e3c479
>Author: Jonathan Wakely <jwakely@redhat.com>
>Date:   Fri Apr 26 14:23:09 2019 +0100
>
>    Reduce code instantiated by filesystem::path::_S_convert_loc
>    
>    Jakub noted in https://gcc.gnu.org/ml/libstdc++/2019-04/msg00140.html
>    that an unwanted std::wstring::_M_replace_dispatch symbol has started to
>    be exported from the Fedora shared library. This symbol is triggered by
>    the instantiation of std::wstring::assign(const char*, const char*) from
>    std::__str_codecvt_in which is called from path::_S_convert_loc. The
>    branch that triggers that instantiation can't actually happen in that
>    case, because codecvt facets will only return noconv when the input and
>    output types are the same. Guarding the assign call with an if-constexpr
>    check that the types are the same avoids instantiating template
>    specializations that will never actually be needed.
>    
>            * config/abi/pre/gnu.ver (GLIBCXX_3.4): Replace wildcard that matches
>            wstring::_M_replace_dispatch with more specific patterns.
>            * include/bits/fs_path.h (path::_S_convert_loc<_InputIterator>):
>            Create const std::string to avoid redundant call to _S_convert_loc
>            with non-const pointers.

We can do that part for experimental::filesystem::path too.

Tested x86_64-linux, committed to trunk.

>            * include/bits/locale_conv.h (__do_str_codecvt): Use if-constexpr to
>            avoid unnecessary basic_string::assign instantiations.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 1018 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20190426/75566e25/attachment.bin>


More information about the Libstdc++ mailing list