https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118701
Bug ID: 118701 Summary: [15 regression] abi_check FAILs on Solaris due to weak version Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: ro at gcc dot gnu.org CC: redi at gcc dot gnu.org Target Milestone: --- Target: *-*-solaris2.11 Between 20250126 (55d288d4ff5360c572f2a017ba9385840ac5134e) and 20250127 (6a510dea7f3b047d0650a48e558a4911973930eb), the abi_check test regressed on Solaris (both sparc and x86): +FAIL: libstdc++-abi/abi_check 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 which no doubt is due to commit c6977f765838a5ca8d321d916221a7368622bdd9 Author: Andreas Schwab <sch...@suse.de> Date: Tue Jan 21 23:50:15 2025 +0100 libstdc++: correct symbol version of typeinfo for bfloat16_t on RISC-V The problem is that on non-RISC-V targets, the new CXXABI_1.3.16 version contains no symbol. This changes the pvs -dsvo output used by extract_symvers.pl: * For regular (strong?) versions it looks like libstdc++.so.6 - CXXABI_1.3.15: {CXXABI_1.3.14}; * while for weak versions there's libstdc++.so.6 - CXXABI_1.3.16 [WEAK]: {CXXABI_1.3.15}; This is the first time libstdc++.so has this issue, so the script cannot yet handle this. I'll harden it not to break in situations like this, but the question remains how to properly handle this in gnu.ver: * Keep the new version as is, creating a (useless) weak version on everything but RISC-V. * Make the version strong (terminology?). On Solaris, this could be done by prefixing the symbols with global: outside __riscv. However, GNU ld chokes on this. * Move the __riscv #ifdef outside the version definition. I thing the third variant would be best. This is not an issue on other ELF targets which use readelf --symbols where the distinction isn't seen. One would need to use readelf -V to determine the difference.