* [PATCH 0/2] link vdso with linker @ 2020-09-01 22:25 ` Nick Desaulniers 0 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-01 22:25 UTC (permalink / raw) To: Michael Ellerman, Nicholas Piggin Cc: Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song, Nick Desaulniers Kees Cook is working on series that adds --orphan-section=warn to arm, arm64, and x86. I noticed that ppc vdso were still using cc-ldoption for these which I removed. It seems this results in that flag being silently dropped. I'm very confident with the first patch, but the second needs closer review around the error mentioned below the fold related to the .got section. Nick Desaulniers (2): powerpc/vdso64: link vdso64 with linker powerpc/vdso32: link vdso64 with linker arch/powerpc/include/asm/vdso.h | 17 ++--------------- arch/powerpc/kernel/vdso32/Makefile | 7 +++++-- arch/powerpc/kernel/vdso32/vdso32.lds.S | 3 ++- arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - 5 files changed, 15 insertions(+), 21 deletions(-) -- 2.28.0.402.g5ffc5be6b7-goog ^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 0/2] link vdso with linker @ 2020-09-01 22:25 ` Nick Desaulniers 0 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-01 22:25 UTC (permalink / raw) To: Michael Ellerman, Nicholas Piggin Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, Nick Desaulniers, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev Kees Cook is working on series that adds --orphan-section=warn to arm, arm64, and x86. I noticed that ppc vdso were still using cc-ldoption for these which I removed. It seems this results in that flag being silently dropped. I'm very confident with the first patch, but the second needs closer review around the error mentioned below the fold related to the .got section. Nick Desaulniers (2): powerpc/vdso64: link vdso64 with linker powerpc/vdso32: link vdso64 with linker arch/powerpc/include/asm/vdso.h | 17 ++--------------- arch/powerpc/kernel/vdso32/Makefile | 7 +++++-- arch/powerpc/kernel/vdso32/vdso32.lds.S | 3 ++- arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - 5 files changed, 15 insertions(+), 21 deletions(-) -- 2.28.0.402.g5ffc5be6b7-goog ^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-01 22:25 ` Nick Desaulniers -1 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-01 22:25 UTC (permalink / raw) To: Michael Ellerman, Nicholas Piggin Cc: Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song, Nick Desaulniers 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"). Painstakingly compared the output between `objdump -a` before and after this change. Now function symbols have the correct type of FUNC rather than NONE, and the entry is slightly different (which doesn't matter for the vdso). Binary size is the same. 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> --- arch/powerpc/include/asm/vdso.h | 17 ++--------------- arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h index 2ff884853f97..11b2ecf49f79 100644 --- a/arch/powerpc/include/asm/vdso.h +++ b/arch/powerpc/include/asm/vdso.h @@ -24,19 +24,7 @@ int vdso_getcpu_init(void); #else /* __ASSEMBLY__ */ -#ifdef __VDSO64__ -#define V_FUNCTION_BEGIN(name) \ - .globl name; \ - name: \ - -#define V_FUNCTION_END(name) \ - .size name,.-name; - -#define V_LOCAL_FUNC(name) (name) -#endif /* __VDSO64__ */ - -#ifdef __VDSO32__ - +#if defined(__VDSO32__) || defined (__VDSO64__) #define V_FUNCTION_BEGIN(name) \ .globl name; \ .type name,@function; \ @@ -46,8 +34,7 @@ int vdso_getcpu_init(void); .size name,.-name; #define V_LOCAL_FUNC(name) (name) - -#endif /* __VDSO32__ */ +#endif /* __VDSO{32|64}__ */ #endif /* __ASSEMBLY__ */ diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile index 38c317f25141..7ea3ce537d0a 100644 --- a/arch/powerpc/kernel/vdso64/Makefile +++ b/arch/powerpc/kernel/vdso64/Makefile @@ -32,9 +32,13 @@ $(obj)/%.so: OBJCOPYFLAGS := -S $(obj)/%.so: $(obj)/%.so.dbg FORCE $(call if_changed,objcopy) +ldflags-y := -shared -soname linux-vdso64.so.1 \ + $(call ld-option, --eh-frame-hdr) \ + $(call ld-option, --orphan-handling=warn) -T + # actual build commands -quiet_cmd_vdso64ld = VDSO64L $@ - cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) +quiet_cmd_vdso64ld = LD $@ + cmd_vdso64ld = $(cmd_ld) # install commands for the unstripped file quiet_cmd_vdso_install = INSTALL $@ diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S index 4e3a8d4ee614..58c33b704b6a 100644 --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S @@ -11,7 +11,6 @@ OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", "elf64-powerpcle") OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc") #endif OUTPUT_ARCH(powerpc:common64) -ENTRY(_start) SECTIONS { -- 2.28.0.402.g5ffc5be6b7-goog ^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 1/2] powerpc/vdso64: link vdso64 with linker @ 2020-09-01 22:25 ` Nick Desaulniers 0 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-01 22:25 UTC (permalink / raw) To: Michael Ellerman, Nicholas Piggin Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, Nick Desaulniers, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev 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"). Painstakingly compared the output between `objdump -a` before and after this change. Now function symbols have the correct type of FUNC rather than NONE, and the entry is slightly different (which doesn't matter for the vdso). Binary size is the same. 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> --- arch/powerpc/include/asm/vdso.h | 17 ++--------------- arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h index 2ff884853f97..11b2ecf49f79 100644 --- a/arch/powerpc/include/asm/vdso.h +++ b/arch/powerpc/include/asm/vdso.h @@ -24,19 +24,7 @@ int vdso_getcpu_init(void); #else /* __ASSEMBLY__ */ -#ifdef __VDSO64__ -#define V_FUNCTION_BEGIN(name) \ - .globl name; \ - name: \ - -#define V_FUNCTION_END(name) \ - .size name,.-name; - -#define V_LOCAL_FUNC(name) (name) -#endif /* __VDSO64__ */ - -#ifdef __VDSO32__ - +#if defined(__VDSO32__) || defined (__VDSO64__) #define V_FUNCTION_BEGIN(name) \ .globl name; \ .type name,@function; \ @@ -46,8 +34,7 @@ int vdso_getcpu_init(void); .size name,.-name; #define V_LOCAL_FUNC(name) (name) - -#endif /* __VDSO32__ */ +#endif /* __VDSO{32|64}__ */ #endif /* __ASSEMBLY__ */ diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile index 38c317f25141..7ea3ce537d0a 100644 --- a/arch/powerpc/kernel/vdso64/Makefile +++ b/arch/powerpc/kernel/vdso64/Makefile @@ -32,9 +32,13 @@ $(obj)/%.so: OBJCOPYFLAGS := -S $(obj)/%.so: $(obj)/%.so.dbg FORCE $(call if_changed,objcopy) +ldflags-y := -shared -soname linux-vdso64.so.1 \ + $(call ld-option, --eh-frame-hdr) \ + $(call ld-option, --orphan-handling=warn) -T + # actual build commands -quiet_cmd_vdso64ld = VDSO64L $@ - cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) +quiet_cmd_vdso64ld = LD $@ + cmd_vdso64ld = $(cmd_ld) # install commands for the unstripped file quiet_cmd_vdso_install = INSTALL $@ diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S index 4e3a8d4ee614..58c33b704b6a 100644 --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S @@ -11,7 +11,6 @@ OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", "elf64-powerpcle") OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc") #endif OUTPUT_ARCH(powerpc:common64) -ENTRY(_start) SECTIONS { -- 2.28.0.402.g5ffc5be6b7-goog ^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-02 12:14 ` Michael Ellerman -1 siblings, 0 replies; 34+ messages in thread From: Michael Ellerman @ 2020-09-02 12:14 UTC (permalink / raw) To: Nick Desaulniers, Nicholas Piggin Cc: Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song, Nick Desaulniers Nick Desaulniers <ndesaulniers@google.com> writes: > 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"). Ouch. Seems make is quite happy to $(call deadbeef, ...) and not print a warning, which I guess is probably a feature. > Painstakingly compared the output between `objdump -a` before and after > this change. Now function symbols have the correct type of FUNC rather > than NONE, and the entry is slightly different (which doesn't matter for > the vdso). Binary size is the same. > > Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") I think I'll just revert that for v5.9 ? cheers > Link: https://lore.kernel.org/lkml/CAKwvOdnn3wxYdJomvnveyD_njwRku3fABWT_bS92duihhywLJQ@mail.gmail.com/ > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> > --- > arch/powerpc/include/asm/vdso.h | 17 ++--------------- > arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- > arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - > 3 files changed, 8 insertions(+), 18 deletions(-) > > diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h > index 2ff884853f97..11b2ecf49f79 100644 > --- a/arch/powerpc/include/asm/vdso.h > +++ b/arch/powerpc/include/asm/vdso.h > @@ -24,19 +24,7 @@ int vdso_getcpu_init(void); > > #else /* __ASSEMBLY__ */ > > -#ifdef __VDSO64__ > -#define V_FUNCTION_BEGIN(name) \ > - .globl name; \ > - name: \ > - > -#define V_FUNCTION_END(name) \ > - .size name,.-name; > - > -#define V_LOCAL_FUNC(name) (name) > -#endif /* __VDSO64__ */ > - > -#ifdef __VDSO32__ > - > +#if defined(__VDSO32__) || defined (__VDSO64__) > #define V_FUNCTION_BEGIN(name) \ > .globl name; \ > .type name,@function; \ > @@ -46,8 +34,7 @@ int vdso_getcpu_init(void); > .size name,.-name; > > #define V_LOCAL_FUNC(name) (name) > - > -#endif /* __VDSO32__ */ > +#endif /* __VDSO{32|64}__ */ > > #endif /* __ASSEMBLY__ */ > > diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile > index 38c317f25141..7ea3ce537d0a 100644 > --- a/arch/powerpc/kernel/vdso64/Makefile > +++ b/arch/powerpc/kernel/vdso64/Makefile > @@ -32,9 +32,13 @@ $(obj)/%.so: OBJCOPYFLAGS := -S > $(obj)/%.so: $(obj)/%.so.dbg FORCE > $(call if_changed,objcopy) > > +ldflags-y := -shared -soname linux-vdso64.so.1 \ > + $(call ld-option, --eh-frame-hdr) \ > + $(call ld-option, --orphan-handling=warn) -T > + > # actual build commands > -quiet_cmd_vdso64ld = VDSO64L $@ > - cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) > +quiet_cmd_vdso64ld = LD $@ > + cmd_vdso64ld = $(cmd_ld) > > # install commands for the unstripped file > quiet_cmd_vdso_install = INSTALL $@ > diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S > index 4e3a8d4ee614..58c33b704b6a 100644 > --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S > +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S > @@ -11,7 +11,6 @@ OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", "elf64-powerpcle") > OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc") > #endif > OUTPUT_ARCH(powerpc:common64) > -ENTRY(_start) > > SECTIONS > { > -- > 2.28.0.402.g5ffc5be6b7-goog ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker @ 2020-09-02 12:14 ` Michael Ellerman 0 siblings, 0 replies; 34+ messages in thread From: Michael Ellerman @ 2020-09-02 12:14 UTC (permalink / raw) To: Nick Desaulniers, Nicholas Piggin Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, Nick Desaulniers, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev Nick Desaulniers <ndesaulniers@google.com> writes: > 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"). Ouch. Seems make is quite happy to $(call deadbeef, ...) and not print a warning, which I guess is probably a feature. > Painstakingly compared the output between `objdump -a` before and after > this change. Now function symbols have the correct type of FUNC rather > than NONE, and the entry is slightly different (which doesn't matter for > the vdso). Binary size is the same. > > Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") I think I'll just revert that for v5.9 ? cheers > Link: https://lore.kernel.org/lkml/CAKwvOdnn3wxYdJomvnveyD_njwRku3fABWT_bS92duihhywLJQ@mail.gmail.com/ > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> > --- > arch/powerpc/include/asm/vdso.h | 17 ++--------------- > arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- > arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - > 3 files changed, 8 insertions(+), 18 deletions(-) > > diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h > index 2ff884853f97..11b2ecf49f79 100644 > --- a/arch/powerpc/include/asm/vdso.h > +++ b/arch/powerpc/include/asm/vdso.h > @@ -24,19 +24,7 @@ int vdso_getcpu_init(void); > > #else /* __ASSEMBLY__ */ > > -#ifdef __VDSO64__ > -#define V_FUNCTION_BEGIN(name) \ > - .globl name; \ > - name: \ > - > -#define V_FUNCTION_END(name) \ > - .size name,.-name; > - > -#define V_LOCAL_FUNC(name) (name) > -#endif /* __VDSO64__ */ > - > -#ifdef __VDSO32__ > - > +#if defined(__VDSO32__) || defined (__VDSO64__) > #define V_FUNCTION_BEGIN(name) \ > .globl name; \ > .type name,@function; \ > @@ -46,8 +34,7 @@ int vdso_getcpu_init(void); > .size name,.-name; > > #define V_LOCAL_FUNC(name) (name) > - > -#endif /* __VDSO32__ */ > +#endif /* __VDSO{32|64}__ */ > > #endif /* __ASSEMBLY__ */ > > diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile > index 38c317f25141..7ea3ce537d0a 100644 > --- a/arch/powerpc/kernel/vdso64/Makefile > +++ b/arch/powerpc/kernel/vdso64/Makefile > @@ -32,9 +32,13 @@ $(obj)/%.so: OBJCOPYFLAGS := -S > $(obj)/%.so: $(obj)/%.so.dbg FORCE > $(call if_changed,objcopy) > > +ldflags-y := -shared -soname linux-vdso64.so.1 \ > + $(call ld-option, --eh-frame-hdr) \ > + $(call ld-option, --orphan-handling=warn) -T > + > # actual build commands > -quiet_cmd_vdso64ld = VDSO64L $@ > - cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) > +quiet_cmd_vdso64ld = LD $@ > + cmd_vdso64ld = $(cmd_ld) > > # install commands for the unstripped file > quiet_cmd_vdso_install = INSTALL $@ > diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S > index 4e3a8d4ee614..58c33b704b6a 100644 > --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S > +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S > @@ -11,7 +11,6 @@ OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", "elf64-powerpcle") > OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc") > #endif > OUTPUT_ARCH(powerpc:common64) > -ENTRY(_start) > > SECTIONS > { > -- > 2.28.0.402.g5ffc5be6b7-goog ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2020-09-02 12:14 ` Michael Ellerman @ 2020-09-02 17:41 ` Nick Desaulniers -1 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-02 17:41 UTC (permalink / raw) To: Michael Ellerman Cc: Nicholas Piggin, Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, LKML, clang-built-linux, Kees Cook, Fangrui Song On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: > > Nick Desaulniers <ndesaulniers@google.com> writes: > > Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") > > I think I'll just revert that for v5.9 ? SGTM; you'll probably still want these changes with some modifications at some point; vdso32 did have at least one orphaned section, and will be important for hermetic builds. Seeing crashes in supported versions of the tools ties our hands at the moment. -- Thanks, ~Nick Desaulniers ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker @ 2020-09-02 17:41 ` Nick Desaulniers 0 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-02 17:41 UTC (permalink / raw) To: Michael Ellerman Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: > > Nick Desaulniers <ndesaulniers@google.com> writes: > > Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") > > I think I'll just revert that for v5.9 ? SGTM; you'll probably still want these changes with some modifications at some point; vdso32 did have at least one orphaned section, and will be important for hermetic builds. Seeing crashes in supported versions of the tools ties our hands at the moment. -- Thanks, ~Nick Desaulniers ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2020-09-02 17:41 ` Nick Desaulniers (?) @ 2020-09-02 18:02 ` Christophe Leroy 2021-04-22 22:44 ` Nick Desaulniers -1 siblings, 1 reply; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 18:02 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev Le 02/09/2020 à 19:41, Nick Desaulniers a écrit : > On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: >> >> Nick Desaulniers <ndesaulniers@google.com> writes: >>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") >> >> I think I'll just revert that for v5.9 ? > > SGTM; you'll probably still want these changes with some modifications > at some point; vdso32 did have at least one orphaned section, and will > be important for hermetic builds. Seeing crashes in supported > versions of the tools ties our hands at the moment. > Keeping the tool problem aside with binutils 2.26, do you have a way to really link an elf32ppc object when building vdso32 for PPC64 ? Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2020-09-02 18:02 ` Christophe Leroy @ 2021-04-22 22:44 ` Nick Desaulniers 0 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2021-04-22 22:44 UTC (permalink / raw) To: Christophe Leroy Cc: Michael Ellerman, Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev On Wed, Sep 2, 2020 at 11:02 AM Christophe Leroy <christophe.leroy@csgroup.eu> wrote: > > > > Le 02/09/2020 à 19:41, Nick Desaulniers a écrit : > > On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: > >> > >> Nick Desaulniers <ndesaulniers@google.com> writes: > >>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") > >> > >> I think I'll just revert that for v5.9 ? > > > > SGTM; you'll probably still want these changes with some modifications > > at some point; vdso32 did have at least one orphaned section, and will > > be important for hermetic builds. Seeing crashes in supported > > versions of the tools ties our hands at the moment. > > > > Keeping the tool problem aside with binutils 2.26, do you have a way to > really link an elf32ppc object when building vdso32 for PPC64 ? Sorry, I'm doing a bug scrub and found https://github.com/ClangBuiltLinux/linux/issues/774 still open (and my reply to this thread still in Drafts; never sent). With my patches rebased: $ file arch/powerpc/kernel/vdso32/vdso32.so arch/powerpc/kernel/vdso32/vdso32.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, stripped Are you still using 2.26? I'm not able to repro Nathan's reported issue from https://lore.kernel.org/lkml/20200902052123.GA2687902@ubuntu-n2-xlarge-x86/, so I'm curious if I should resend the rebased patches as v2? -- Thanks, ~Nick Desaulniers ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker @ 2021-04-22 22:44 ` Nick Desaulniers 0 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2021-04-22 22:44 UTC (permalink / raw) To: Christophe Leroy Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev On Wed, Sep 2, 2020 at 11:02 AM Christophe Leroy <christophe.leroy@csgroup.eu> wrote: > > > > Le 02/09/2020 à 19:41, Nick Desaulniers a écrit : > > On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: > >> > >> Nick Desaulniers <ndesaulniers@google.com> writes: > >>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") > >> > >> I think I'll just revert that for v5.9 ? > > > > SGTM; you'll probably still want these changes with some modifications > > at some point; vdso32 did have at least one orphaned section, and will > > be important for hermetic builds. Seeing crashes in supported > > versions of the tools ties our hands at the moment. > > > > Keeping the tool problem aside with binutils 2.26, do you have a way to > really link an elf32ppc object when building vdso32 for PPC64 ? Sorry, I'm doing a bug scrub and found https://github.com/ClangBuiltLinux/linux/issues/774 still open (and my reply to this thread still in Drafts; never sent). With my patches rebased: $ file arch/powerpc/kernel/vdso32/vdso32.so arch/powerpc/kernel/vdso32/vdso32.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, stripped Are you still using 2.26? I'm not able to repro Nathan's reported issue from https://lore.kernel.org/lkml/20200902052123.GA2687902@ubuntu-n2-xlarge-x86/, so I'm curious if I should resend the rebased patches as v2? -- Thanks, ~Nick Desaulniers ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2021-04-22 22:44 ` Nick Desaulniers @ 2021-04-23 7:40 ` Christophe Leroy -1 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2021-04-23 7:40 UTC (permalink / raw) To: Nick Desaulniers Cc: Michael Ellerman, Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev Le 23/04/2021 à 00:44, Nick Desaulniers a écrit : > On Wed, Sep 2, 2020 at 11:02 AM Christophe Leroy > <christophe.leroy@csgroup.eu> wrote: >> >> >> >> Le 02/09/2020 à 19:41, Nick Desaulniers a écrit : >>> On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: >>>> >>>> Nick Desaulniers <ndesaulniers@google.com> writes: >>>>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") >>>> >>>> I think I'll just revert that for v5.9 ? >>> >>> SGTM; you'll probably still want these changes with some modifications >>> at some point; vdso32 did have at least one orphaned section, and will >>> be important for hermetic builds. Seeing crashes in supported >>> versions of the tools ties our hands at the moment. >>> >> >> Keeping the tool problem aside with binutils 2.26, do you have a way to >> really link an elf32ppc object when building vdso32 for PPC64 ? > > Sorry, I'm doing a bug scrub and found > https://github.com/ClangBuiltLinux/linux/issues/774 still open (and my > reply to this thread still in Drafts; never sent). With my patches > rebased: > $ file arch/powerpc/kernel/vdso32/vdso32.so > arch/powerpc/kernel/vdso32/vdso32.so: ELF 32-bit MSB shared object, > PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, stripped > > Are you still using 2.26? Yes, our production kernels and applications are built with gcc 5.5 and binutils 2.26 > > I'm not able to repro Nathan's reported issue from > https://lore.kernel.org/lkml/20200902052123.GA2687902@ubuntu-n2-xlarge-x86/, > so I'm curious if I should resend the rebased patches as v2? > I can't remember what was all this discussion about. I gave a try to your rebased patches. Still an issue with binutils 2.26: VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg ppc-linux-ld: warning: orphan section `.rela.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. ppc-linux-ld: warning: orphan section `.rela.plt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. ppc-linux-ld: warning: orphan section `.glink' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.glink'. ppc-linux-ld: warning: orphan section `.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.iplt'. ppc-linux-ld: warning: orphan section `.rela.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. ppc-linux-ld: warning: orphan section `.rela.text' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. /bin/sh: line 1: 7850 Segmentation fault (core dumped) ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 --eh-frame-hdr --orphan-handling=warn -T arch/powerpc/kernel/vdso32/vdso32.lds arch/powerpc/kernel/vdso32/sigtramp.o arch/powerpc/kernel/vdso32/gettimeofday.o arch/powerpc/kernel/vdso32/datapage.o arch/powerpc/kernel/vdso32/cacheflush.o arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o arch/powerpc/kernel/vdso32/vgettimeofday.o -o arch/powerpc/kernel/vdso32/vdso32.so.dbg make[2]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 make[2]: *** Deleting file `arch/powerpc/kernel/vdso32/vdso32.so.dbg' With gcc 10.1 and binutils 2.34 I get: PPC32 build: VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: warning: orphan section `.rela.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.plt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.glink' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.glink' powerpc64-linux-ld: warning: orphan section `.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.iplt' powerpc64-linux-ld: warning: orphan section `.rela.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.text' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' PPC64 build: VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: warning: orphan section `.rela.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.plt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.glink' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.glink' powerpc64-linux-ld: warning: orphan section `.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.iplt' powerpc64-linux-ld: warning: orphan section `.rela.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.text' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' VDSOSYM include/generated/vdso32-offsets.h VDSO64L arch/powerpc/kernel/vdso64/vdso64.so.dbg powerpc64-linux-ld: warning: orphan section `.iplt' from `linker stubs' being placed in section `.iplt' powerpc64-linux-ld: warning: orphan section `.rela.iplt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.plt' from `linker stubs' being placed in section `.plt' powerpc64-linux-ld: warning: orphan section `.rela.plt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.got' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.opd' from `linker stubs' being placed in section `.rela.dyn' Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker @ 2021-04-23 7:40 ` Christophe Leroy 0 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2021-04-23 7:40 UTC (permalink / raw) To: Nick Desaulniers Cc: Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev Le 23/04/2021 à 00:44, Nick Desaulniers a écrit : > On Wed, Sep 2, 2020 at 11:02 AM Christophe Leroy > <christophe.leroy@csgroup.eu> wrote: >> >> >> >> Le 02/09/2020 à 19:41, Nick Desaulniers a écrit : >>> On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: >>>> >>>> Nick Desaulniers <ndesaulniers@google.com> writes: >>>>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") >>>> >>>> I think I'll just revert that for v5.9 ? >>> >>> SGTM; you'll probably still want these changes with some modifications >>> at some point; vdso32 did have at least one orphaned section, and will >>> be important for hermetic builds. Seeing crashes in supported >>> versions of the tools ties our hands at the moment. >>> >> >> Keeping the tool problem aside with binutils 2.26, do you have a way to >> really link an elf32ppc object when building vdso32 for PPC64 ? > > Sorry, I'm doing a bug scrub and found > https://github.com/ClangBuiltLinux/linux/issues/774 still open (and my > reply to this thread still in Drafts; never sent). With my patches > rebased: > $ file arch/powerpc/kernel/vdso32/vdso32.so > arch/powerpc/kernel/vdso32/vdso32.so: ELF 32-bit MSB shared object, > PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, stripped > > Are you still using 2.26? Yes, our production kernels and applications are built with gcc 5.5 and binutils 2.26 > > I'm not able to repro Nathan's reported issue from > https://lore.kernel.org/lkml/20200902052123.GA2687902@ubuntu-n2-xlarge-x86/, > so I'm curious if I should resend the rebased patches as v2? > I can't remember what was all this discussion about. I gave a try to your rebased patches. Still an issue with binutils 2.26: VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg ppc-linux-ld: warning: orphan section `.rela.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. ppc-linux-ld: warning: orphan section `.rela.plt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. ppc-linux-ld: warning: orphan section `.glink' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.glink'. ppc-linux-ld: warning: orphan section `.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.iplt'. ppc-linux-ld: warning: orphan section `.rela.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. ppc-linux-ld: warning: orphan section `.rela.text' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn'. /bin/sh: line 1: 7850 Segmentation fault (core dumped) ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 --eh-frame-hdr --orphan-handling=warn -T arch/powerpc/kernel/vdso32/vdso32.lds arch/powerpc/kernel/vdso32/sigtramp.o arch/powerpc/kernel/vdso32/gettimeofday.o arch/powerpc/kernel/vdso32/datapage.o arch/powerpc/kernel/vdso32/cacheflush.o arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o arch/powerpc/kernel/vdso32/vgettimeofday.o -o arch/powerpc/kernel/vdso32/vdso32.so.dbg make[2]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 make[2]: *** Deleting file `arch/powerpc/kernel/vdso32/vdso32.so.dbg' With gcc 10.1 and binutils 2.34 I get: PPC32 build: VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: warning: orphan section `.rela.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.plt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.glink' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.glink' powerpc64-linux-ld: warning: orphan section `.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.iplt' powerpc64-linux-ld: warning: orphan section `.rela.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.text' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' PPC64 build: VDSO32L arch/powerpc/kernel/vdso32/vdso32.so.dbg powerpc64-linux-ld: warning: orphan section `.rela.got' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.plt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.glink' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.glink' powerpc64-linux-ld: warning: orphan section `.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.iplt' powerpc64-linux-ld: warning: orphan section `.rela.iplt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.text' from `arch/powerpc/kernel/vdso32/sigtramp.o' being placed in section `.rela.dyn' VDSOSYM include/generated/vdso32-offsets.h VDSO64L arch/powerpc/kernel/vdso64/vdso64.so.dbg powerpc64-linux-ld: warning: orphan section `.iplt' from `linker stubs' being placed in section `.iplt' powerpc64-linux-ld: warning: orphan section `.rela.iplt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.branch_lt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.plt' from `linker stubs' being placed in section `.plt' powerpc64-linux-ld: warning: orphan section `.rela.plt' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.got' from `linker stubs' being placed in section `.rela.dyn' powerpc64-linux-ld: warning: orphan section `.rela.opd' from `linker stubs' being placed in section `.rela.dyn' Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2021-04-22 22:44 ` Nick Desaulniers @ 2021-04-23 17:18 ` Christophe Leroy -1 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2021-04-23 17:18 UTC (permalink / raw) To: Nick Desaulniers Cc: Michael Ellerman, Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev Le 23/04/2021 à 00:44, Nick Desaulniers a écrit : > On Wed, Sep 2, 2020 at 11:02 AM Christophe Leroy > <christophe.leroy@csgroup.eu> wrote: >> >> >> >> Le 02/09/2020 à 19:41, Nick Desaulniers a écrit : >>> On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: >>>> >>>> Nick Desaulniers <ndesaulniers@google.com> writes: >>>>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") >>>> >>>> I think I'll just revert that for v5.9 ? >>> >>> SGTM; you'll probably still want these changes with some modifications >>> at some point; vdso32 did have at least one orphaned section, and will >>> be important for hermetic builds. Seeing crashes in supported >>> versions of the tools ties our hands at the moment. >>> >> >> Keeping the tool problem aside with binutils 2.26, do you have a way to >> really link an elf32ppc object when building vdso32 for PPC64 ? > > Sorry, I'm doing a bug scrub and found > https://github.com/ClangBuiltLinux/linux/issues/774 still open (and my > reply to this thread still in Drafts; never sent). With my patches > rebased: > $ file arch/powerpc/kernel/vdso32/vdso32.so > arch/powerpc/kernel/vdso32/vdso32.so: ELF 32-bit MSB shared object, > PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, stripped > > Are you still using 2.26? > > I'm not able to repro Nathan's reported issue from > https://lore.kernel.org/lkml/20200902052123.GA2687902@ubuntu-n2-xlarge-x86/, > so I'm curious if I should resend the rebased patches as v2? One comment on your rebased patch: > diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h > index 8542e9bbeead..0bd06ec06aaa 100644 > --- a/arch/powerpc/include/asm/vdso.h > +++ b/arch/powerpc/include/asm/vdso.h > @@ -25,19 +25,7 @@ int vdso_getcpu_init(void); > > #else /* __ASSEMBLY__ */ > > -#ifdef __VDSO64__ > -#define V_FUNCTION_BEGIN(name) \ > - .globl name; \ > - name: \ > - > -#define V_FUNCTION_END(name) \ > - .size name,.-name; > - > -#define V_LOCAL_FUNC(name) (name) > -#endif /* __VDSO64__ */ > - > -#ifdef __VDSO32__ > - > +#if defined(__VDSO32__) || defined (__VDSO64__) You always have either __VDSO32__ or __VDSO64__ so this #if is pointless > #define V_FUNCTION_BEGIN(name) \ > .globl name; \ > .type name,@function; \ > @@ -47,8 +35,7 @@ int vdso_getcpu_init(void); > .size name,.-name; > > #define V_LOCAL_FUNC(name) (name) > - > -#endif /* __VDSO32__ */ > +#endif /* __VDSO{32|64}__ */ > > #endif /* __ASSEMBLY__ */ > Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker @ 2021-04-23 17:18 ` Christophe Leroy 0 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2021-04-23 17:18 UTC (permalink / raw) To: Nick Desaulniers Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, LKML, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev Le 23/04/2021 à 00:44, Nick Desaulniers a écrit : > On Wed, Sep 2, 2020 at 11:02 AM Christophe Leroy > <christophe.leroy@csgroup.eu> wrote: >> >> >> >> Le 02/09/2020 à 19:41, Nick Desaulniers a écrit : >>> On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe@ellerman.id.au> wrote: >>>> >>>> Nick Desaulniers <ndesaulniers@google.com> writes: >>>>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections") >>>> >>>> I think I'll just revert that for v5.9 ? >>> >>> SGTM; you'll probably still want these changes with some modifications >>> at some point; vdso32 did have at least one orphaned section, and will >>> be important for hermetic builds. Seeing crashes in supported >>> versions of the tools ties our hands at the moment. >>> >> >> Keeping the tool problem aside with binutils 2.26, do you have a way to >> really link an elf32ppc object when building vdso32 for PPC64 ? > > Sorry, I'm doing a bug scrub and found > https://github.com/ClangBuiltLinux/linux/issues/774 still open (and my > reply to this thread still in Drafts; never sent). With my patches > rebased: > $ file arch/powerpc/kernel/vdso32/vdso32.so > arch/powerpc/kernel/vdso32/vdso32.so: ELF 32-bit MSB shared object, > PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, stripped > > Are you still using 2.26? > > I'm not able to repro Nathan's reported issue from > https://lore.kernel.org/lkml/20200902052123.GA2687902@ubuntu-n2-xlarge-x86/, > so I'm curious if I should resend the rebased patches as v2? One comment on your rebased patch: > diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h > index 8542e9bbeead..0bd06ec06aaa 100644 > --- a/arch/powerpc/include/asm/vdso.h > +++ b/arch/powerpc/include/asm/vdso.h > @@ -25,19 +25,7 @@ int vdso_getcpu_init(void); > > #else /* __ASSEMBLY__ */ > > -#ifdef __VDSO64__ > -#define V_FUNCTION_BEGIN(name) \ > - .globl name; \ > - name: \ > - > -#define V_FUNCTION_END(name) \ > - .size name,.-name; > - > -#define V_LOCAL_FUNC(name) (name) > -#endif /* __VDSO64__ */ > - > -#ifdef __VDSO32__ > - > +#if defined(__VDSO32__) || defined (__VDSO64__) You always have either __VDSO32__ or __VDSO64__ so this #if is pointless > #define V_FUNCTION_BEGIN(name) \ > .globl name; \ > .type name,@function; \ > @@ -47,8 +35,7 @@ int vdso_getcpu_init(void); > .size name,.-name; > > #define V_LOCAL_FUNC(name) (name) > - > -#endif /* __VDSO32__ */ > +#endif /* __VDSO{32|64}__ */ > > #endif /* __ASSEMBLY__ */ > Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/2] powerpc/vdso64: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers (?) (?) @ 2022-03-02 16:48 ` Christophe Leroy -1 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2022-03-02 16:48 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman, Nicholas Piggin Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev Le 02/09/2020 à 00:25, Nick Desaulniers a écrit : > 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"). > > Painstakingly compared the output between `objdump -a` before and after > this change. Now function symbols have the correct type of FUNC rather > than NONE, and the entry is slightly different (which doesn't matter for > the vdso). Binary size is the same. > > 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> Is this change still necessary ? If so please rebase as we have changed the structure of VDSO source files (Only one directory common to 32 and 64). Christophe > --- > arch/powerpc/include/asm/vdso.h | 17 ++--------------- > arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- > arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - > 3 files changed, 8 insertions(+), 18 deletions(-) > > diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h > index 2ff884853f97..11b2ecf49f79 100644 > --- a/arch/powerpc/include/asm/vdso.h > +++ b/arch/powerpc/include/asm/vdso.h > @@ -24,19 +24,7 @@ int vdso_getcpu_init(void); > > #else /* __ASSEMBLY__ */ > > -#ifdef __VDSO64__ > -#define V_FUNCTION_BEGIN(name) \ > - .globl name; \ > - name: \ > - > -#define V_FUNCTION_END(name) \ > - .size name,.-name; > - > -#define V_LOCAL_FUNC(name) (name) > -#endif /* __VDSO64__ */ > - > -#ifdef __VDSO32__ > - > +#if defined(__VDSO32__) || defined (__VDSO64__) > #define V_FUNCTION_BEGIN(name) \ > .globl name; \ > .type name,@function; \ > @@ -46,8 +34,7 @@ int vdso_getcpu_init(void); > .size name,.-name; > > #define V_LOCAL_FUNC(name) (name) > - > -#endif /* __VDSO32__ */ > +#endif /* __VDSO{32|64}__ */ > > #endif /* __ASSEMBLY__ */ > > diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile > index 38c317f25141..7ea3ce537d0a 100644 > --- a/arch/powerpc/kernel/vdso64/Makefile > +++ b/arch/powerpc/kernel/vdso64/Makefile > @@ -32,9 +32,13 @@ $(obj)/%.so: OBJCOPYFLAGS := -S > $(obj)/%.so: $(obj)/%.so.dbg FORCE > $(call if_changed,objcopy) > > +ldflags-y := -shared -soname linux-vdso64.so.1 \ > + $(call ld-option, --eh-frame-hdr) \ > + $(call ld-option, --orphan-handling=warn) -T > + > # actual build commands > -quiet_cmd_vdso64ld = VDSO64L $@ > - cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) $(call cc-ldoption, -Wl$(comma)--orphan-handling=warn) > +quiet_cmd_vdso64ld = LD $@ > + cmd_vdso64ld = $(cmd_ld) > > # install commands for the unstripped file > quiet_cmd_vdso_install = INSTALL $@ > diff --git a/arch/powerpc/kernel/vdso64/vdso64.lds.S b/arch/powerpc/kernel/vdso64/vdso64.lds.S > index 4e3a8d4ee614..58c33b704b6a 100644 > --- a/arch/powerpc/kernel/vdso64/vdso64.lds.S > +++ b/arch/powerpc/kernel/vdso64/vdso64.lds.S > @@ -11,7 +11,6 @@ OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", "elf64-powerpcle") > OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc", "elf64-powerpc") > #endif > OUTPUT_ARCH(powerpc:common64) > -ENTRY(_start) > > SECTIONS > { ^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-01 22:25 ` Nick Desaulniers -1 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-01 22:25 UTC (permalink / raw) To: Michael Ellerman, Nicholas Piggin Cc: Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song, Nick Desaulniers 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. 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 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-01 22:25 ` Nick Desaulniers 0 siblings, 0 replies; 34+ messages in thread From: Nick Desaulniers @ 2020-09-01 22:25 UTC (permalink / raw) To: Michael Ellerman, Nicholas Piggin Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, Nick Desaulniers, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev 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. 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 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-02 2:58 ` Kees Cook -1 siblings, 0 replies; 34+ messages in thread From: Kees Cook @ 2020-09-02 2:58 UTC (permalink / raw) To: Nick Desaulniers Cc: Michael Ellerman, Nicholas Piggin, Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Fangrui Song 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 ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-02 2:58 ` Kees Cook 0 siblings, 0 replies; 34+ messages in thread From: Kees Cook @ 2020-09-02 2:58 UTC (permalink / raw) To: Nick Desaulniers Cc: Christophe Leroy, Joe Lawrence, Fangrui Song, linux-kernel, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev 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 ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-02 6:46 ` Christophe Leroy -1 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 6:46 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman, Nicholas Piggin Cc: Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song On 09/01/2020 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. ld crashes: LD arch/powerpc/kernel/vdso32/vdso32.so.dbg /bin/sh: line 1: 23780 Segmentation fault (core dumped) ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 --eh-frame-hdr --orphan-handling=warn -T arch/powerpc/kernel/vdso32/vdso32.lds arch/powerpc/kernel/vdso32/sigtramp.o arch/powerpc/kernel/vdso32/gettimeofday.o arch/powerpc/kernel/vdso32/datapage.o arch/powerpc/kernel/vdso32/cacheflush.o arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o arch/powerpc/kernel/vdso32/vdso32.so.dbg make[4]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 [root@localhost linux-powerpc]# ppc-linux-ld --version GNU ld (GNU Binutils) 2.26.20160125 Christophe > > 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. > > 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*) > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-02 6:46 ` Christophe Leroy 0 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 6:46 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman, Nicholas Piggin Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev On 09/01/2020 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. ld crashes: LD arch/powerpc/kernel/vdso32/vdso32.so.dbg /bin/sh: line 1: 23780 Segmentation fault (core dumped) ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 --eh-frame-hdr --orphan-handling=warn -T arch/powerpc/kernel/vdso32/vdso32.lds arch/powerpc/kernel/vdso32/sigtramp.o arch/powerpc/kernel/vdso32/gettimeofday.o arch/powerpc/kernel/vdso32/datapage.o arch/powerpc/kernel/vdso32/cacheflush.o arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o arch/powerpc/kernel/vdso32/vdso32.so.dbg make[4]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 [root@localhost linux-powerpc]# ppc-linux-ld --version GNU ld (GNU Binutils) 2.26.20160125 Christophe > > 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. > > 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*) > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-02 6:46 ` Christophe Leroy @ 2020-09-02 14:14 ` Segher Boessenkool -1 siblings, 0 replies; 34+ messages in thread From: Segher Boessenkool @ 2020-09-02 14:14 UTC (permalink / raw) To: Christophe Leroy Cc: Nick Desaulniers, Michael Ellerman, Nicholas Piggin, Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev Hi! On Wed, Sep 02, 2020 at 06:46:45AM +0000, Christophe Leroy wrote: > ld crashes: > > LD arch/powerpc/kernel/vdso32/vdso32.so.dbg > /bin/sh: line 1: 23780 Segmentation fault (core dumped) > ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 > --eh-frame-hdr --orphan-handling=warn -T > arch/powerpc/kernel/vdso32/vdso32.lds > arch/powerpc/kernel/vdso32/sigtramp.o > arch/powerpc/kernel/vdso32/gettimeofday.o > arch/powerpc/kernel/vdso32/datapage.o > arch/powerpc/kernel/vdso32/cacheflush.o > arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o > arch/powerpc/kernel/vdso32/vdso32.so.dbg > make[4]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 > > > [root@localhost linux-powerpc]# ppc-linux-ld --version > GNU ld (GNU Binutils) 2.26.20160125 [ Don't build as root :-P ] Try with a newer ld? If it still happens with current versions, please open a bug report? https://sourceware.org/bugzilla Segher ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-02 14:14 ` Segher Boessenkool 0 siblings, 0 replies; 34+ messages in thread From: Segher Boessenkool @ 2020-09-02 14:14 UTC (permalink / raw) To: Christophe Leroy Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, Nick Desaulniers, linux-kernel, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev Hi! On Wed, Sep 02, 2020 at 06:46:45AM +0000, Christophe Leroy wrote: > ld crashes: > > LD arch/powerpc/kernel/vdso32/vdso32.so.dbg > /bin/sh: line 1: 23780 Segmentation fault (core dumped) > ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 > --eh-frame-hdr --orphan-handling=warn -T > arch/powerpc/kernel/vdso32/vdso32.lds > arch/powerpc/kernel/vdso32/sigtramp.o > arch/powerpc/kernel/vdso32/gettimeofday.o > arch/powerpc/kernel/vdso32/datapage.o > arch/powerpc/kernel/vdso32/cacheflush.o > arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o > arch/powerpc/kernel/vdso32/vdso32.so.dbg > make[4]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 > > > [root@localhost linux-powerpc]# ppc-linux-ld --version > GNU ld (GNU Binutils) 2.26.20160125 [ Don't build as root :-P ] Try with a newer ld? If it still happens with current versions, please open a bug report? https://sourceware.org/bugzilla Segher ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-02 14:14 ` Segher Boessenkool @ 2020-09-02 15:43 ` Christophe Leroy -1 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 15:43 UTC (permalink / raw) To: Segher Boessenkool Cc: Nick Desaulniers, Michael Ellerman, Nicholas Piggin, Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev Hi, Le 02/09/2020 à 16:14, Segher Boessenkool a écrit : > Hi! > > On Wed, Sep 02, 2020 at 06:46:45AM +0000, Christophe Leroy wrote: >> ld crashes: >> >> LD arch/powerpc/kernel/vdso32/vdso32.so.dbg >> /bin/sh: line 1: 23780 Segmentation fault (core dumped) >> ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 >> --eh-frame-hdr --orphan-handling=warn -T >> arch/powerpc/kernel/vdso32/vdso32.lds >> arch/powerpc/kernel/vdso32/sigtramp.o >> arch/powerpc/kernel/vdso32/gettimeofday.o >> arch/powerpc/kernel/vdso32/datapage.o >> arch/powerpc/kernel/vdso32/cacheflush.o >> arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o >> arch/powerpc/kernel/vdso32/vdso32.so.dbg >> make[4]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 >> >> >> [root@localhost linux-powerpc]# ppc-linux-ld --version >> GNU ld (GNU Binutils) 2.26.20160125 > > [ Don't build as root :-P ] > > Try with a newer ld? If it still happens with current versions, please > open a bug report? https://sourceware.org/bugzilla Yes it works with 2.30 and 2.34 But minimum for building kernel is supposed to be 2.23 Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-02 15:43 ` Christophe Leroy 0 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 15:43 UTC (permalink / raw) To: Segher Boessenkool Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, Nick Desaulniers, linux-kernel, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev Hi, Le 02/09/2020 à 16:14, Segher Boessenkool a écrit : > Hi! > > On Wed, Sep 02, 2020 at 06:46:45AM +0000, Christophe Leroy wrote: >> ld crashes: >> >> LD arch/powerpc/kernel/vdso32/vdso32.so.dbg >> /bin/sh: line 1: 23780 Segmentation fault (core dumped) >> ppc-linux-ld -EB -m elf32ppc -shared -soname linux-vdso32.so.1 >> --eh-frame-hdr --orphan-handling=warn -T >> arch/powerpc/kernel/vdso32/vdso32.lds >> arch/powerpc/kernel/vdso32/sigtramp.o >> arch/powerpc/kernel/vdso32/gettimeofday.o >> arch/powerpc/kernel/vdso32/datapage.o >> arch/powerpc/kernel/vdso32/cacheflush.o >> arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o >> arch/powerpc/kernel/vdso32/vdso32.so.dbg >> make[4]: *** [arch/powerpc/kernel/vdso32/vdso32.so.dbg] Error 139 >> >> >> [root@localhost linux-powerpc]# ppc-linux-ld --version >> GNU ld (GNU Binutils) 2.26.20160125 > > [ Don't build as root :-P ] > > Try with a newer ld? If it still happens with current versions, please > open a bug report? https://sourceware.org/bugzilla Yes it works with 2.30 and 2.34 But minimum for building kernel is supposed to be 2.23 Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-02 15:43 ` Christophe Leroy @ 2020-09-02 16:57 ` Segher Boessenkool -1 siblings, 0 replies; 34+ messages in thread From: Segher Boessenkool @ 2020-09-02 16:57 UTC (permalink / raw) To: Christophe Leroy Cc: Nick Desaulniers, Michael Ellerman, Nicholas Piggin, Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev On Wed, Sep 02, 2020 at 05:43:03PM +0200, Christophe Leroy wrote: > >Try with a newer ld? If it still happens with current versions, please > >open a bug report? https://sourceware.org/bugzilla > > Yes it works with 2.30 and 2.34 Ah okay, I missed this part. > But minimum for building kernel is supposed to be 2.23 Sure. Tthat could be upgraded to 2.24 -- you should use a binutils at least as new as your GCC, and that requires 4.9 now -- but that probably doesn't help you here). Segher ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-02 16:57 ` Segher Boessenkool 0 siblings, 0 replies; 34+ messages in thread From: Segher Boessenkool @ 2020-09-02 16:57 UTC (permalink / raw) To: Christophe Leroy Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, Nick Desaulniers, linux-kernel, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev On Wed, Sep 02, 2020 at 05:43:03PM +0200, Christophe Leroy wrote: > >Try with a newer ld? If it still happens with current versions, please > >open a bug report? https://sourceware.org/bugzilla > > Yes it works with 2.30 and 2.34 Ah okay, I missed this part. > But minimum for building kernel is supposed to be 2.23 Sure. Tthat could be upgraded to 2.24 -- you should use a binutils at least as new as your GCC, and that requires 4.9 now -- but that probably doesn't help you here). Segher ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-02 7:56 ` Christophe Leroy -1 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 7:56 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman, Nicholas Piggin Cc: Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song 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*) > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-02 7:56 ` Christophe Leroy 0 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 7:56 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman, Nicholas Piggin Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev 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*) > ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-02 10:16 ` Christophe Leroy -1 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 10:16 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman, Nicholas Piggin Cc: Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song 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 Finally I spotted it I think: make arch/powerpc/kernel/vdso32/ V=1 powerpc64-linux-ld -EB -m elf64ppc -shared -soname linux-vdso32.so.1 --eh-frame-hdr --orphan-handling=warn -T arch/powerpc/kernel/vdso32/vdso32.lds arch/powerpc/kernel/vdso32/sigtramp.o arch/powerpc/kernel/vdso32/gettimeofday.o arch/powerpc/kernel/vdso32/datapage.o arch/powerpc/kernel/vdso32/cacheflush.o arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o arch/powerpc/kernel/vdso32/vdso32.so.dbg If I do the same manually but with -m elf32ppc instead of -m elf64ppc, there is no failure. Adding -m elf32ppc to ldflags-y also works, allthough I don't like too much having "-m elf64ppc -m elf32ppc" on the line. Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/2] powerpc/vdso32: link vdso64 with linker @ 2020-09-02 10:16 ` Christophe Leroy 0 siblings, 0 replies; 34+ messages in thread From: Christophe Leroy @ 2020-09-02 10:16 UTC (permalink / raw) To: Nick Desaulniers, Michael Ellerman, Nicholas Piggin Cc: Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, clang-built-linux, Paul Mackerras, linuxppc-dev 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 Finally I spotted it I think: make arch/powerpc/kernel/vdso32/ V=1 powerpc64-linux-ld -EB -m elf64ppc -shared -soname linux-vdso32.so.1 --eh-frame-hdr --orphan-handling=warn -T arch/powerpc/kernel/vdso32/vdso32.lds arch/powerpc/kernel/vdso32/sigtramp.o arch/powerpc/kernel/vdso32/gettimeofday.o arch/powerpc/kernel/vdso32/datapage.o arch/powerpc/kernel/vdso32/cacheflush.o arch/powerpc/kernel/vdso32/note.o arch/powerpc/kernel/vdso32/getcpu.o -o arch/powerpc/kernel/vdso32/vdso32.so.dbg If I do the same manually but with -m elf32ppc instead of -m elf64ppc, there is no failure. Adding -m elf32ppc to ldflags-y also works, allthough I don't like too much having "-m elf64ppc -m elf32ppc" on the line. Christophe ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 0/2] link vdso with linker 2020-09-01 22:25 ` Nick Desaulniers @ 2020-09-02 5:21 ` Nathan Chancellor -1 siblings, 0 replies; 34+ messages in thread From: Nathan Chancellor @ 2020-09-02 5:21 UTC (permalink / raw) To: Nick Desaulniers Cc: Michael Ellerman, Nicholas Piggin, Benjamin Herrenschmidt, Paul Mackerras, Joe Lawrence, Christophe Leroy, linuxppc-dev, linux-kernel, clang-built-linux, Kees Cook, Fangrui Song On Tue, Sep 01, 2020 at 03:25:21PM -0700, Nick Desaulniers wrote: > Kees Cook is working on series that adds --orphan-section=warn to arm, > arm64, and x86. I noticed that ppc vdso were still using cc-ldoption > for these which I removed. It seems this results in that flag being > silently dropped. > > I'm very confident with the first patch, but the second needs closer > review around the error mentioned below the fold related to the .got > section. > > Nick Desaulniers (2): > powerpc/vdso64: link vdso64 with linker > powerpc/vdso32: link vdso64 with linker > > arch/powerpc/include/asm/vdso.h | 17 ++--------------- > arch/powerpc/kernel/vdso32/Makefile | 7 +++++-- > arch/powerpc/kernel/vdso32/vdso32.lds.S | 3 ++- > arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- > arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - > 5 files changed, 15 insertions(+), 21 deletions(-) > > -- > 2.28.0.402.g5ffc5be6b7-goog > ppc44x_defconfig and powernv_defconfig start failing with this series when LD=ld.lld is used. $ make -skj"$(nproc)" ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- LLVM=1 O=out/ppc32 distclean ppc44x_defconfig uImage ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_gettimeofday) ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_clock_gettime) ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_clock_getres) ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_time) ... $ make -skj"$(nproc)" ARCH=powerpc CROSS_COMPILE=powerpc64le-linux-gnu- LLVM=1 O=out/ppc64le distclean powernv_defconfig zImage.epapr ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_gettimeofday) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_clock_gettime) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_clock_getres) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_time) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/cacheflush.o:(__kernel_sync_dicache) ... We need Fangrui's patch to fix ppc44x_defconfig: https://lore.kernel.org/lkml/20200205005054.k72fuikf6rwrgfe4@google.com/ That exact same fix is needed in arch/powerpc/kernel/vdso64/datapage.S to fix powernv_defconfig. Cheers, Nathan ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 0/2] link vdso with linker @ 2020-09-02 5:21 ` Nathan Chancellor 0 siblings, 0 replies; 34+ messages in thread From: Nathan Chancellor @ 2020-09-02 5:21 UTC (permalink / raw) To: Nick Desaulniers Cc: Christophe Leroy, Joe Lawrence, Kees Cook, Fangrui Song, linux-kernel, Nicholas Piggin, clang-built-linux, Paul Mackerras, linuxppc-dev On Tue, Sep 01, 2020 at 03:25:21PM -0700, Nick Desaulniers wrote: > Kees Cook is working on series that adds --orphan-section=warn to arm, > arm64, and x86. I noticed that ppc vdso were still using cc-ldoption > for these which I removed. It seems this results in that flag being > silently dropped. > > I'm very confident with the first patch, but the second needs closer > review around the error mentioned below the fold related to the .got > section. > > Nick Desaulniers (2): > powerpc/vdso64: link vdso64 with linker > powerpc/vdso32: link vdso64 with linker > > arch/powerpc/include/asm/vdso.h | 17 ++--------------- > arch/powerpc/kernel/vdso32/Makefile | 7 +++++-- > arch/powerpc/kernel/vdso32/vdso32.lds.S | 3 ++- > arch/powerpc/kernel/vdso64/Makefile | 8 ++++++-- > arch/powerpc/kernel/vdso64/vdso64.lds.S | 1 - > 5 files changed, 15 insertions(+), 21 deletions(-) > > -- > 2.28.0.402.g5ffc5be6b7-goog > ppc44x_defconfig and powernv_defconfig start failing with this series when LD=ld.lld is used. $ make -skj"$(nproc)" ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- LLVM=1 O=out/ppc32 distclean ppc44x_defconfig uImage ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_gettimeofday) ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_clock_gettime) ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_clock_getres) ld.lld: error: relocation R_PPC_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso32/datapage.o >>> referenced by arch/powerpc/kernel/vdso32/gettimeofday.o:(__kernel_time) ... $ make -skj"$(nproc)" ARCH=powerpc CROSS_COMPILE=powerpc64le-linux-gnu- LLVM=1 O=out/ppc64le distclean powernv_defconfig zImage.epapr ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_gettimeofday) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_clock_gettime) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_clock_getres) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/gettimeofday.o:(__kernel_time) ld.lld: error: relocation R_PPC64_REL16_LO cannot be used against symbol __kernel_datapage_offset; recompile with -fPIC >>> defined in arch/powerpc/kernel/vdso64/datapage.o >>> referenced by arch/powerpc/kernel/vdso64/cacheflush.o:(__kernel_sync_dicache) ... We need Fangrui's patch to fix ppc44x_defconfig: https://lore.kernel.org/lkml/20200205005054.k72fuikf6rwrgfe4@google.com/ That exact same fix is needed in arch/powerpc/kernel/vdso64/datapage.S to fix powernv_defconfig. Cheers, Nathan ^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2022-03-02 16:48 UTC | newest] Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 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 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
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.