libgcc_s: add libgcc_s_asneeded.so wrapper for gcc 16

GCC 16[0][1] now requires a wrapper lib to handle
`--push-state --as-needed -lgcc_s --pop-state` logic[1]
for `gcc` invocations. `g++` will still unconditionally
use `-lgcc_s`.

This fixes buildworld with gcc16.

[0] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=8a99fdb70493df1294b53406913e5ea1fc971c13
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123396

Reviewed by:	jhb
MFC after:	3 days
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D59511
This commit is contained in:
Siva Mahadevan committed 2026-09-28 11:08:05 -04:00
1 parent 188c455f3d
commit 222210c6a8
4 files changed
+17 -3

No files matched your search

+4 -3
View File
@@ -3322,13 +3322,14 @@ _startup_libs+= lib/libc_nonshared
_startup_libs+= lib/libcxxrt _startup_libs+= lib/libcxxrt
_startup_libs+= lib/libsys _startup_libs+= lib/libsys
_prereq_libs+= lib/libgcc_eh lib/libgcc_s _prereq_libs+= lib/libgcc_eh lib/libgcc_s lib/libgcc_s_asneeded
_startup_libs+= lib/libgcc_eh lib/libgcc_s _startup_libs+= lib/libgcc_eh lib/libgcc_s lib/libgcc_s_asneeded
lib/libc__L: lib/libsys__L lib/libc__L: lib/libsys__L
lib/libgcc_s__L: lib/libc__L lib/libgcc_s__L: lib/libc__L
lib/libgcc_s__L: lib/libc_nonshared__L lib/libgcc_s__L: lib/libc_nonshared__L
lib/libcxxrt__L: lib/libgcc_s__L lib/libgcc_s_asneeded__L: lib/libgcc_s__L
lib/libcxxrt__L: lib/libgcc_s_asneeded__L
lib/libcrypt__L: lib/libmd__L lib/libcrypt__L: lib/libmd__L
_prebuild_libs= ${_kerberos5_lib_libasn1} \ _prebuild_libs= ${_kerberos5_lib_libasn1} \
+1
View File
@@ -61,6 +61,7 @@ SUBDIR= ${SUBDIR_BOOTSTRAP} \
libfetch \ libfetch \
libgcc_eh \ libgcc_eh \
libgcc_s \ libgcc_s \
libgcc_s_asneeded \
libgeom \ libgeom \
libifconfig \ libifconfig \
libipsec \ libipsec \
+11
View File
@@ -0,0 +1,11 @@
PACKAGE= clibs
SHLIB_NAME= libgcc_s_asneeded.so.1
SHLIBDIR?= /lib
SHLIB_LDSCRIPT= libgcc_s_asneeded.ldscript
.include <bsd.opts.mk>
LDFLAGS+= -nodefaultlibs
.include <bsd.lib.mk>
@@ -0,0 +1 @@
INPUT (AS_NEEDED(-lgcc_s))