[PATCH 1/2] kcsan: xtensa: Add atomic builtin stubs for 32-bit systems

Christophe Leroy christophe.leroy at csgroup.eu
Thu Feb 16 18:12:31 AEDT 2023



Le 16/02/2023 à 06:09, Rohan McLure a écrit :
> KCSAN instruments calls to atomic builtins, and will in turn call these
> builtins itself. As such, architectures supporting KCSAN must have
> compiler support for these atomic primitives.
> 
> Since 32-bit systems are unlikely to have 64-bit compiler builtins,
> provide a stub for each missing builtin, and use BUG() to assert
> unreachability.
> 
> In commit 725aea873261 ("xtensa: enable KCSAN"), xtensa implements these
> locally. Move these definitions to be accessible to all 32-bit
> architectures that do not provide the necessary builtins, with opt in
> for PowerPC and xtensa.
> 
> Signed-off-by: Rohan McLure <rmclure at linux.ibm.com>
> Reviewed-by: Max Filippov <jcmvbkbc at gmail.com>

This series should also be addressed to KCSAN Maintainers, shouldn't it ?

KCSAN
M:	Marco Elver <elver at google.com>
R:	Dmitry Vyukov <dvyukov at google.com>
L:	kasan-dev at googlegroups.com
S:	Maintained
F:	Documentation/dev-tools/kcsan.rst
F:	include/linux/kcsan*.h
F:	kernel/kcsan/
F:	lib/Kconfig.kcsan
F:	scripts/Makefile.kcsan


> ---
> Previously issued as a part of a patch series adding KCSAN support to
> 64-bit.
> Link: https://lore.kernel.org/linuxppc-dev/167646486000.1421441.10070059569986228558.b4-ty@ellerman.id.au/T/#t
> v1: Remove __has_builtin check, as gcc is not obligated to inline
> builtins detected using this check, but instead is permitted to supply
> them in libatomic:
> Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108734
> Instead, opt-in PPC32 and xtensa.
> ---
>   arch/xtensa/lib/Makefile                              | 1 -
>   kernel/kcsan/Makefile                                 | 2 ++
>   arch/xtensa/lib/kcsan-stubs.c => kernel/kcsan/stubs.c | 0
>   3 files changed, 2 insertions(+), 1 deletion(-)
>   rename arch/xtensa/lib/kcsan-stubs.c => kernel/kcsan/stubs.c (100%)
> 
> diff --git a/arch/xtensa/lib/Makefile b/arch/xtensa/lib/Makefile
> index 7ecef0519a27..d69356dc97df 100644
> --- a/arch/xtensa/lib/Makefile
> +++ b/arch/xtensa/lib/Makefile
> @@ -8,5 +8,4 @@ lib-y	+= memcopy.o memset.o checksum.o \
>   	   divsi3.o udivsi3.o modsi3.o umodsi3.o mulsi3.o umulsidi3.o \
>   	   usercopy.o strncpy_user.o strnlen_user.o
>   lib-$(CONFIG_PCI) += pci-auto.o
> -lib-$(CONFIG_KCSAN) += kcsan-stubs.o
>   KCSAN_SANITIZE_kcsan-stubs.o := n
> diff --git a/kernel/kcsan/Makefile b/kernel/kcsan/Makefile
> index 8cf70f068d92..86dd713d8855 100644
> --- a/kernel/kcsan/Makefile
> +++ b/kernel/kcsan/Makefile
> @@ -12,6 +12,8 @@ CFLAGS_core.o := $(call cc-option,-fno-conserve-stack) \
>   	-fno-stack-protector -DDISABLE_BRANCH_PROFILING
>   
>   obj-y := core.o debugfs.o report.o
> +obj-$(CONFIG_PPC32) += stubs.o
> +obj-$(CONFIG_XTENSA) += stubs.o

Not sure it is acceptable to do it that way.

There should likely be something like a CONFIG_ARCH_WANTS_KCSAN_STUBS in 
KCSAN's Kconfig then PPC32 and XTENSA should select it.

>   
>   KCSAN_INSTRUMENT_BARRIERS_selftest.o := y
>   obj-$(CONFIG_KCSAN_SELFTEST) += selftest.o
> diff --git a/arch/xtensa/lib/kcsan-stubs.c b/kernel/kcsan/stubs.c
> similarity index 100%
> rename from arch/xtensa/lib/kcsan-stubs.c
> rename to kernel/kcsan/stubs.c


More information about the Linuxppc-dev mailing list