a2037dba7e
LLD 10.0.0 changed the behavior of the -Ttext option, so that using -Ttext=0x0 now causes linking of the loaders to fail with: ld: error: output file too large: 18446744073707016908 bytes I reported this in https://bugs.llvm.org/show_bug.cgi?id=44715, and initially reverted the upstream change in r357259 to work around it. However, after some discussion with Fangrui Song in the upstream ticket, I think we can classify this as an unfortunate interaction between using -Ttext=0 in combination with --no-rosegment. (We added the latter in r332090, because btxld does not correctly handle input with more than 2 PT_LOAD segments.) Fangrui suggested to use a linker script instead, and Warner was already attempting this in r305353, but had to revert it due to "crypto-using boot problems" (not sure what those were :). This review updates the stand/i386/boot.ldscript to handle more sections, inserts some symbols like _edata and such that we use in libsa, and also discards any .interp section. It uses ORG which is defined on the linker command line using --defsym ORG=value to set the start of all the sections. Reviewed by: imp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D23952
42 lines
944 B
Makefile
42 lines
944 B
Makefile
# Common defines for all of stand/i386/
|
|
#
|
|
# $FreeBSD$
|
|
|
|
.include "bsd.linker.mk"
|
|
|
|
LOADER_ADDRESS?=0x200000
|
|
LDFLAGS+= -nostdlib
|
|
LDFLAGS.lld+= -Wl,--no-rosegment
|
|
MK_PIE:= no
|
|
|
|
# BTX components
|
|
BTXDIR= ${BOOTOBJ}/i386/btx
|
|
BTXLDR= ${BTXDIR}/btxldr/btxldr
|
|
BTXKERN= ${BTXDIR}/btx/btx
|
|
BTXCRT= ${BTXDIR}/lib/crt0.o
|
|
|
|
BTXSRC= ${BOOTSRC}/i386/btx
|
|
BTXLIB= ${BTXSRC}/lib
|
|
|
|
CFLAGS+= -I${BTXLIB}
|
|
|
|
# compact binary with no padding between text, data, bss
|
|
LDSCRIPT= ${BOOTSRC}/i386/boot.ldscript
|
|
LDFLAGS_ORG= -Wl,--defsym,ORG=${ORG},-T,${LDSCRIPT}
|
|
LDFLAGS_BIN= -e start ${LDFLAGS_ORG} -Wl,-N,-S,--oformat,binary
|
|
.if ${LINKER_FEATURES:Mbuild-id} != ""
|
|
LDFLAGS_BIN+= -Wl,--build-id=none
|
|
.endif
|
|
LD_FLAGS_BIN= -static -N --gc-sections
|
|
|
|
.if ${MACHINE_CPUARCH} == "amd64"
|
|
DO32=1
|
|
.endif
|
|
|
|
.if defined(LOADER_FIREWIRE_SUPPORT)
|
|
MK_LOADER_FIREWIRE=yes
|
|
.warning "LOADER_FIREWIRE_SUPPORT deprecated, please move to WITH_LOADER_FIREWIRE"
|
|
.endif
|
|
|
|
.include "../Makefile.inc"
|