From 8e732dbd37ff11276cc552edf5b1a6f484b9ab2d Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 8 Sep 2021 14:04:13 +0200 Subject: i386 loaders: avoid lld 13 garbage collecting linker sets Because lld 13 and higher default to garbage collecting start/stop symbols when using --gc-sections, the linker sets used in the i386 boot loaders will disappear. This leads to the loaders not recognizing any commands, and failure to boot. Until we have a good set of linker scripts for the loaders, work around it by disabling the start-stop-gc feature. (cherry picked from commit c90cab0d668af5d947054e47184d4f8dcb874ec8) --- stand/i386/loader/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stand/i386/loader/Makefile b/stand/i386/loader/Makefile index d332ea0530c7..5ac9db2b7216 100644 --- a/stand/i386/loader/Makefile +++ b/stand/i386/loader/Makefile @@ -50,6 +50,12 @@ ORG= 0x0 CFLAGS+= -Wall LDFLAGS+= -static ${LDFLAGS_ORG} -Wl,--gc-sections +.if ${LINKER_TYPE} == "lld" && ${LINKER_VERSION} >= 130000 +# lld 13 and higher default to garbage collecting start/stop symbols, +# completely ruining our linker sets. For now, work around it by +# disabling this un-feature. +LDFLAGS+= -Wl,-z,nostart-stop-gc +.endif # i386 standalone support library LIBI386= ${BOOTOBJ}/i386/libi386/libi386.a -- cgit v1.2.3