]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Export global iostreams with GLIBCXX_3.4.31 symver [PR108969]
authorJonathan Wakely <jwakely@redhat.com>
Tue, 18 Apr 2023 13:37:38 +0000 (14:37 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 18 Apr 2023 15:42:25 +0000 (16:42 +0100)
commitb7c54e3f48086c29179f7765a35c381de5109a0a
tree9c151bfd5f788f2f3115dc42668993f25f2f6c1b
parent14c1a8dfa3eaea283ab467c2aa3a62a25d3b49cb
libstdc++: Export global iostreams with GLIBCXX_3.4.31 symver [PR108969]

Since GCC 13 the global iostream objects are only initialized once in
libstdc++, and not by a std::ios::Init object in every translation unit
that includes <iostream>. To avoid using uninitialized streams defined
in an older libstdc++.so, translation units using the global iostreams
should depend on the GLIBCXX_3.4.31 symver.

Define std::cin as std::__io::cin and then export it as
std::cin@@GLIBCXX_3.4.31 so that references to std::cin bind to the new
symver. Also export it as @GLIBCXX_3.4 for backwards compatibility

libstdc++-v3/ChangeLog:

PR libstdc++/108969
* src/Makefile.am: Move globals_io.cc to here.
* src/Makefile.in: Regenerate.
* src/c++98/Makefile.am: Remove globals_io.cc from here.
* src/c++98/Makefile.in: Regenerate.
* src/c++98/globals_io.cc [_GLIBCXX_SYMVER_GNU] (cin): Adjust
symbol name and then export with GLIBCXX_3.4.31 symver.
(cout, cerr, clog, wcin, wcout, wcerr, wclog): Likewise.
* config/abi/post/aarch64-linux-gnu/baseline_symbols.txt:
Regenerate.
* config/abi/post/i486-linux-gnu/baseline_symbols.txt:
Regenerate.
* config/abi/post/m68k-linux-gnu/baseline_symbols.txt:
Regenerate.
* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt:
Regenerate.
* config/abi/post/riscv64-linux-gnu/baseline_symbols.txt:
Regenerate.
* config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt:
Regenerate.
* config/abi/post/s390x-linux-gnu/baseline_symbols.txt:
Regenerate.
* config/abi/post/x86_64-linux-gnu/baseline_symbols.txt:
Regenerate.
* config/abi/pre/gnu.ver: Add iostream objects to new symver.
14 files changed:
libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/pre/gnu.ver
libstdc++-v3/src/Makefile.am
libstdc++-v3/src/Makefile.in
libstdc++-v3/src/c++98/Makefile.am
libstdc++-v3/src/c++98/Makefile.in
libstdc++-v3/src/c++98/globals_io.cc