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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to