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.
} CXXABI_1.3.14;
+#ifdef __riscv
CXXABI_1.3.16 {
-#ifdef __riscv
_ZTIDF16b;
_ZTIPDF16b;
_ZTIPKDF16b;
-#endif
} CXXABI_1.3.15;
+#endif
# Symbols in the support library (libsupc++) supporting transactional memory.
CXXABI_TM_1 {
# 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/:$//;
known_versions.push_back("CXXABI_1.3.13");
known_versions.push_back("CXXABI_1.3.14");
known_versions.push_back("CXXABI_1.3.15");
+#ifdef __riscv
known_versions.push_back("CXXABI_1.3.16");
+#endif
known_versions.push_back("CXXABI_IEEE128_1.3.13");
known_versions.push_back("CXXABI_TM_1");
known_versions.push_back("CXXABI_FLOAT128");