git: 2956f5885cf4 - main - Add an UNDEFINED_VERSION option
Date: Fri, 01 Mar 2024 23:22:28 UTC
The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=2956f5885cf4f001bd5c220ee9753d49aa1ad656 commit 2956f5885cf4f001bd5c220ee9753d49aa1ad656 Author: Brooks Davis <brooks@FreeBSD.org> AuthorDate: 2024-03-01 23:21:46 +0000 Commit: Brooks Davis <brooks@FreeBSD.org> CommitDate: 2024-03-01 23:22:11 +0000 Add an UNDEFINED_VERSION option When enabled (current default) link with --undefined-version to allow symbol maps to contain symbols not defined by libraries. When disabled, link with --no-undefined-version to disallow these bugs. WITHOUT_UNDEFINED_VERSION is currently broken. Once it is fixed it should be made the default and this option should likely be removed. Reviewed by: dim, emaste Differential Revision: https://reviews.freebsd.org/D44169 --- share/man/man5/src.conf.5 | 5 ++++- share/mk/bsd.lib.mk | 10 ++++++---- share/mk/bsd.opts.mk | 1 + tools/build/options/WITHOUT_UNDEFINED_VERSION | 2 ++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5 index 2713e7416a52..255d5a567ec0 100644 --- a/share/man/man5/src.conf.5 +++ b/share/man/man5/src.conf.5 @@ -1,5 +1,5 @@ .\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman. -.Dd February 17, 2024 +.Dd March 1, 2024 .Dt SRC.CONF 5 .Os .Sh NAME @@ -1726,6 +1726,9 @@ and that the runtime support library is available Do not build .Xr unbound 8 and related programs. +.It Va WITHOUT_UNDEFINED_VERSION +Link libraries with --no-undefined-version to ensure all symbols are +provided. .It Va WITHOUT_UNIFIED_OBJDIR Use the historical object directory format for .Xr build 7 diff --git a/share/mk/bsd.lib.mk b/share/mk/bsd.lib.mk index 3cb2f9305e45..981d0b49df39 100644 --- a/share/mk/bsd.lib.mk +++ b/share/mk/bsd.lib.mk @@ -260,10 +260,12 @@ SHLIB_NAME_FULL=${SHLIB_NAME} ${SHLIB_NAME_FULL}: ${VERSION_MAP} LDFLAGS+= -Wl,--version-script=${VERSION_MAP} -# lld >= 16 turned on --no-undefined-version by default, but we have several -# symbols in our version maps that may or may not exist, depending on -# compile-time defines. -.if ${LINKER_TYPE} == "lld" && ${LINKER_VERSION} >= 160000 +# Ideally we'd always enable --no-undefined-version (default for lld >= 16), +# but we have several symbols in our version maps that may or may not exist, +# depending on compile-time defines and that needs to be handled first. +.if ${MK_UNDEFINED_VERSION} == "no" +LDFLAGS+= -Wl,--no-undefined-version +.else LDFLAGS+= -Wl,--undefined-version .endif .endif diff --git a/share/mk/bsd.opts.mk b/share/mk/bsd.opts.mk index 51260533e265..dcfe64ac1350 100644 --- a/share/mk/bsd.opts.mk +++ b/share/mk/bsd.opts.mk @@ -68,6 +68,7 @@ __DEFAULT_YES_OPTIONS = \ SSP \ TESTS \ TOOLCHAIN \ + UNDEFINED_VERSION \ WARNS \ WERROR diff --git a/tools/build/options/WITHOUT_UNDEFINED_VERSION b/tools/build/options/WITHOUT_UNDEFINED_VERSION new file mode 100644 index 000000000000..0e58eb00f3c1 --- /dev/null +++ b/tools/build/options/WITHOUT_UNDEFINED_VERSION @@ -0,0 +1,2 @@ +Link libraries with --no-undefined-version to ensure all symbols are +provided.