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
This commit is contained in:
Ed Maste 2018-11-26 17:07:35 +00:00
parent 6b26cacc52
commit eda7d3bec4
4 changed files with 20 additions and 4 deletions

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.