svn commit: r320272 - head/sys/conf

Konstantin Belousov kostikbel at gmail.com
Fri Jun 23 16:29:06 UTC 2017


On Fri, Jun 23, 2017 at 03:57:58PM +0000, Ed Maste wrote:
> Author: emaste
> Date: Fri Jun 23 15:57:58 2017
> New Revision: 320272
> URL: https://svnweb.freebsd.org/changeset/base/320272
> 
> Log:
>   enable --build-id for the kernel link
>   
>   A Build-ID is an identifier generated at link time to uniquely identify
>   ELF binaries.  It allows efficient confirmation that an executable or
>   shared library and a corresponding standalone debuginfo file match.
>   (Otherwise, a checksum of the debuginfo file must be calculated when
>   opening it in a debugger.)
>   
>   The FreeBSD base system includes GNU bfd ld 2.17.50 as the linker for
>   architectures other than arm64.  Build-ID support was added to bfd ld
>   shortly after that version, so was not previously available to us.
>   
>   We can now start making use of Build-ID as we migrate to using lld or
>   bfd ld from ports, conditionally enabled based on the LINKER_TYPE and
>   LINKER_VERSION make variables added in r320244 and subsequent commits.
>   
>   Reviewed by:	dim
>   MFC after:	3 weeks
>   Sponsored by:	The FreeBSD Foundation
>   Differential Revision:	https://reviews.freebsd.org/D11314
> 
> Modified:
>   head/sys/conf/kern.pre.mk
>   head/sys/conf/kmod.mk
> 
> Modified: head/sys/conf/kern.pre.mk
> ==============================================================================
> --- head/sys/conf/kern.pre.mk	Fri Jun 23 15:27:23 2017	(r320271)
> +++ head/sys/conf/kern.pre.mk	Fri Jun 23 15:57:58 2017	(r320272)
> @@ -114,6 +114,10 @@ DEFINED_PROF=	${PROF}
>  # can override the others.
>  CFLAGS+=	${CONF_CFLAGS}
>  
> +.if ${LINKER_TYPE} != "bfd" || ${LINKER_VERSION} > 21750
I believe such tests is the road to misery.  I suggest that an ld feature
presence must define some variable for make, and the places using the
ld feature would test for the variable.

In other words, checking the features must be centralized.  There is too
many linkers already: bfd, gold, lld.  Since two new linkers appeared in
five years, I would be not surprised if more will.

Having to deal with combinations at places of use is not scalable.  We do
it close to right with C compilers and sys/cdefs.h.

> +LDFLAGS+=	-Wl,--build-id=sha1
> +.endif
> +
>  # Optional linting. This can be overridden in /etc/make.conf.
>  LINTFLAGS=	${LINTOBJKERNFLAGS}
>  
> 
> Modified: head/sys/conf/kmod.mk
> ==============================================================================
> --- head/sys/conf/kmod.mk	Fri Jun 23 15:27:23 2017	(r320271)
> +++ head/sys/conf/kmod.mk	Fri Jun 23 15:57:58 2017	(r320272)
> @@ -125,6 +125,10 @@ CFLAGS.gcc+= --param large-function-growth=1000
>  CFLAGS+=	-fno-common
>  LDFLAGS+=	-d -warn-common
>  
> +.if ${LINKER_TYPE} != "bfd" || ${LINKER_VERSION} > 21750
> +LDFLAGS+=	-Wl,--build-id=sha1
> +.endif
> +
>  CFLAGS+=	${DEBUG_FLAGS}
>  .if ${MACHINE_CPUARCH} == amd64
>  CFLAGS+=	-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer


More information about the svn-src-all mailing list