clang/ld.lld build fails with `can't create dynamic relocation R_PPC64_ADDR64 against local symbol in readonly segment`
Michael Ellerman
mpe at ellerman.id.au
Thu Aug 12 15:46:12 AEST 2021
Paul Menzel <pmenzel at molgen.mpg.de> writes:
> Am 29.07.21 um 10:23 schrieb Paul Menzel:
>
>> I just wanted to make you aware that building Linux for ppc64le with
>> clang/lld.ld fails with [1]:
>>
>> ld.lld: error: can't create dynamic relocation R_PPC64_ADDR64
>> against symbol: empty_zero_page in readonly segment; recompile object
>> files with -fPIC or pass '-Wl,-z,notext' to allow text relocations in
>> the output
>> >>> defined in arch/powerpc/kernel/head_64.o
>> >>> referenced by
>> arch/powerpc/kernel/head_64.o:(___ksymtab+empty_zero_page+0x0)
>>
>> The patch below from one of the comments [2] fixes it.
>>
>> --- i/arch/powerpc/Makefile
>> +++ w/arch/powerpc/Makefile
>> @@ -122,7 +122,7 @@ cflags-$(CONFIG_STACKPROTECTOR) +=
>> -mstack-protector-guard-reg=r2
>> endif
>>
>> LDFLAGS_vmlinux-y := -Bstatic
>> -LDFLAGS_vmlinux-$(CONFIG_RELOCATABLE) := -pie
>> +LDFLAGS_vmlinux-$(CONFIG_RELOCATABLE) := -pie -z notext
>> LDFLAGS_vmlinux := $(LDFLAGS_vmlinux-y)
>> LDFLAGS_vmlinux += $(call ld-option,--orphan-handling=warn)
>
> Any comments, if this is the right fix? Current Linux master branch
> still fails to build with `LLVM=1` on Ubuntu 21.04 without this change.
Sorry but I have no idea if it's the right fix. What I need is the
author (or someone else) to send a patch with a change log explaining
the change, what it does, why it's right for llvm, and why it's right
for binutils.
cheers
More information about the Linuxppc-dev
mailing list