summaryrefslogtreecommitdiff
path: root/libstdc++-v3/scripts
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2025-02-05 09:59:56 +0100
committerRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2025-02-05 09:59:56 +0100
commit6b49883e62a1ecf01ffd78c4c20fa7af87f8ec4d (patch)
tree82395935dd69c4873dd3b484b79201c7e7de911f /libstdc++-v3/scripts
parent884893ae87ae9a562c38f9972222d9b332c3591b (diff)
libstdc++: Fix gnu.ver CXXABI_1.3.16 for Solaris [PR118701]
This patch commit c6977f765838a5ca8d321d916221a7368622bdd9 Author: Andreas Schwab <schwab@suse.de> Date: Tue Jan 21 23:50:15 2025 +0100 libstdc++: correct symbol version of typeinfo for bfloat16_t on RISC-V broke the libstdc++-abi/abi_check test on Solaris: the log shows 1 incompatible symbols 0 Argument "{CXXABI_1.3.15}" isn't numeric in numeric eq (==) at /vol/gcc/src/hg/master/local/libstdc++-v3/scripts/extract_symvers.pl line 129. version status: incompatible type: uncategorized status: added The problem has two parts: * The patch above introduced a new version in libstdc++.so, CXXABI_1.3.16, which everywhere but on RISC-V contains no symbols (a weak version). This is the first time this happened in libstdc++. * Solaris uses scripts/extract_symvers.pl to determine the version info. The script currently chokes on the pvs output for weak versions: libstdc++.so.6.0.34 - CXXABI_1.3.16 [WEAK]: {CXXABI_1.3.15}; instead of libstdc++.so.6.0.34 - CXXABI_1.3.16: {CXXABI_1.3.15}; While this patch hardens the script to cope with weak versions, there's no reason to introduce them in the first place. So the new version is only created on __riscv. Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11, and x86_64-pc-linux-gnu. 2025-01-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> Jonathan Wakely <jwakely@redhat.com> libstdc++-v3: PR libstdc++/118701 * config/abi/pre/gnu.ver (CXXABI_1.3.16): Move __riscv guard around version. * scripts/extract_symvers.pl: Allow for weak versions. * testsuite/util/testsuite_abi.cc (check_version): Wrap CXXABI_1.3.16 in __riscv.
Diffstat (limited to 'libstdc++-v3/scripts')
-rw-r--r--libstdc++-v3/scripts/extract_symvers.pl14
1 files changed, 12 insertions, 2 deletions
diff --git a/libstdc++-v3/scripts/extract_symvers.pl b/libstdc++-v3/scripts/extract_symvers.pl
index e0e6e5b70c4..fb18e11a1b3 100644
--- a/libstdc++-v3/scripts/extract_symvers.pl
+++ b/libstdc++-v3/scripts/extract_symvers.pl
@@ -34,8 +34,18 @@ while (<PVS>) {
# Remove trailing semicolon.
s/;$//;
- # shared object, dash, version, symbol, [size]
- (undef, undef, $version, $symbol, $size) = split;
+ if (/\[WEAK\]/) {
+ # Allow for weak versions like
+ # libstdc++.so.6.0.34 - CXXABI_1.3.16 [WEAK]: {CXXABI_1.3.15};
+ #
+ # shared object, dash, version "[WEAK]", symbol, [size]
+ (undef, undef, $version, undef, $symbol, $size) = split;
+ } else {
+ # libstdc++.so.6.0.34 - CXXABI_1.3.16: {CXXABI_1.3.15};
+ #
+ # shared object, dash, version, symbol, [size]
+ (undef, undef, $version, $symbol, $size) = split;
+ }
# Remove colon separator from version field.
$version =~ s/:$//;