From 53e0bebaca4f073e7dec262c6b74dd2e79a2c10d Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Fri, 23 Jun 2017 15:57:58 +0000 Subject: [PATCH] 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 --- sys/conf/kern.pre.mk | 4 ++++ sys/conf/kmod.mk | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/sys/conf/kern.pre.mk b/sys/conf/kern.pre.mk index a443de7b71b8..48b23f8900ed 100644 --- a/sys/conf/kern.pre.mk +++ b/sys/conf/kern.pre.mk @@ -114,6 +114,10 @@ DEFINED_PROF= ${PROF} # can override the others. CFLAGS+= ${CONF_CFLAGS} +.if ${LINKER_TYPE} != "bfd" || ${LINKER_VERSION} > 21750 +LDFLAGS+= -Wl,--build-id=sha1 +.endif + # Optional linting. This can be overridden in /etc/make.conf. LINTFLAGS= ${LINTOBJKERNFLAGS} diff --git a/sys/conf/kmod.mk b/sys/conf/kmod.mk index fb00cadeb448..61c136e14f3e 100644 --- a/sys/conf/kmod.mk +++ b/sys/conf/kmod.mk @@ -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