On 6/23/2017 9:28 AM, Konstantin Belousov wrote: > 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.
Agreed. We can have a LINKER_FEATURES like we do for the compiler. In this case I suggest just moving the same condition you have added into bsd.linker.mk with something like https://people.freebsd.org/~bdrewery/patches/linker-features-build-id.diff Then in these sys/conf places you just: .if ${LINKER_FEATURES:Mbuild-id} LDFLAGS+= > > 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 > -- Regards, Bryan Drewery
signature.asc
Description: OpenPGP digital signature