clang/ld.lld build fails with `can't create dynamic relocation R_PPC64_ADDR64 against local symbol in readonly segment`

Paul Menzel pmenzel at molgen.mpg.de
Thu Aug 12 09:09:31 AEST 2021


Dear Christophe,


Am 11.08.21 um 16:10 schrieb Christophe Leroy:

> Le 10/08/2021 à 20:38, Paul Menzel a écrit :

>> 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.
> 
> Which kernel version are you building ?
> 
> Since 
> https://github.com/linuxppc/linux/commit/45b30fafe528601f1a4449c9d68d8ebe7bbc39ad 
> , empty_zero_page[] is in arch/powerpc/mm/mem.c not in 
> arch/powerpc/kernel/head_64.o
> 
> Do you still have the issue with kernel 5.14 ?

Yes, before sending the message, I reproduced it with

     $ git describe
     v5.14-rc5-2-g9a73fa375d58

containing the commit you mentioned.


Kind regards,

Paul


More information about the Linuxppc-dev mailing list