From eda7d3bec4501c8dde587f9f267d475b7c4f7f78 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Mon, 26 Nov 2018 17:07:35 +0000 Subject: [PATCH] Do not install GNU ld if lld is /usr/bin/ld GNU binutils ld.bfd 2.17.50 does not support ifuncs and produces broken binaries when ifuncs are in use. When LLD_IS_LD is default we have an ifunc-capable system linker and can just avoid installing ld.bfd. Reported by: theraven Reviewed by: bz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D18340 --- gnu/usr.bin/binutils/Makefile | 6 +++++- tools/build/mk/OptionalObsoleteFiles.inc | 4 +++- tools/build/options/WITHOUT_BINUTILS | 7 ++++++- tools/build/options/WITH_BINUTILS | 7 ++++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/gnu/usr.bin/binutils/Makefile b/gnu/usr.bin/binutils/Makefile index c05a5af2374d..191a8ad3d5c1 100644 --- a/gnu/usr.bin/binutils/Makefile +++ b/gnu/usr.bin/binutils/Makefile @@ -8,9 +8,13 @@ SUBDIR= doc\ libopcodes \ libbinutils \ as \ - ld \ objdump +# When we use ld.lld as /usr/bin/ld, do not install the non-ifunc-capable +# GNU binutils 2.17.50 ld. +.if ${MK_LLD_IS_LD} == "no" +SUBDIR+=ld +.endif SUBDIR_DEPEND_libbinutils=libbfd # for bfdver.h SUBDIR_DEPEND_as=libbfd libiberty libopcodes diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc index 77ae362208ff..d558d6b8c7d1 100644 --- a/tools/build/mk/OptionalObsoleteFiles.inc +++ b/tools/build/mk/OptionalObsoleteFiles.inc @@ -208,7 +208,6 @@ OLD_FILES+=usr/bin/as OLD_FILES+=usr/bin/ld OLD_FILES+=usr/share/man/man1/ld.1.gz .endif -OLD_FILES+=usr/bin/ld.bfd OLD_FILES+=usr/bin/objdump OLD_FILES+=usr/libdata/ldscripts/armelf_fbsd.x OLD_FILES+=usr/libdata/ldscripts/armelf_fbsd.xbn @@ -412,6 +411,9 @@ OLD_FILES+=usr/share/man/man7/ld.7.gz OLD_FILES+=usr/share/man/man7/ldint.7.gz OLD_FILES+=usr/share/man/man7/binutils.7.gz .endif +.if ${MK_BINUTILS} == no || ${MK_LLD_IS_LD} == yes +OLD_FILES+=usr/bin/ld.bfd +.endif .if ${MK_BLACKLIST} == no OLD_FILES+=etc/rc.d/blacklistd diff --git a/tools/build/options/WITHOUT_BINUTILS b/tools/build/options/WITHOUT_BINUTILS index 6fe1c17293a5..2dee78d04380 100644 --- a/tools/build/options/WITHOUT_BINUTILS +++ b/tools/build/options/WITHOUT_BINUTILS @@ -1,4 +1,9 @@ .\" $FreeBSD$ -Set to not build or install binutils (as, ld, and objdump) as part +Set to not build or install GNU +.Xr as 1 , +.Xr objdump 1 , +and for some CPU architectures +.Xr ld.bfd 1 +as part of the normal system build. The resulting system cannot build programs from source. diff --git a/tools/build/options/WITH_BINUTILS b/tools/build/options/WITH_BINUTILS index be3bada4e8f0..5f9d98d7fcaf 100644 --- a/tools/build/options/WITH_BINUTILS +++ b/tools/build/options/WITH_BINUTILS @@ -1,3 +1,8 @@ .\" $FreeBSD$ -Set to build and install binutils (as, ld, and objdump) as part +Set to build and install GNU +.Xr as 1 , +.Xr objdump 1 , +and for some CPU architectures +.Xr ld.bfd 1 +as part of the normal system build.