Message ID | b647b710-7ae0-3c7e-6996-92ac974b3b2a@molgen.mpg.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | clang/ld.lld build fails with `can't create dynamic relocation R_PPC64_ADDR64 against local symbol in readonly segment` | expand |
Dear Linux folks, 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. Kind regards, Paul > [1]: https://github.com/ClangBuiltLinux/linux/issues/811 > [2]: https://github.com/ClangBuiltLinux/linux/issues/811#issuecomment-568316320
Le 10/08/2021 à 20:38, Paul Menzel a écrit : > Dear Linux folks, > > > 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 ? Christophe
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
Paul Menzel <pmenzel@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
--- 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)