* Re: [PATCH v3] riscv: explicitly use symbol offsets for VDSO
2021-08-04 17:32 [PATCH v3] riscv: explicitly use symbol offsets for VDSO Saleem Abdulrasool
@ 2021-08-05 18:44 ` Nathan Chancellor
2021-08-25 4:54 ` Palmer Dabbelt
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Nathan Chancellor @ 2021-08-05 18:44 UTC (permalink / raw)
To: Saleem Abdulrasool, linux-riscv, linux-kernel
Cc: Palmer Dabbelt, Nick Desaulniers, Bill Wendling, clang-built-linux
On 8/4/2021 10:32 AM, 'Saleem Abdulrasool' via Clang Built Linux wrote:
> The current implementation of the `__rt_sigaction` reference computed an
> absolute offset relative to the mapped base of the VDSO. While this can
> be handled in the medlow model, the medany model cannot handle this as
> it is meant to be position independent. The current implementation
> relied on the BFD linker relaxing the PC-relative relocation into an
> absolute relocation as it was a near-zero address allowing it to be
> referenced relative to `zero`.
>
> We now extract the offsets and create a generated header allowing the
> build with LLVM and lld to succeed as we no longer depend on the linker
> rewriting address references near zero. This change was largely
> modelled after the ARM64 target which does something similar.
>
> Signed-off-by: Saleem Abdulrasool <abdulras@google.com>
Tested-by: Nathan Chancellor <nathan@kernel.org>
> ---
> arch/riscv/Makefile | 4 ++++
> arch/riscv/include/asm/vdso.h | 14 ++----------
> arch/riscv/kernel/vdso/Makefile | 25 ++++++++++------------
> arch/riscv/kernel/vdso/gen_vdso_offsets.sh | 5 +++++
> arch/riscv/kernel/vdso/so2s.sh | 6 ------
> 5 files changed, 22 insertions(+), 32 deletions(-)
> create mode 100755 arch/riscv/kernel/vdso/gen_vdso_offsets.sh
> delete mode 100755 arch/riscv/kernel/vdso/so2s.sh
>
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index bc74afdbf31e..e026b2d0a5a4 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -108,6 +108,10 @@ PHONY += vdso_install
> vdso_install:
> $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
>
> +prepare: vdso_prepare
> +vdso_prepare: prepare0
> + $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
> +
> ifneq ($(CONFIG_XIP_KERNEL),y)
> ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
> KBUILD_IMAGE := $(boot)/loader.bin
> diff --git a/arch/riscv/include/asm/vdso.h b/arch/riscv/include/asm/vdso.h
> index 1453a2f563bc..d8d003c2b5a3 100644
> --- a/arch/riscv/include/asm/vdso.h
> +++ b/arch/riscv/include/asm/vdso.h
> @@ -9,25 +9,15 @@
> #define _ASM_RISCV_VDSO_H
>
> #include <linux/types.h>
> +#include <generated/vdso-offsets.h>
>
> #ifndef CONFIG_GENERIC_TIME_VSYSCALL
> struct vdso_data {
> };
> #endif
>
> -/*
> - * The VDSO symbols are mapped into Linux so we can just use regular symbol
> - * addressing to get their offsets in userspace. The symbols are mapped at an
> - * offset of 0, but since the linker must support setting weak undefined
> - * symbols to the absolute address 0 it also happens to support other low
> - * addresses even when the code model suggests those low addresses would not
> - * otherwise be availiable.
> - */
> #define VDSO_SYMBOL(base, name) \
> -({ \
> - extern const char __vdso_##name[]; \
> - (void __user *)((unsigned long)(base) + __vdso_##name); \
> -})
> + (void __user *)((unsigned long)(base) + __vdso_##name##_offset)
>
> asmlinkage long sys_riscv_flush_icache(uintptr_t, uintptr_t, uintptr_t);
>
> diff --git a/arch/riscv/kernel/vdso/Makefile b/arch/riscv/kernel/vdso/Makefile
> index 24d936c147cd..f8cb9144a284 100644
> --- a/arch/riscv/kernel/vdso/Makefile
> +++ b/arch/riscv/kernel/vdso/Makefile
> @@ -23,10 +23,10 @@ ifneq ($(c-gettimeofday-y),)
> endif
>
> # Build rules
> -targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds vdso-syms.S
> +targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds
> obj-vdso := $(addprefix $(obj)/, $(obj-vdso))
>
> -obj-y += vdso.o vdso-syms.o
> +obj-y += vdso.o
> CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
>
> # Disable -pg to prevent insert call site
> @@ -43,20 +43,22 @@ $(obj)/vdso.o: $(obj)/vdso.so
> # link rule for the .so file, .lds has to be first
> $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE
> $(call if_changed,vdsold)
> -LDFLAGS_vdso.so.dbg = -shared -s -soname=linux-vdso.so.1 \
> +LDFLAGS_vdso.so.dbg = -shared -S -soname=linux-vdso.so.1 \
> --build-id=sha1 --hash-style=both --eh-frame-hdr
>
> -# We also create a special relocatable object that should mirror the symbol
> -# table and layout of the linked DSO. With ld --just-symbols we can then
> -# refer to these symbols in the kernel code rather than hand-coded addresses.
> -$(obj)/vdso-syms.S: $(obj)/vdso.so FORCE
> - $(call if_changed,so2s)
> -
> # strip rule for the .so file
> $(obj)/%.so: OBJCOPYFLAGS := -S
> $(obj)/%.so: $(obj)/%.so.dbg FORCE
> $(call if_changed,objcopy)
>
> +# Generate VDSO offsets using helper script
> +gen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh
> +quiet_cmd_vdsosym = VDSOSYM $@
> + cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@
> +
> +include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE
> + $(call if_changed,vdsosym)
> +
> # actual build commands
> # The DSO images are built using a special linker script
> # Make sure only to export the intended __vdso_xxx symbol offsets.
> @@ -65,11 +67,6 @@ quiet_cmd_vdsold = VDSOLD $@
> $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) $@.tmp $@ && \
> rm $@.tmp
>
> -# Extracts symbol offsets from the VDSO, converting them into an assembly file
> -# that contains the same symbols at the same offsets.
> -quiet_cmd_so2s = SO2S $@
> - cmd_so2s = $(NM) -D $< | $(srctree)/$(src)/so2s.sh > $@
> -
> # install commands for the unstripped file
> quiet_cmd_vdso_install = INSTALL $@
> cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@
> diff --git a/arch/riscv/kernel/vdso/gen_vdso_offsets.sh b/arch/riscv/kernel/vdso/gen_vdso_offsets.sh
> new file mode 100755
> index 000000000000..c2e5613f3495
> --- /dev/null
> +++ b/arch/riscv/kernel/vdso/gen_vdso_offsets.sh
> @@ -0,0 +1,5 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0
> +
> +LC_ALL=C
> +sed -n -e 's/^[0]\+\(0[0-9a-fA-F]*\) . \(__vdso_[a-zA-Z0-9_]*\)$/\#define \2_offset\t0x\1/p'
> diff --git a/arch/riscv/kernel/vdso/so2s.sh b/arch/riscv/kernel/vdso/so2s.sh
> deleted file mode 100755
> index e64cb6d9440e..000000000000
> --- a/arch/riscv/kernel/vdso/so2s.sh
> +++ /dev/null
> @@ -1,6 +0,0 @@
> -#!/bin/sh
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright 2020 Palmer Dabbelt <palmerdabbelt@google.com>
> -
> -sed 's!\([0-9a-f]*\) T \([a-z0-9_]*\)\(@@LINUX_4.15\)*!.global \2\n.set \2,0x\1!' \
> -| grep '^\.'
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3] riscv: explicitly use symbol offsets for VDSO
2021-08-04 17:32 [PATCH v3] riscv: explicitly use symbol offsets for VDSO Saleem Abdulrasool
2021-08-05 18:44 ` Nathan Chancellor
@ 2021-08-25 4:54 ` Palmer Dabbelt
2021-10-27 14:50 ` Andreas Schwab
2021-11-02 15:51 ` [PATCH] riscv: fix building external modules Andreas Schwab
3 siblings, 0 replies; 7+ messages in thread
From: Palmer Dabbelt @ 2021-08-25 4:54 UTC (permalink / raw)
To: abdulras
Cc: linux-riscv, linux-kernel, nathan, ndesaulniers, morbo,
clang-built-linux, abdulras
On Wed, 04 Aug 2021 10:32:14 PDT (-0700), abdulras@google.com wrote:
> The current implementation of the `__rt_sigaction` reference computed an
> absolute offset relative to the mapped base of the VDSO. While this can
> be handled in the medlow model, the medany model cannot handle this as
> it is meant to be position independent. The current implementation
> relied on the BFD linker relaxing the PC-relative relocation into an
> absolute relocation as it was a near-zero address allowing it to be
> referenced relative to `zero`.
>
> We now extract the offsets and create a generated header allowing the
> build with LLVM and lld to succeed as we no longer depend on the linker
> rewriting address references near zero. This change was largely
> modelled after the ARM64 target which does something similar.
>
> Signed-off-by: Saleem Abdulrasool <abdulras@google.com>
> ---
> arch/riscv/Makefile | 4 ++++
> arch/riscv/include/asm/vdso.h | 14 ++----------
> arch/riscv/kernel/vdso/Makefile | 25 ++++++++++------------
> arch/riscv/kernel/vdso/gen_vdso_offsets.sh | 5 +++++
> arch/riscv/kernel/vdso/so2s.sh | 6 ------
> 5 files changed, 22 insertions(+), 32 deletions(-)
> create mode 100755 arch/riscv/kernel/vdso/gen_vdso_offsets.sh
> delete mode 100755 arch/riscv/kernel/vdso/so2s.sh
>
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index bc74afdbf31e..e026b2d0a5a4 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -108,6 +108,10 @@ PHONY += vdso_install
> vdso_install:
> $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
>
> +prepare: vdso_prepare
> +vdso_prepare: prepare0
> + $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
> +
> ifneq ($(CONFIG_XIP_KERNEL),y)
> ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
> KBUILD_IMAGE := $(boot)/loader.bin
> diff --git a/arch/riscv/include/asm/vdso.h b/arch/riscv/include/asm/vdso.h
> index 1453a2f563bc..d8d003c2b5a3 100644
> --- a/arch/riscv/include/asm/vdso.h
> +++ b/arch/riscv/include/asm/vdso.h
> @@ -9,25 +9,15 @@
> #define _ASM_RISCV_VDSO_H
>
> #include <linux/types.h>
> +#include <generated/vdso-offsets.h>
>
> #ifndef CONFIG_GENERIC_TIME_VSYSCALL
> struct vdso_data {
> };
> #endif
>
> -/*
> - * The VDSO symbols are mapped into Linux so we can just use regular symbol
> - * addressing to get their offsets in userspace. The symbols are mapped at an
> - * offset of 0, but since the linker must support setting weak undefined
> - * symbols to the absolute address 0 it also happens to support other low
> - * addresses even when the code model suggests those low addresses would not
> - * otherwise be availiable.
> - */
> #define VDSO_SYMBOL(base, name) \
> -({ \
> - extern const char __vdso_##name[]; \
> - (void __user *)((unsigned long)(base) + __vdso_##name); \
> -})
> + (void __user *)((unsigned long)(base) + __vdso_##name##_offset)
>
> asmlinkage long sys_riscv_flush_icache(uintptr_t, uintptr_t, uintptr_t);
>
> diff --git a/arch/riscv/kernel/vdso/Makefile b/arch/riscv/kernel/vdso/Makefile
> index 24d936c147cd..f8cb9144a284 100644
> --- a/arch/riscv/kernel/vdso/Makefile
> +++ b/arch/riscv/kernel/vdso/Makefile
> @@ -23,10 +23,10 @@ ifneq ($(c-gettimeofday-y),)
> endif
>
> # Build rules
> -targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds vdso-syms.S
> +targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds
> obj-vdso := $(addprefix $(obj)/, $(obj-vdso))
>
> -obj-y += vdso.o vdso-syms.o
> +obj-y += vdso.o
> CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
>
> # Disable -pg to prevent insert call site
> @@ -43,20 +43,22 @@ $(obj)/vdso.o: $(obj)/vdso.so
> # link rule for the .so file, .lds has to be first
> $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE
> $(call if_changed,vdsold)
> -LDFLAGS_vdso.so.dbg = -shared -s -soname=linux-vdso.so.1 \
> +LDFLAGS_vdso.so.dbg = -shared -S -soname=linux-vdso.so.1 \
> --build-id=sha1 --hash-style=both --eh-frame-hdr
>
> -# We also create a special relocatable object that should mirror the symbol
> -# table and layout of the linked DSO. With ld --just-symbols we can then
> -# refer to these symbols in the kernel code rather than hand-coded addresses.
> -$(obj)/vdso-syms.S: $(obj)/vdso.so FORCE
> - $(call if_changed,so2s)
> -
> # strip rule for the .so file
> $(obj)/%.so: OBJCOPYFLAGS := -S
> $(obj)/%.so: $(obj)/%.so.dbg FORCE
> $(call if_changed,objcopy)
>
> +# Generate VDSO offsets using helper script
> +gen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh
> +quiet_cmd_vdsosym = VDSOSYM $@
> + cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@
> +
> +include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE
> + $(call if_changed,vdsosym)
> +
> # actual build commands
> # The DSO images are built using a special linker script
> # Make sure only to export the intended __vdso_xxx symbol offsets.
> @@ -65,11 +67,6 @@ quiet_cmd_vdsold = VDSOLD $@
> $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) $@.tmp $@ && \
> rm $@.tmp
>
> -# Extracts symbol offsets from the VDSO, converting them into an assembly file
> -# that contains the same symbols at the same offsets.
> -quiet_cmd_so2s = SO2S $@
> - cmd_so2s = $(NM) -D $< | $(srctree)/$(src)/so2s.sh > $@
> -
> # install commands for the unstripped file
> quiet_cmd_vdso_install = INSTALL $@
> cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@
> diff --git a/arch/riscv/kernel/vdso/gen_vdso_offsets.sh b/arch/riscv/kernel/vdso/gen_vdso_offsets.sh
> new file mode 100755
> index 000000000000..c2e5613f3495
> --- /dev/null
> +++ b/arch/riscv/kernel/vdso/gen_vdso_offsets.sh
> @@ -0,0 +1,5 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0
> +
> +LC_ALL=C
> +sed -n -e 's/^[0]\+\(0[0-9a-fA-F]*\) . \(__vdso_[a-zA-Z0-9_]*\)$/\#define \2_offset\t0x\1/p'
> diff --git a/arch/riscv/kernel/vdso/so2s.sh b/arch/riscv/kernel/vdso/so2s.sh
> deleted file mode 100755
> index e64cb6d9440e..000000000000
> --- a/arch/riscv/kernel/vdso/so2s.sh
> +++ /dev/null
> @@ -1,6 +0,0 @@
> -#!/bin/sh
> -# SPDX-License-Identifier: GPL-2.0+
> -# Copyright 2020 Palmer Dabbelt <palmerdabbelt@google.com>
> -
> -sed 's!\([0-9a-f]*\) T \([a-z0-9_]*\)\(@@LINUX_4.15\)*!.global \2\n.set \2,0x\1!' \
> -| grep '^\.'
This is on for-next. Thanks!
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3] riscv: explicitly use symbol offsets for VDSO
2021-08-04 17:32 [PATCH v3] riscv: explicitly use symbol offsets for VDSO Saleem Abdulrasool
2021-08-05 18:44 ` Nathan Chancellor
2021-08-25 4:54 ` Palmer Dabbelt
@ 2021-10-27 14:50 ` Andreas Schwab
2021-11-02 15:51 ` [PATCH] riscv: fix building external modules Andreas Schwab
3 siblings, 0 replies; 7+ messages in thread
From: Andreas Schwab @ 2021-10-27 14:50 UTC (permalink / raw)
To: Saleem Abdulrasool
Cc: linux-riscv, linux-kernel, Palmer Dabbelt, Nathan Chancellor,
Nick Desaulniers, Bill Wendling, clang-built-linux
On Aug 04 2021, Saleem Abdulrasool wrote:
> The current implementation of the `__rt_sigaction` reference computed an
> absolute offset relative to the mapped base of the VDSO. While this can
> be handled in the medlow model, the medany model cannot handle this as
> it is meant to be position independent. The current implementation
> relied on the BFD linker relaxing the PC-relative relocation into an
> absolute relocation as it was a near-zero address allowing it to be
> referenced relative to `zero`.
>
> We now extract the offsets and create a generated header allowing the
> build with LLVM and lld to succeed as we no longer depend on the linker
> rewriting address references near zero. This change was largely
> modelled after the ARM64 target which does something similar.
>
> Signed-off-by: Saleem Abdulrasool <abdulras@google.com>
I think this broke out-of-tree module builds.
https://build.opensuse.org/package/live_build_log/openSUSE:Factory:RISCV/rtl8812au/standard/riscv64
+ make -j4
make ARCH=riscv CROSS_COMPILE= -C /usr/src/linux-obj/riscv64/default M=/home/abuild/rpmbuild/BUILD/rtl8812au-5.9.3.2+git20210427.6ef5d8f/obj/default modules
make[1]: Entering directory '/usr/src/linux-5.14.14-1-obj/riscv64/default'
mkdir: cannot create directory 'arch/riscv/kernel': Permission denied
LDS arch/riscv/kernel/vdso/vdso.lds
AS arch/riscv/kernel/vdso/rt_sigreturn.o
CC arch/riscv/kernel/vdso/vgettimeofday.o
AS arch/riscv/kernel/vdso/getcpu.o
mkdir: cannot create directory 'arch/riscv/kernel': Permission denied
LDS arch/riscv/kernel/vdso/vdso.lds
AS arch/riscv/kernel/vdso/rt_sigreturn.o
CC arch/riscv/kernel/vdso/vgettimeofday.o
AS arch/riscv/kernel/vdso/getcpu.o
cc1: fatal error: opening output file arch/riscv/kernel/vdso/vdso.lds: No such file or directory
compilation terminated.
make[3]: *** [/usr/src/linux-5.14.14-1/scripts/Makefile.build:366: arch/riscv/kernel/vdso/vdso.lds] Error 1
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1
"And now for something completely different."
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] riscv: fix building external modules
2021-08-04 17:32 [PATCH v3] riscv: explicitly use symbol offsets for VDSO Saleem Abdulrasool
` (2 preceding siblings ...)
2021-10-27 14:50 ` Andreas Schwab
@ 2021-11-02 15:51 ` Andreas Schwab
2021-11-02 16:48 ` Nathan Chancellor
2021-11-19 7:11 ` Palmer Dabbelt
3 siblings, 2 replies; 7+ messages in thread
From: Andreas Schwab @ 2021-11-02 15:51 UTC (permalink / raw)
To: linux-riscv
Cc: Saleem Abdulrasool, linux-kernel, Palmer Dabbelt,
Nathan Chancellor, Nick Desaulniers, Bill Wendling,
clang-built-linux
When building external modules, vdso_prepare should not be run. If the
kernel sources are read-only, it will fail.
Fixes: fde9c59aebaf ("riscv: explicitly use symbol offsets for VDSO")
Signed-off-by: Andreas Schwab <schwab@suse.de>
---
arch/riscv/Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
index 0eb4568fbd29..41f3a75fe2ec 100644
--- a/arch/riscv/Makefile
+++ b/arch/riscv/Makefile
@@ -108,11 +108,13 @@ PHONY += vdso_install
vdso_install:
$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
+ifeq ($(KBUILD_EXTMOD),)
ifeq ($(CONFIG_MMU),y)
prepare: vdso_prepare
vdso_prepare: prepare0
$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
endif
+endif
ifneq ($(CONFIG_XIP_KERNEL),y)
ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
--
2.33.1
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] riscv: fix building external modules
2021-11-02 15:51 ` [PATCH] riscv: fix building external modules Andreas Schwab
@ 2021-11-02 16:48 ` Nathan Chancellor
2021-11-19 7:11 ` Palmer Dabbelt
1 sibling, 0 replies; 7+ messages in thread
From: Nathan Chancellor @ 2021-11-02 16:48 UTC (permalink / raw)
To: Andreas Schwab
Cc: linux-riscv, Saleem Abdulrasool, linux-kernel, Palmer Dabbelt,
Nick Desaulniers, Bill Wendling, clang-built-linux
On Tue, Nov 02, 2021 at 04:51:43PM +0100, Andreas Schwab wrote:
> When building external modules, vdso_prepare should not be run. If the
> kernel sources are read-only, it will fail.
>
> Fixes: fde9c59aebaf ("riscv: explicitly use symbol offsets for VDSO")
> Signed-off-by: Andreas Schwab <schwab@suse.de>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
> ---
> arch/riscv/Makefile | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index 0eb4568fbd29..41f3a75fe2ec 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -108,11 +108,13 @@ PHONY += vdso_install
> vdso_install:
> $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
>
> +ifeq ($(KBUILD_EXTMOD),)
> ifeq ($(CONFIG_MMU),y)
> prepare: vdso_prepare
> vdso_prepare: prepare0
> $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
> endif
> +endif
>
> ifneq ($(CONFIG_XIP_KERNEL),y)
> ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
> --
> 2.33.1
>
>
> --
> Andreas Schwab, SUSE Labs, schwab@suse.de
> GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
> "And now for something completely different."
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] riscv: fix building external modules
2021-11-02 15:51 ` [PATCH] riscv: fix building external modules Andreas Schwab
2021-11-02 16:48 ` Nathan Chancellor
@ 2021-11-19 7:11 ` Palmer Dabbelt
1 sibling, 0 replies; 7+ messages in thread
From: Palmer Dabbelt @ 2021-11-19 7:11 UTC (permalink / raw)
To: schwab
Cc: linux-riscv, abdulras, linux-kernel, nathan, ndesaulniers, morbo,
clang-built-linux
On Tue, 02 Nov 2021 08:51:43 PDT (-0700), schwab@suse.de wrote:
> When building external modules, vdso_prepare should not be run. If the
> kernel sources are read-only, it will fail.
>
> Fixes: fde9c59aebaf ("riscv: explicitly use symbol offsets for VDSO")
> Signed-off-by: Andreas Schwab <schwab@suse.de>
> ---
> arch/riscv/Makefile | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index 0eb4568fbd29..41f3a75fe2ec 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -108,11 +108,13 @@ PHONY += vdso_install
> vdso_install:
> $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
>
> +ifeq ($(KBUILD_EXTMOD),)
> ifeq ($(CONFIG_MMU),y)
> prepare: vdso_prepare
> vdso_prepare: prepare0
> $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
> endif
> +endif
>
> ifneq ($(CONFIG_XIP_KERNEL),y)
> ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
Thanks, this is on fixes.
^ permalink raw reply [flat|nested] 7+ messages in thread