On Wed, 26 Jun 2019 at 06:20, Nathan Chancellor <natechancel...@gmail.com> wrote: > > After r363059 and r363928 in LLVM, a build using ld.lld as the linker > with CONFIG_RANDOMIZE_BASE enabled fails like so: > > ld.lld: error: relocation R_AARCH64_ABS32 cannot be used against symbol > __efistub_stext_offset; recompile with -fPIC > > Fangrui and Peter figured out that ld.lld is incorrectly considering > __efistub_stext_offset as a relative symbol because of the order in > which symbols are evaluated. _text is treated as an absolute symbol > and stext is a relative symbol, making __efistub_stext_offset a > relative symbol. > > Adding ABSOLUTE will force ld.lld to evalute this expression in the > right context and does not change ld.bfd's behavior. ld.lld will > need to be fixed but the developers do not see a quick or simple fix > without some research (see the linked issue for further explanation). > Add this simple workaround so that ld.lld can continue to link kernels. > > Link: https://github.com/ClangBuiltLinux/linux/issues/561 > Link: > https://github.com/llvm/llvm-project/commit/025a815d75d2356f2944136269aa5874721ec236 > Link: > https://github.com/llvm/llvm-project/commit/249fde85832c33f8b06c6b4ac65d1c4b96d23b83 > Debugged-by: Fangrui Song <mask...@google.com> > Debugged-by: Peter Smith <peter.sm...@linaro.org> > Suggested-by: Fangrui Song <mask...@google.com> > Signed-off-by: Nathan Chancellor <natechancel...@gmail.com>
Acked-by: Ard Biesheuvel <ard.biesheu...@linaro.org> > --- > arch/arm64/kernel/image.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h > index 04ca08086d35..9a2d2227907c 100644 > --- a/arch/arm64/kernel/image.h > +++ b/arch/arm64/kernel/image.h > @@ -67,7 +67,7 @@ > > #ifdef CONFIG_EFI > > -__efistub_stext_offset = stext - _text; > +__efistub_stext_offset = ABSOLUTE(stext - _text); > > /* > * The EFI stub has its own symbol namespace prefixed by __efistub_, to > -- > 2.22.0 >