diff options
| author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2025-02-05 09:59:56 +0100 |
|---|---|---|
| committer | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2025-02-05 09:59:56 +0100 |
| commit | 6b49883e62a1ecf01ffd78c4c20fa7af87f8ec4d (patch) | |
| tree | 82395935dd69c4873dd3b484b79201c7e7de911f /libstdc++-v3/scripts | |
| parent | 884893ae87ae9a562c38f9972222d9b332c3591b (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.pl | 14 |
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/:$//; |
