The soon-to-be-released binutils 2.30 makes a small change to how lambda functions are demangled, which causes some unwanted symbols to match a wildcard pattern in the GLIBCXX_3.4 version node of our linker script. The only symbol that is supposed to match the pattern is std::cerr so we should just name that explicitly. That prevents other new symbols matching and being added to the old version.
See PR 83893 for the general problem, which we should fix later. PR libstdc++/83834 * config/abi/pre/gnu.ver (GLIBCXX_3.4): Replace std::c[a-g]* wildcard pattern with exact match for std::cerr. Tested powerpc64le-linux with binutils 2.25.1-32.base.el7_4.1 and on x86_64-linux with a binutils-2.3.0.0 snapshot from 2018-01-13. Committed to trunk, backports to follow.
commit f8896e7451cd61008e0ceb0ac9a770d5cb77d85b Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Jan 16 12:01:36 2018 +0000 PR libstdc++/83834 replace wildcard pattern in linker script PR libstdc++/83834 * config/abi/pre/gnu.ver (GLIBCXX_3.4): Replace std::c[a-g]* wildcard pattern with exact match for std::cerr. diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 774bedec9bc..5e66dc5cc3f 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -60,7 +60,7 @@ GLIBCXX_3.4 { std::basic_[t-z]*; std::ba[t-z]*; std::b[b-z]*; - std::c[a-g]*; + std::cerr; # std::char_traits; # std::c[i-z]*; std::c[i-n]*;