Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Apr 2017 03:05:05 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r316514 - head/sys/conf
Message-ID:  <201704050305.v35355ti026690@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Wed Apr  5 03:05:04 2017
New Revision: 316514
URL: https://svnweb.freebsd.org/changeset/base/316514

Log:
  Always pass the linker emulation via -m when linking modules and kernels.
  
  Previously the linker emulation was only passed when building binary
  objects for firmware modules.  This change always passes the desired
  output format for kernel modules and kernels rather than requiring the
  toolchain's default output format to match the desired output format.
  This in turn permits use of external toolchains whose default output
  format does not match the desired output format.
  
  Reviewed by:	imp, emaste
  Sponsored by:	DARPA / AFRL
  Differential Revision:	https://reviews.freebsd.org/D10085

Modified:
  head/sys/conf/Makefile.arm
  head/sys/conf/kern.mk
  head/sys/conf/kern.pre.mk
  head/sys/conf/kmod.mk

Modified: head/sys/conf/Makefile.arm
==============================================================================
--- head/sys/conf/Makefile.arm	Wed Apr  5 03:00:52 2017	(r316513)
+++ head/sys/conf/Makefile.arm	Wed Apr  5 03:05:04 2017	(r316514)
@@ -56,8 +56,8 @@ CFLAGS += -mllvm -arm-enable-ehabi
 # hack because genassym.c includes sys/bus.h which includes these.
 genassym.o: bus_if.h device_if.h
 
-SYSTEM_LD_ = ${LD} -Bdynamic -T ldscript.$M.noheader ${_LDFLAGS} \
-	--no-warn-mismatch --warn-common --export-dynamic \
+SYSTEM_LD_ = ${LD} -m ${LD_EMULATION} -Bdynamic -T ldscript.$M.noheader \
+	${_LDFLAGS} --no-warn-mismatch --warn-common --export-dynamic \
 	--dynamic-linker /red/herring \
 	-o ${FULLKERNEL}.noheader -X ${SYSTEM_OBJS} vers.o
 SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// ldscript.$M\

Modified: head/sys/conf/kern.mk
==============================================================================
--- head/sys/conf/kern.mk	Wed Apr  5 03:00:52 2017	(r316513)
+++ head/sys/conf/kern.mk	Wed Apr  5 03:05:04 2017	(r316514)
@@ -254,8 +254,7 @@ CFLAGS+=        -std=iso9899:1999
 CFLAGS+=        -std=${CSTD}
 .endif # CSTD
 
-# Set target-specific linker emulation name. Used by ld -b binary to convert
-# binary files into ELF objects.
+# Set target-specific linker emulation name.
 LD_EMULATION_aarch64=aarch64elf
 LD_EMULATION_amd64=elf_x86_64_fbsd
 LD_EMULATION_arm=armelf_fbsd

Modified: head/sys/conf/kern.pre.mk
==============================================================================
--- head/sys/conf/kern.pre.mk	Wed Apr  5 03:00:52 2017	(r316513)
+++ head/sys/conf/kern.pre.mk	Wed Apr  5 03:05:04 2017	(r316514)
@@ -184,8 +184,9 @@ MD_ROOT_SIZE_CONFIGURED!=	grep MD_ROOT_S
 SYSTEM_OBJS+= embedfs_${MFS_IMAGE:T:R}.o
 .endif
 .endif
-SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} ${_LDFLAGS} --no-warn-mismatch \
-	--warn-common --export-dynamic --dynamic-linker /red/herring \
+SYSTEM_LD= @${LD} -m ${LD_EMULATION} -Bdynamic -T ${LDSCRIPT} ${_LDFLAGS} \
+	--no-warn-mismatch --warn-common --export-dynamic \
+	--dynamic-linker /red/herring \
 	-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
 SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \
 	${SIZE} ${.TARGET} ; chmod 755 ${.TARGET}

Modified: head/sys/conf/kmod.mk
==============================================================================
--- head/sys/conf/kmod.mk	Wed Apr  5 03:00:52 2017	(r316513)
+++ head/sys/conf/kmod.mk	Wed Apr  5 03:05:04 2017	(r316514)
@@ -210,7 +210,8 @@ ${PROG}.debug: ${FULLPROG}
 .if ${__KLD_SHARED} == yes
 ${FULLPROG}: ${KMOD}.kld
 .if ${MACHINE_CPUARCH} != "aarch64"
-	${LD} -Bshareable ${_LDFLAGS} -o ${.TARGET} ${KMOD}.kld
+	${LD} -m ${LD_EMULATION} -Bshareable ${_LDFLAGS} -o ${.TARGET} \
+	    ${KMOD}.kld
 .else
 #XXXKIB Relocatable linking in aarch64 ld from binutils 2.25.1 does
 #       not work.  The linker corrupts the references to the external
@@ -218,7 +219,7 @@ ${FULLPROG}: ${KMOD}.kld
 #       and should therefore loose the GOT entry.  The problem seems
 #       to be fixed in the binutils-gdb git HEAD as of 2015-10-04.  Hack
 #       below allows to get partially functioning modules for now.
-	${LD} -Bshareable ${_LDFLAGS} -o ${.TARGET} ${OBJS}
+	${LD} -m ${LD_EMULATION} -Bshareable ${_LDFLAGS} -o ${.TARGET} ${OBJS}
 .endif
 .if !defined(DEBUG_FLAGS)
 	${OBJCOPY} --strip-debug ${.TARGET}
@@ -235,7 +236,7 @@ ${KMOD}.kld: ${OBJS}
 .else
 ${FULLPROG}: ${OBJS}
 .endif
-	${LD} ${_LDFLAGS} -r -d -o ${.TARGET} ${OBJS}
+	${LD} -m ${LD_EMULATION} ${_LDFLAGS} -r -d -o ${.TARGET} ${OBJS}
 .if ${MK_CTF} != "no"
 	${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS}
 .endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704050305.v35355ti026690>