Message ID | 20221108171324.3377226-1-nathan@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Palmer Dabbelt |
Headers | show |
Series | RISC-V: vdso: Do not add missing symbols to version section in linker script | expand |
Context | Check | Description |
---|---|---|
conchuod/patch_count | success | Link |
conchuod/cover_letter | success | Single patches do not need cover letters |
conchuod/tree_selection | success | Guessed tree name to be for-next |
conchuod/fixes_present | success | Fixes tag not required for -next series |
conchuod/verify_signedoff | success | Signed-off-by tag matches author and committer |
conchuod/kdoc | success | Errors and warnings before: 0 this patch: 0 |
conchuod/module_param | success | Was 0 now: 0 |
conchuod/build_rv32_defconfig | success | Build OK |
conchuod/build_warn_rv64 | success | Errors and warnings before: 0 this patch: 0 |
conchuod/dtb_warn_rv64 | success | Errors and warnings before: 0 this patch: 0 |
conchuod/header_inline | success | No static functions without inline keyword in header files |
conchuod/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 20 lines checked |
conchuod/source_inline | success | Was 0 now: 0 |
conchuod/build_rv64_nommu_k210_defconfig | success | Build OK |
conchuod/verify_fixes | success | No Fixes tag |
conchuod/build_rv64_nommu_virt_defconfig | success | Build OK |
On Tue, Nov 08, 2022 at 10:13:23AM -0700, Nathan Chancellor wrote: > Recently, ld.lld moved from '--undefined-version' to > '--no-undefined-version' as the default, which breaks the compat vDSO > build: > > ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_gettimeofday' failed: symbol not defined > ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_gettime' failed: symbol not defined > ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_getres' failed: symbol not defined > > These symbols are not present in the compat vDSO or the regular vDSO for > 32-bit but they are unconditionally included in the version section of > the linker script, which is prohibited with '--no-undefined-version'. > > Fix this issue by only including the symbols that are actually exported > in the version section of the linker script. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1756 Fixed the build for me on 99fe3d266108 ("[mlir][sparse] 3-dimensional sparse tensor insertion test") Tested-by: Conor Dooley <conor.dooley@microchip.com> Thanks! > Signed-off-by: Nathan Chancellor <nathan@kernel.org> > --- > arch/riscv/kernel/vdso/Makefile | 3 +++ > arch/riscv/kernel/vdso/vdso.lds.S | 2 ++ > 2 files changed, 5 insertions(+) > > diff --git a/arch/riscv/kernel/vdso/Makefile b/arch/riscv/kernel/vdso/Makefile > index f2e065671e4d..82416ebf4cca 100644 > --- a/arch/riscv/kernel/vdso/Makefile > +++ b/arch/riscv/kernel/vdso/Makefile > @@ -28,6 +28,9 @@ obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) > > obj-y += vdso.o > CPPFLAGS_vdso.lds += -P -C -U$(ARCH) > +ifneq ($(filter vgettimeofday, $(vdso-syms)),) > +CPPFLAGS_vdso.lds += -DHAS_VGETTIMEOFDAY > +endif > > # Disable -pg to prevent insert call site > CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os > diff --git a/arch/riscv/kernel/vdso/vdso.lds.S b/arch/riscv/kernel/vdso/vdso.lds.S > index 01d94aae5bf5..150b1a572e61 100644 > --- a/arch/riscv/kernel/vdso/vdso.lds.S > +++ b/arch/riscv/kernel/vdso/vdso.lds.S > @@ -68,9 +68,11 @@ VERSION > LINUX_4.15 { > global: > __vdso_rt_sigreturn; > +#ifdef HAS_VGETTIMEOFDAY > __vdso_gettimeofday; > __vdso_clock_gettime; > __vdso_clock_getres; > +#endif > __vdso_getcpu; > __vdso_flush_icache; > local: *; > > base-commit: f0c4d9fc9cc9462659728d168387191387e903cc > -- > 2.38.1 >
On Tue, 08 Nov 2022 09:13:23 PST (-0800), nathan@kernel.org wrote: > Recently, ld.lld moved from '--undefined-version' to > '--no-undefined-version' as the default, which breaks the compat vDSO > build: > > ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_gettimeofday' failed: symbol not defined > ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_gettime' failed: symbol not defined > ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_getres' failed: symbol not defined > > These symbols are not present in the compat vDSO or the regular vDSO for > 32-bit but they are unconditionally included in the version section of > the linker script, which is prohibited with '--no-undefined-version'. > > Fix this issue by only including the symbols that are actually exported > in the version section of the linker script. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1756 > Signed-off-by: Nathan Chancellor <nathan@kernel.org> > --- > arch/riscv/kernel/vdso/Makefile | 3 +++ > arch/riscv/kernel/vdso/vdso.lds.S | 2 ++ > 2 files changed, 5 insertions(+) > > diff --git a/arch/riscv/kernel/vdso/Makefile b/arch/riscv/kernel/vdso/Makefile > index f2e065671e4d..82416ebf4cca 100644 > --- a/arch/riscv/kernel/vdso/Makefile > +++ b/arch/riscv/kernel/vdso/Makefile > @@ -28,6 +28,9 @@ obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) > > obj-y += vdso.o > CPPFLAGS_vdso.lds += -P -C -U$(ARCH) > +ifneq ($(filter vgettimeofday, $(vdso-syms)),) > +CPPFLAGS_vdso.lds += -DHAS_VGETTIMEOFDAY > +endif > > # Disable -pg to prevent insert call site > CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os > diff --git a/arch/riscv/kernel/vdso/vdso.lds.S b/arch/riscv/kernel/vdso/vdso.lds.S > index 01d94aae5bf5..150b1a572e61 100644 > --- a/arch/riscv/kernel/vdso/vdso.lds.S > +++ b/arch/riscv/kernel/vdso/vdso.lds.S > @@ -68,9 +68,11 @@ VERSION > LINUX_4.15 { > global: > __vdso_rt_sigreturn; > +#ifdef HAS_VGETTIMEOFDAY > __vdso_gettimeofday; > __vdso_clock_gettime; > __vdso_clock_getres; > +#endif > __vdso_getcpu; > __vdso_flush_icache; > local: *; > > base-commit: f0c4d9fc9cc9462659728d168387191387e903cc Thanks, this is on fixes. Something is confusing b4, so I've merged it using the old flow -- hopefully that still works ;)
diff --git a/arch/riscv/kernel/vdso/Makefile b/arch/riscv/kernel/vdso/Makefile index f2e065671e4d..82416ebf4cca 100644 --- a/arch/riscv/kernel/vdso/Makefile +++ b/arch/riscv/kernel/vdso/Makefile @@ -28,6 +28,9 @@ obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) obj-y += vdso.o CPPFLAGS_vdso.lds += -P -C -U$(ARCH) +ifneq ($(filter vgettimeofday, $(vdso-syms)),) +CPPFLAGS_vdso.lds += -DHAS_VGETTIMEOFDAY +endif # Disable -pg to prevent insert call site CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os diff --git a/arch/riscv/kernel/vdso/vdso.lds.S b/arch/riscv/kernel/vdso/vdso.lds.S index 01d94aae5bf5..150b1a572e61 100644 --- a/arch/riscv/kernel/vdso/vdso.lds.S +++ b/arch/riscv/kernel/vdso/vdso.lds.S @@ -68,9 +68,11 @@ VERSION LINUX_4.15 { global: __vdso_rt_sigreturn; +#ifdef HAS_VGETTIMEOFDAY __vdso_gettimeofday; __vdso_clock_gettime; __vdso_clock_getres; +#endif __vdso_getcpu; __vdso_flush_icache; local: *;
Recently, ld.lld moved from '--undefined-version' to '--no-undefined-version' as the default, which breaks the compat vDSO build: ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_gettimeofday' failed: symbol not defined ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_gettime' failed: symbol not defined ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_getres' failed: symbol not defined These symbols are not present in the compat vDSO or the regular vDSO for 32-bit but they are unconditionally included in the version section of the linker script, which is prohibited with '--no-undefined-version'. Fix this issue by only including the symbols that are actually exported in the version section of the linker script. Link: https://github.com/ClangBuiltLinux/linux/issues/1756 Signed-off-by: Nathan Chancellor <nathan@kernel.org> --- arch/riscv/kernel/vdso/Makefile | 3 +++ arch/riscv/kernel/vdso/vdso.lds.S | 2 ++ 2 files changed, 5 insertions(+) base-commit: f0c4d9fc9cc9462659728d168387191387e903cc