Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 May 2018 10:43:08 -0400
From:      Ed Maste <emaste@freebsd.org>
To:        "Rodney W. Grimes" <freebsd-rwg@pdx.rh.cn85.dnsmgr.net>
Cc:        Warner Losh <imp@bsdimp.com>, Hans Petter Selasky <hps@selasky.org>,  Emeric POUPON <emeric.poupon@stormshield.eu>,  Oliver Pinter <oliver.pinter@hardenedbsd.org>, freebsd-arch <freebsd-arch@freebsd.org>
Subject:   Re: Can't build kernel anymore: amd64 kernel requires linker ifunc support
Message-ID:  <CAPyFy2A-aWa5oKukOKWeAN3BCB07nXzLbO%2B_Txp5HHk0C0h9_g@mail.gmail.com>
In-Reply-To: <201805161335.w4GDZvSM000645@pdx.rh.CN85.dnsmgr.net>
References:  <CANCZdfq_V7CO8v%2BjXu0hQG1-k3-7a%2BjPK_abDoe_9V3p4Lk8DA@mail.gmail.com> <201805161335.w4GDZvSM000645@pdx.rh.CN85.dnsmgr.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 16 May 2018 at 09:35, Rodney W. Grimes
<freebsd-rwg@pdx.rh.cn85.dnsmgr.net> wrote:
>>
>> LD=ld.lld make
>>
>> is the magic here. The kernel needs a new linker to properly link in the
>> ifunc, and that's not our ancient ld. lld does it, as does the latter-day
>> binutils.
>
> Since this now seems to be a mandatory thing to get a kernel built
> can it please be set in the Makefile that is needing it?

It's already handled by the Makefile that needs it when using the
normal build process - i.e., "make buildworld buildkernel" (or
toolchain or kernel-toolchain followed by buildkernel).

The failure arises when building a kernel the "old" way, using config
and then and make in the kernel directory. This inherently uses the
host's linker (/usr/bin/ld), which is too old to link the kernel. We
can't just add LD=ld.lld to the kernel's Makefile(s), because it would
break external toolchain and other cases where users use a specific
linker. I hope to introduce a KERNEL_LD Make variable that controls
the linker used for the kernel link, but it's more involved than a one
or two line change for the same reason that we can't just set
LD=ld.lld.

ld.lld will start being installed as /usr/bin/ld once these two issues
are resolved:

pr227968 [exp-run] Update lang/ghc to 8.4.2, devel/stack to 1.7.1, and
all the */hs-* ports
pr214864 [exp-run] test build with lld as /usr/bin/ld

The exp-run for the first is complete and I believe we are now just
waiting on the change to be committed. As soon as that happens I will
ask for another exp-run for the second PR, and will commit the change
to install lld by default as soon as it completes (assuming
successfully).



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPyFy2A-aWa5oKukOKWeAN3BCB07nXzLbO%2B_Txp5HHk0C0h9_g>