From: Christophe Leroy <christophe.leroy@csgroup.eu> To: Nick Desaulniers <ndesaulniers@google.com>, Michael Ellerman <mpe@ellerman.id.au>, Nicholas Piggin <npiggin@gmail.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, Joe Lawrence <joe.lawrence@redhat.com>, Christophe Leroy <christophe.leroy@c-s.fr>, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, Kees Cook <keescook@chromium.org>, Fangrui Song <maskray@google.com> Subject: Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker Date: Wed, 2 Sep 2020 07:56:13 +0000 [thread overview] Message-ID: <371fd179-7d25-1393-f878-10eeb6ad12cc@csgroup.eu> (raw) In-Reply-To: <20200901222523.1941988-3-ndesaulniers@google.com> On 9/1/20 10:25 PM, Nick Desaulniers wrote: > Rather than invoke the compiler as the driver, use the linker. That way > we can check --orphan-handling=warn support correctly, as cc-ldoption > was removed in > commit 055efab3120b ("kbuild: drop support for cc-ldoption"). > > Requires dropping the .got section. I couldn't find how it was used in > the vdso32. > > Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") > Link: https://lore.kernel.org/lkml/CAKwvOdnn3wxYdJomvnveyD_njwRku3fABWT_bS92duihhywLJQ@mail.gmail.com/ > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> > --- > Not sure removing .got is a good idea or not. Otherwise I observe the > following link error: > powerpc-linux-gnu-ld: warning: orphan section `.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.got' > powerpc-linux-gnu-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got > powerpc-linux-gnu-ld: final link failed: bad value > > sigtramp.c doesn't mention anything from the GOT AFAICT, and doesn't > look like it contains relocations that do, so I'm not sure where > references to _GLOBAL_OFFSET_TABLE_ are coming from. I'm getting the same but only when building for PPC64. I don't get any reference to sigtramp.o though: CALL scripts/checksyscalls.sh CALL scripts/atomic/check-atomics.sh VDSO32A arch/powerpc/kernel/vdso32/sigtramp.o VDSO32A arch/powerpc/kernel/vdso32/gettimeofday.o VDSO32A arch/powerpc/kernel/vdso32/datapage.o VDSO32A arch/powerpc/kernel/vdso32/cacheflush.o VDSO32A arch/powerpc/kernel/vdso32/note.o VDSO32A arch/powerpc/kernel/vdso32/getcpu.o LD arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got powerpc64-linux-ld: final link failed: Bad value (GCC 8.1, Binutils 2.30) So it seems that the got section is being created by the linker. Don't know why though. With GCC 10.1, binutils 2.34 I get: LDS arch/powerpc/kernel/vdso32/vdso32.lds VDSO32A arch/powerpc/kernel/vdso32/sigtramp.o VDSO32A arch/powerpc/kernel/vdso32/gettimeofday.o VDSO32A arch/powerpc/kernel/vdso32/datapage.o VDSO32A arch/powerpc/kernel/vdso32/cacheflush.o VDSO32A arch/powerpc/kernel/vdso32/note.o VDSO32A arch/powerpc/kernel/vdso32/getcpu.o LD arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: warning: orphan section `.branch_lt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.branch_lt' powerpc64-linux-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got powerpc64-linux-ld: final link failed: bad value I can't see any .branch_lt section when objdumping sigtramp.o or any other .o When I move sigtramp.o at the end of the definition of obj-vdso32 in Makefile, I then get: powerpc64-linux-ld: warning: orphan section `.branch_lt' from `arch/powerpc/kernel/vdso32/gettimeofday.o' being placed in section `.branch_lt' powerpc64-linux-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got powerpc64-linux-ld: final link failed: bad value gettimeofday.o now being the first object in obj-vdso32 Christophe > > arch/powerpc/kernel/vdso32/Makefile | 7 +++++-- > arch/powerpc/kernel/vdso32/vdso32.lds.S | 3 ++- > 2 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile > index 87ab1152d5ce..611a5951945a 100644 > --- a/arch/powerpc/kernel/vdso32/Makefile > +++ b/arch/powerpc/kernel/vdso32/Makefile > @@ -27,6 +27,9 @@ UBSAN_SANITIZE := n > ccflags-y := -shared -fno-common -fno-builtin -nostdlib \ > -Wl,-soname=linux-vdso32.so.1 -Wl,--hash-style=both > asflags-y := -D__VDSO32__ -s > +ldflags-y := -shared -soname linux-vdso32.so.1 \ > + $(call ld-option, --eh-frame-hdr) \ > + $(call ld-option, --orphan-handling=warn) -T > > obj-y += vdso32_wrapper.o > extra-y += vdso32.lds > @@ -49,8 +52,8 @@ $(obj-vdso32): %.o: %.S FORCE > $(call if_changed_dep,vdso32as) > > # actual build commands > -quiet_cmd_vdso32ld = VDSO32L $@ > - cmd_vdso32ld = $(VDSOCC) $(c_flags) $(CC32FLAGS) -o $@ $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) > +quiet_cmd_vdso32ld = LD $@ > + cmd_vdso32ld = $(cmd_ld) > quiet_cmd_vdso32as = VDSO32A $@ > cmd_vdso32as = $(VDSOCC) $(a_flags) $(CC32FLAGS) -c -o $@ $< > > diff --git a/arch/powerpc/kernel/vdso32/vdso32.lds.S b/arch/powerpc/kernel/vdso32/vdso32.lds.S > index 4c985467a668..0ccdebad18b8 100644 > --- a/arch/powerpc/kernel/vdso32/vdso32.lds.S > +++ b/arch/powerpc/kernel/vdso32/vdso32.lds.S > @@ -61,7 +61,6 @@ SECTIONS > .fixup : { *(.fixup) } > > .dynamic : { *(.dynamic) } :text :dynamic > - .got : { *(.got) } :text > .plt : { *(.plt) } > > _end = .; > @@ -108,7 +107,9 @@ SECTIONS > .debug_varnames 0 : { *(.debug_varnames) } > > /DISCARD/ : { > + *(.got) > *(.note.GNU-stack) > + *(.branch_lt) > *(.data .data.* .gnu.linkonce.d.* .sdata*) > *(.bss .sbss .dynbss .dynsbss) > *(.glink .iplt .plt .rela*) >
WARNING: multiple messages have this Message-ID (diff)
From: Christophe Leroy <christophe.leroy@csgroup.eu> To: Nick Desaulniers <ndesaulniers@google.com>, Michael Ellerman <mpe@ellerman.id.au>, Nicholas Piggin <npiggin@gmail.com> Cc: Christophe Leroy <christophe.leroy@c-s.fr>, Joe Lawrence <joe.lawrence@redhat.com>, Kees Cook <keescook@chromium.org>, Fangrui Song <maskray@google.com>, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, Paul Mackerras <paulus@samba.org>, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker Date: Wed, 2 Sep 2020 07:56:13 +0000 [thread overview] Message-ID: <371fd179-7d25-1393-f878-10eeb6ad12cc@csgroup.eu> (raw) In-Reply-To: <20200901222523.1941988-3-ndesaulniers@google.com> On 9/1/20 10:25 PM, Nick Desaulniers wrote: > Rather than invoke the compiler as the driver, use the linker. That way > we can check --orphan-handling=warn support correctly, as cc-ldoption > was removed in > commit 055efab3120b ("kbuild: drop support for cc-ldoption"). > > Requires dropping the .got section. I couldn't find how it was used in > the vdso32. > > Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") > Link: https://lore.kernel.org/lkml/CAKwvOdnn3wxYdJomvnveyD_njwRku3fABWT_bS92duihhywLJQ@mail.gmail.com/ > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> > --- > Not sure removing .got is a good idea or not. Otherwise I observe the > following link error: > powerpc-linux-gnu-ld: warning: orphan section `.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.got' > powerpc-linux-gnu-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got > powerpc-linux-gnu-ld: final link failed: bad value > > sigtramp.c doesn't mention anything from the GOT AFAICT, and doesn't > look like it contains relocations that do, so I'm not sure where > references to _GLOBAL_OFFSET_TABLE_ are coming from. I'm getting the same but only when building for PPC64. I don't get any reference to sigtramp.o though: CALL scripts/checksyscalls.sh CALL scripts/atomic/check-atomics.sh VDSO32A arch/powerpc/kernel/vdso32/sigtramp.o VDSO32A arch/powerpc/kernel/vdso32/gettimeofday.o VDSO32A arch/powerpc/kernel/vdso32/datapage.o VDSO32A arch/powerpc/kernel/vdso32/cacheflush.o VDSO32A arch/powerpc/kernel/vdso32/note.o VDSO32A arch/powerpc/kernel/vdso32/getcpu.o LD arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got powerpc64-linux-ld: final link failed: Bad value (GCC 8.1, Binutils 2.30) So it seems that the got section is being created by the linker. Don't know why though. With GCC 10.1, binutils 2.34 I get: LDS arch/powerpc/kernel/vdso32/vdso32.lds VDSO32A arch/powerpc/kernel/vdso32/sigtramp.o VDSO32A arch/powerpc/kernel/vdso32/gettimeofday.o VDSO32A arch/powerpc/kernel/vdso32/datapage.o VDSO32A arch/powerpc/kernel/vdso32/cacheflush.o VDSO32A arch/powerpc/kernel/vdso32/note.o VDSO32A arch/powerpc/kernel/vdso32/getcpu.o LD arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: warning: orphan section `.branch_lt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.branch_lt' powerpc64-linux-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got powerpc64-linux-ld: final link failed: bad value I can't see any .branch_lt section when objdumping sigtramp.o or any other .o When I move sigtramp.o at the end of the definition of obj-vdso32 in Makefile, I then get: powerpc64-linux-ld: warning: orphan section `.branch_lt' from `arch/powerpc/kernel/vdso32/gettimeofday.o' being placed in section `.branch_lt' powerpc64-linux-ld: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got powerpc64-linux-ld: final link failed: bad value gettimeofday.o now being the first object in obj-vdso32 Christophe > > arch/powerpc/kernel/vdso32/Makefile | 7 +++++-- > arch/powerpc/kernel/vdso32/vdso32.lds.S | 3 ++- > 2 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile > index 87ab1152d5ce..611a5951945a 100644 > --- a/arch/powerpc/kernel/vdso32/Makefile > +++ b/arch/powerpc/kernel/vdso32/Makefile > @@ -27,6 +27,9 @@ UBSAN_SANITIZE := n > ccflags-y := -shared -fno-common -fno-builtin -nostdlib \ > -Wl,-soname=linux-vdso32.so.1 -Wl,--hash-style=both > asflags-y := -D__VDSO32__ -s > +ldflags-y := -shared -soname linux-vdso32.so.1 \ > + $(call ld-option, --eh-frame-hdr) \ > + $(call ld-option, --orphan-handling=warn) -T > > obj-y += vdso32_wrapper.o > extra-y += vdso32.lds > @@ -49,8 +52,8 @@ $(obj-vdso32): %.o: %.S FORCE > $(call if_changed_dep,vdso32as) > > # actual build commands > -quiet_cmd_vdso32ld = VDSO32L $@ > - cmd_vdso32ld = $(VDSOCC) $(c_flags) $(CC32FLAGS) -o $@ $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) > +quiet_cmd_vdso32ld = LD $@ > + cmd_vdso32ld = $(cmd_ld) > quiet_cmd_vdso32as = VDSO32A $@ > cmd_vdso32as = $(VDSOCC) $(a_flags) $(CC32FLAGS) -c -o $@ $< > > diff --git a/arch/powerpc/kernel/vdso32/vdso32.lds.S b/arch/powerpc/kernel/vdso32/vdso32.lds.S > index 4c985467a668..0ccdebad18b8 100644 > --- a/arch/powerpc/kernel/vdso32/vdso32.lds.S > +++ b/arch/powerpc/kernel/vdso32/vdso32.lds.S > @@ -61,7 +61,6 @@ SECTIONS > .fixup : { *(.fixup) } > > .dynamic : { *(.dynamic) } :text :dynamic > - .got : { *(.got) } :text > .plt : { *(.plt) } > > _end = .; > @@ -108,7 +107,9 @@ SECTIONS > .debug_varnames 0 : { *(.debug_varnames) } > > /DISCARD/ : { > + *(.got) > *(.note.GNU-stack) > + *(.branch_lt) > *(.data .data.* .gnu.linkonce.d.* .sdata*) > *(.bss .sbss .dynbss .dynsbss) > *(.glink .iplt .plt .rela*) >
next prev parent reply other threads:[~2020-09-02 7:56 UTC|newest] Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-01 22:25 [PATCH 0/2] link vdso with linker Nick Desaulniers 2020-09-01 22:25 ` Nick Desaulniers 2020-09-01 22:25 ` [PATCH 1/2] powerpc/vdso64: link vdso64 " Nick Desaulniers 2020-09-01 22:25 ` Nick Desaulniers 2020-09-02 12:14 ` Michael Ellerman 2020-09-02 12:14 ` Michael Ellerman 2020-09-02 17:41 ` Nick Desaulniers 2020-09-02 17:41 ` Nick Desaulniers 2020-09-02 18:02 ` Christophe Leroy 2021-04-22 22:44 ` Nick Desaulniers 2021-04-22 22:44 ` Nick Desaulniers 2021-04-23 7:40 ` Christophe Leroy 2021-04-23 7:40 ` Christophe Leroy 2021-04-23 17:18 ` Christophe Leroy 2021-04-23 17:18 ` Christophe Leroy 2022-03-02 16:48 ` Christophe Leroy 2020-09-01 22:25 ` [PATCH 2/2] powerpc/vdso32: " Nick Desaulniers 2020-09-01 22:25 ` Nick Desaulniers 2020-09-02 2:58 ` Kees Cook 2020-09-02 2:58 ` Kees Cook 2020-09-02 6:46 ` Christophe Leroy 2020-09-02 6:46 ` Christophe Leroy 2020-09-02 14:14 ` Segher Boessenkool 2020-09-02 14:14 ` Segher Boessenkool 2020-09-02 15:43 ` Christophe Leroy 2020-09-02 15:43 ` Christophe Leroy 2020-09-02 16:57 ` Segher Boessenkool 2020-09-02 16:57 ` Segher Boessenkool 2020-09-02 7:56 ` Christophe Leroy [this message] 2020-09-02 7:56 ` Christophe Leroy 2020-09-02 10:16 ` Christophe Leroy 2020-09-02 10:16 ` Christophe Leroy 2020-09-02 5:21 ` [PATCH 0/2] link vdso " Nathan Chancellor 2020-09-02 5:21 ` Nathan Chancellor 2020-09-02 9:14 [PATCH 2/2] powerpc/vdso32: link vdso64 " kernel test robot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=371fd179-7d25-1393-f878-10eeb6ad12cc@csgroup.eu \ --to=christophe.leroy@csgroup.eu \ --cc=benh@kernel.crashing.org \ --cc=christophe.leroy@c-s.fr \ --cc=clang-built-linux@googlegroups.com \ --cc=joe.lawrence@redhat.com \ --cc=keescook@chromium.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=maskray@google.com \ --cc=mpe@ellerman.id.au \ --cc=ndesaulniers@google.com \ --cc=npiggin@gmail.com \ --cc=paulus@samba.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.