From: Kees Cook <keescook@chromium.org> To: Nick Desaulniers <ndesaulniers@google.com> Cc: Michael Ellerman <mpe@ellerman.id.au>, Nicholas Piggin <npiggin@gmail.com>, 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, Fangrui Song <maskray@google.com> Subject: Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker Date: Tue, 1 Sep 2020 19:58:57 -0700 [thread overview] Message-ID: <202009011957.83E306094@keescook> (raw) In-Reply-To: <20200901222523.1941988-3-ndesaulniers@google.com> I think $subject needs a typo update... vdso32... On Tue, Sep 01, 2020 at 03:25:23PM -0700, 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 If it's like the x86 and arm toolchains, I think you'll be required to keep .got, but you can assert it to a 0 size, e.g.: /* * Sections that should stay zero sized, which is safer to * explicitly check instead of blindly discarding. */ .got : { *(.got) } ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!") (and put that at the end of the linker script) -Kees > > 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. > > 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*) > -- > 2.28.0.402.g5ffc5be6b7-goog > -- Kees Cook
WARNING: multiple messages have this Message-ID (diff)
From: Kees Cook <keescook@chromium.org> To: Nick Desaulniers <ndesaulniers@google.com> Cc: Christophe Leroy <christophe.leroy@c-s.fr>, Joe Lawrence <joe.lawrence@redhat.com>, Fangrui Song <maskray@google.com>, linux-kernel@vger.kernel.org, Nicholas Piggin <npiggin@gmail.com>, 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: Tue, 1 Sep 2020 19:58:57 -0700 [thread overview] Message-ID: <202009011957.83E306094@keescook> (raw) In-Reply-To: <20200901222523.1941988-3-ndesaulniers@google.com> I think $subject needs a typo update... vdso32... On Tue, Sep 01, 2020 at 03:25:23PM -0700, 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 If it's like the x86 and arm toolchains, I think you'll be required to keep .got, but you can assert it to a 0 size, e.g.: /* * Sections that should stay zero sized, which is safer to * explicitly check instead of blindly discarding. */ .got : { *(.got) } ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!") (and put that at the end of the linker script) -Kees > > 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. > > 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*) > -- > 2.28.0.402.g5ffc5be6b7-goog > -- Kees Cook
next prev parent reply other threads:[~2020-09-02 2:59 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 [this message] 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 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=202009011957.83E306094@keescook \ --to=keescook@chromium.org \ --cc=benh@kernel.crashing.org \ --cc=christophe.leroy@c-s.fr \ --cc=clang-built-linux@googlegroups.com \ --cc=joe.lawrence@redhat.com \ --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.