From 58e97e521c9ef38851dccab84c6313c04aaa95d8 Mon Sep 17 00:00:00 2001 From: Tiago Medicci Serrano Date: Fri, 28 Apr 2023 13:55:23 -0300 Subject: [PATCH] libc/string: prevent libc in the kernel/userspace optionally Add the `LIBC_PREVENT_STRING_KERNEL` and `LIBC_PREVENT_STRING_USER` that are meant to be selected by the chip if no libc implementation is going to be built. If selected, neither NuttX's software version of the libc nor any architecture-specific implementation will be built in the kernel or in the userspace, respectively. In this case, the linker may provide a ROM-defined version of the libc functions instead. --- libs/libc/Makefile | 1 + libs/libc/libc.h | 28 +++++++--- libs/libc/machine/Kconfig | 24 +++++++++ .../machine/arm/armv7-a/gnu/arch_memchr.S | 6 +++ .../machine/arm/armv7-a/gnu/arch_memcpy.S | 6 +++ .../machine/arm/armv7-a/gnu/arch_memmove.S | 6 +++ .../machine/arm/armv7-a/gnu/arch_memset.S | 6 +++ .../machine/arm/armv7-a/gnu/arch_strcmp.S | 6 +++ .../machine/arm/armv7-a/gnu/arch_strlen.S | 6 +++ .../machine/arm/armv7-m/gnu/arch_memchr.S | 6 +++ .../machine/arm/armv7-m/gnu/arch_memcpy.S | 6 +++ .../machine/arm/armv7-m/gnu/arch_memmove.S | 6 +++ .../machine/arm/armv7-m/gnu/arch_memset.S | 6 +++ .../machine/arm/armv7-m/gnu/arch_strcmp.S | 6 +++ .../machine/arm/armv7-m/gnu/arch_strcpy.S | 5 ++ .../machine/arm/armv7-m/gnu/arch_strlen.S | 6 +++ .../machine/arm/armv7-r/gnu/arch_memchr.S | 6 +++ .../machine/arm/armv7-r/gnu/arch_memcpy.S | 6 +++ .../machine/arm/armv7-r/gnu/arch_memmove.S | 6 +++ .../machine/arm/armv7-r/gnu/arch_memset.S | 6 +++ .../machine/arm/armv7-r/gnu/arch_strcmp.S | 6 +++ .../machine/arm/armv7-r/gnu/arch_strlen.S | 6 +++ .../machine/arm/armv8-m/gnu/arch_memchr.S | 6 +++ .../machine/arm/armv8-m/gnu/arch_memcpy.S | 6 +++ .../machine/arm/armv8-m/gnu/arch_memmove.S | 6 +++ .../machine/arm/armv8-m/gnu/arch_memset.S | 6 +++ .../machine/arm/armv8-m/gnu/arch_strcmp.S | 6 +++ .../machine/arm/armv8-m/gnu/arch_strlen.S | 6 +++ libs/libc/machine/arm64/gnu/arch_memchr.S | 6 +++ libs/libc/machine/arm64/gnu/arch_memcmp.S | 6 +++ libs/libc/machine/arm64/gnu/arch_memcpy.S | 6 +++ libs/libc/machine/arm64/gnu/arch_memmove.S | 6 +++ libs/libc/machine/arm64/gnu/arch_memset.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strchr.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strchrnul.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strcmp.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strcpy.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strlen.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strncmp.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strnlen.S | 6 +++ libs/libc/machine/arm64/gnu/arch_strrchr.S | 6 +++ libs/libc/machine/risc-v/gnu/arch_memcpy.S | 10 ++++ libs/libc/machine/risc-v/gnu/arch_memset.S | 6 +++ libs/libc/machine/risc-v/gnu/arch_strcmp.S | 6 +++ libs/libc/machine/xtensa/arch_memcpy.S | 6 +++ libs/libc/machine/xtensa/arch_memmove.S | 6 +++ libs/libc/machine/xtensa/arch_memset.S | 6 +++ libs/libc/machine/xtensa/arch_strcmp.S | 5 ++ libs/libc/machine/xtensa/arch_strcpy.S | 6 +++ libs/libc/machine/xtensa/arch_strlen.S | 6 +++ libs/libc/machine/xtensa/arch_strncpy.S | 6 +++ libs/libc/string/Make.defs | 52 ++----------------- libs/libc/string/lib_memchr.c | 4 ++ libs/libc/string/lib_memcmp.c | 4 +- libs/libc/string/lib_memcpy.c | 4 +- libs/libc/string/lib_memmove.c | 4 +- libs/libc/string/lib_memset.c | 4 +- libs/libc/string/lib_strcasecmp.c | 4 +- libs/libc/string/lib_strcat.c | 4 +- libs/libc/string/lib_strchr.c | 4 +- libs/libc/string/lib_strchrnul.c | 4 +- libs/libc/string/lib_strcmp.c | 4 +- libs/libc/string/lib_strcpy.c | 4 +- libs/libc/string/lib_strlcat.c | 4 +- libs/libc/string/lib_strlcpy.c | 4 +- libs/libc/string/lib_strlen.c | 4 +- libs/libc/string/lib_strncasecmp.c | 4 +- libs/libc/string/lib_strncat.c | 4 +- libs/libc/string/lib_strncmp.c | 4 +- libs/libc/string/lib_strncpy.c | 4 +- libs/libc/string/lib_strnlen.c | 4 +- libs/libc/string/lib_strrchr.c | 4 +- libs/libc/string/lib_vikmemcpy.c | 6 +++ 73 files changed, 405 insertions(+), 76 deletions(-) diff --git a/libs/libc/Makefile b/libs/libc/Makefile index a133cd4bf60..40e87f58fb3 100644 --- a/libs/libc/Makefile +++ b/libs/libc/Makefile @@ -82,6 +82,7 @@ else endif CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)libs$(DELIM)libc +AFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)libs$(DELIM)libc # Rule for the symbol table generation diff --git a/libs/libc/libc.h b/libs/libc/libc.h index 897e1f7df35..cb869043eea 100644 --- a/libs/libc/libc.h +++ b/libs/libc/libc.h @@ -27,15 +27,17 @@ #include -#include -#include -#include -#include -#include -#include +#ifndef __ASSEMBLY__ +# include +# include +# include +# include +# include +# include -#include -#include +# include +# include +#endif /**************************************************************************** * Pre-processor Definitions @@ -53,6 +55,12 @@ #define LIB_BUFLEN_UNKNOWN INT_MAX +#if defined(CONFIG_BUILD_FLAT) || \ + ((!defined(CONFIG_LIBC_PREVENT_STRING_USER) && !defined(__KERNEL__)) || \ + (!defined(CONFIG_LIBC_PREVENT_STRING_KERNEL) && defined(__KERNEL__))) +# define LIBC_BUILD_STRING +#endif + /**************************************************************************** * Public Types ****************************************************************************/ @@ -61,6 +69,8 @@ * Public Data ****************************************************************************/ +#ifndef __ASSEMBLY__ + #undef EXTERN #if defined(__cplusplus) #define EXTERN extern "C" @@ -157,4 +167,6 @@ void lib_cxx_initialize(void); } #endif +#endif /* __ASSEMBLY__ */ + #endif /* __LIBS_LIBC_LIBC_H */ diff --git a/libs/libc/machine/Kconfig b/libs/libc/machine/Kconfig index 8628534ff79..cb32809a18b 100644 --- a/libs/libc/machine/Kconfig +++ b/libs/libc/machine/Kconfig @@ -137,6 +137,30 @@ config LIBC_ARCH_ELF_64BIT default n depends on LIBC_ARCH_ELF +config LIBC_PREVENT_STRING_KERNEL + bool + default n + ---help--- + Prevent any implementation of the libc from being built and linked + in the kernel, including NuttX's software-defined version of the libc + or any other architecture-specific version of it. The ROM-defined + version should be linked instead. This option is particularly useful + when it's required that the ROM-defined libc to be used by the kernel + (for accessing some driver resource, for instance) but the userspace + is forbidden to use the same ROM-defined versions. In this case, + NuttX's software-defined version of the libc or arch-specific + assembly version is built instead. + +config LIBC_PREVENT_STRING_USER + bool + default n + ---help--- + Prevent any implementation of the libc from being built and linked + in the userspace, including NuttX's software-defined version of the + libc or any other architecture-specific version of it. A ROM-defined + version of the libc may be linked to the userspace by the linker. + + # One or more the of above may be selected by architecture specific logic if ARCH_ARM diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S b/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S index 338cb26f73e..9d2d39e68a5 100644 --- a/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S +++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memchr.S @@ -66,6 +66,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + @ 2011-02-07 david.gilbert@linaro.org @ Extracted from local git a5b438d861 @ 2011-07-14 david.gilbert@linaro.org @@ -389,3 +393,5 @@ memchr: #else /* Defined in memchr-stub.c. */ #endif + +#endif diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S b/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S index a7ebdebe0af..22a7a3556f3 100644 --- a/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S +++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memcpy.S @@ -33,6 +33,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* * This memcpy routine is optimised for Cortex-A15 cores and takes advantage * of VFP or NEON when built with the appropriate flags. @@ -624,3 +628,5 @@ def_fn memcpy p2align=6 bx lr .size memcpy, . - memcpy + +#endif diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S b/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S index 61196052fce..058ccd9b393 100644 --- a/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S +++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memmove.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + .thumb .syntax unified .global memmove @@ -64,3 +68,5 @@ memmove: pop {r4} bx lr .size memmove, . - memmove + +#endif diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S b/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S index 50aece2d63c..383c505fdc5 100644 --- a/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S +++ b/libs/libc/machine/arm/armv7-a/gnu/arch_memset.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + .arm .syntax unified .global memset @@ -144,3 +148,5 @@ memset: strbcs r1, [r3], #1 bx lr .size memset, . - memset + +#endif diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S b/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S index d8d69192a65..b5b45d09e94 100644 --- a/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S +++ b/libs/libc/machine/arm/armv7-a/gnu/arch_strcmp.S @@ -30,6 +30,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #ifdef __ARMEB__ #define SHFT2LSB lsl #define SHFT2LSBEQ lsleq @@ -301,3 +305,5 @@ strcmp: ldr r5, [sp], #4 bx lr .size strcmp, . - strcmp + +#endif diff --git a/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S b/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S index 676302ce8a4..6ce9aaf8662 100644 --- a/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S +++ b/libs/libc/machine/arm/armv7-a/gnu/arch_strlen.S @@ -62,6 +62,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "acle-compat.h" .macro def_fn f p2align=0 @@ -182,3 +186,5 @@ def_fn strlen p2align=6 mov const_0, #0 b .Lstart_realigned .size strlen, . - strlen + +#endif diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S b/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S index 261452e94e9..986b0e1fb72 100644 --- a/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S +++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memchr.S @@ -66,6 +66,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + @ 2011-02-07 david.gilbert@linaro.org @ Extracted from local git a5b438d861 @ 2011-07-14 david.gilbert@linaro.org @@ -427,3 +431,5 @@ memchr: #else /* Defined in memchr-stub.c. */ #endif + +#endif diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S b/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S index 1ab78f3066a..e9761aee0d8 100644 --- a/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S +++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memcpy.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* This memcpy routine is optimised for Cortex-M3/M4 cores with/without unaligned access. @@ -345,3 +349,5 @@ memcpy: .cantunwind .fnend .size memcpy, .-memcpy + +#endif diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S b/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S index 0e51a2d2f36..67d10c98971 100644 --- a/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S +++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memmove.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "arm_asm.h" .thumb @@ -71,3 +75,5 @@ memmove: .cantunwind .fnend .size memmove, . - memmove + +#endif diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S b/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S index 0f08db063f6..f3fd46dfb16 100644 --- a/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S +++ b/libs/libc/machine/arm/armv7-m/gnu/arch_memset.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "arm_asm.h" .thumb @@ -114,3 +118,5 @@ memset: .cantunwind .fnend .size memset, . - memset + +#endif diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S b/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S index 7ae553be94f..742bf965124 100644 --- a/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S +++ b/libs/libc/machine/arm/armv7-m/gnu/arch_strcmp.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Very similar to the generic code, but uses Thumb2 as implemented in ARMv7-M. */ @@ -419,3 +423,5 @@ def_fn strcmp .cantunwind .fnend .size strcmp, . - strcmp + +#endif diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S b/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S index 873279e16a0..c8345f80f25 100644 --- a/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S +++ b/libs/libc/machine/arm/armv7-m/gnu/arch_strcpy.S @@ -18,6 +18,10 @@ * ***************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* This strcpy borrowed some ideas from arch_strcmp.S(). */ /* Parameters and result. */ @@ -306,3 +310,4 @@ offset_3: *dst++ = 0; #endif /* Pseudo code end */ +#endif diff --git a/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S b/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S index d8cd7c7e1dd..5c3e581c98f 100644 --- a/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S +++ b/libs/libc/machine/arm/armv7-m/gnu/arch_strlen.S @@ -62,6 +62,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "arm-acle-compat.h" #include "arm_asm.h" @@ -193,3 +197,5 @@ def_fn strlen p2align=6 .cantunwind .fnend .size strlen, . - strlen + +#endif diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S b/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S index 6e1ed887639..e6813f578bf 100644 --- a/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S +++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memchr.S @@ -66,6 +66,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + @ 2011-02-07 david.gilbert@linaro.org @ Extracted from local git a5b438d861 @ 2011-07-14 david.gilbert@linaro.org @@ -389,3 +393,5 @@ memchr: #else /* Defined in memchr-stub.c. */ #endif + +#endif diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S b/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S index a6a2d340944..61d8e94adf7 100644 --- a/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S +++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memcpy.S @@ -33,6 +33,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* * This memcpy routine is optimised for Cortex-A15 cores and takes advantage * of VFP or NEON when built with the appropriate flags. @@ -624,3 +628,5 @@ def_fn memcpy p2align=6 bx lr .size memcpy, . - memcpy + +#endif diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S b/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S index 38b3eee5d4b..73e3012776b 100644 --- a/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S +++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memmove.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + .thumb .syntax unified .global memmove @@ -64,3 +68,5 @@ memmove: pop {r4} bx lr .size memmove, . - memmove + +#endif diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S b/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S index 109514283b7..a1c601a2ca8 100644 --- a/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S +++ b/libs/libc/machine/arm/armv7-r/gnu/arch_memset.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + .arm .syntax unified .global memset @@ -144,3 +148,5 @@ memset: strbcs r1, [r3], #1 bx lr .size memset, . - memset + +#endif diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S b/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S index 5fcdcb3d346..b56e3a39e88 100644 --- a/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S +++ b/libs/libc/machine/arm/armv7-r/gnu/arch_strcmp.S @@ -30,6 +30,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #ifdef __ARMEB__ #define SHFT2LSB lsl #define SHFT2LSBEQ lsleq @@ -301,3 +305,5 @@ strcmp: ldr r5, [sp], #4 bx lr .size strcmp, . - strcmp + +#endif diff --git a/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S b/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S index c5aa3bacb0a..f6ed3266ed3 100644 --- a/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S +++ b/libs/libc/machine/arm/armv7-r/gnu/arch_strlen.S @@ -62,6 +62,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "acle-compat.h" .macro def_fn f p2align=0 @@ -182,3 +186,5 @@ def_fn strlen p2align=6 mov const_0, #0 b .Lstart_realigned .size strlen, . - strlen + +#endif diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S b/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S index 57f7caef9c9..de60106ebeb 100644 --- a/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S +++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memchr.S @@ -66,6 +66,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + @ 2011-02-07 david.gilbert@linaro.org @ Extracted from local git a5b438d861 @ 2011-07-14 david.gilbert@linaro.org @@ -427,3 +431,5 @@ memchr: #else /* Defined in memchr-stub.c. */ #endif + +#endif diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S b/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S index 161072e2125..2606ce111df 100644 --- a/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S +++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memcpy.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* This memcpy routine is optimised for Cortex-M3/M4 cores with/without unaligned access. @@ -367,3 +371,5 @@ memcpy: .cantunwind .fnend .size memcpy, .-memcpy + +#endif diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S b/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S index fecfca6d89e..10ec4429c3f 100644 --- a/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S +++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memmove.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "arm_asm.h" .thumb @@ -71,3 +75,5 @@ memmove: .cantunwind .fnend .size memmove, . - memmove + +#endif diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S b/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S index 82c3659d8a6..d63bb7ee401 100644 --- a/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S +++ b/libs/libc/machine/arm/armv8-m/gnu/arch_memset.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "arm_asm.h" .thumb @@ -129,3 +133,5 @@ memset: .cantunwind .fnend .size memset, . - memset + +#endif diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S b/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S index 6b4d64bcf72..5e14800d697 100644 --- a/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S +++ b/libs/libc/machine/arm/armv8-m/gnu/arch_strcmp.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Very similar to the generic code, but uses Thumb2 as implemented in ARMv7-M. */ @@ -419,3 +423,5 @@ def_fn strcmp .cantunwind .fnend .size strcmp, . - strcmp + +#endif diff --git a/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S b/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S index 524ff361763..0987c5dcee9 100644 --- a/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S +++ b/libs/libc/machine/arm/armv8-m/gnu/arch_strlen.S @@ -62,6 +62,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "arm-acle-compat.h" #include "arm_asm.h" @@ -193,3 +197,5 @@ def_fn strlen p2align=6 .cantunwind .fnend .size strlen, . - strlen + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_memchr.S b/libs/libc/machine/arm64/gnu/arch_memchr.S index f999057413d..9b21d68ce90 100644 --- a/libs/libc/machine/arm64/gnu/arch_memchr.S +++ b/libs/libc/machine/arm64/gnu/arch_memchr.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64 @@ -171,3 +175,5 @@ def_fn memchr ret .size memchr, . - memchr + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_memcmp.S b/libs/libc/machine/arm64/gnu/arch_memcmp.S index 5e2c978c2bc..6cf65332504 100644 --- a/libs/libc/machine/arm64/gnu/arch_memcmp.S +++ b/libs/libc/machine/arm64/gnu/arch_memcmp.S @@ -59,6 +59,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64, unaligned accesses. @@ -194,3 +198,5 @@ L(byte_loop): ret .size memcmp, . - memcmp + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_memcpy.S b/libs/libc/machine/arm64/gnu/arch_memcpy.S index b8f9d53d1d8..2582ca5046b 100644 --- a/libs/libc/machine/arm64/gnu/arch_memcpy.S +++ b/libs/libc/machine/arm64/gnu/arch_memcpy.S @@ -59,6 +59,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64, unaligned accesses. @@ -230,3 +234,5 @@ L(copy_long): ret .size memcpy, . - memcpy + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_memmove.S b/libs/libc/machine/arm64/gnu/arch_memmove.S index 71c0fef53b7..3919382d42a 100644 --- a/libs/libc/machine/arm64/gnu/arch_memmove.S +++ b/libs/libc/machine/arm64/gnu/arch_memmove.S @@ -59,6 +59,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64, unaligned accesses @@ -155,3 +159,5 @@ def_fn memmove, 6 3: ret .size memmove, . - memmove + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_memset.S b/libs/libc/machine/arm64/gnu/arch_memset.S index a6b07ee9750..de64b319a1e 100644 --- a/libs/libc/machine/arm64/gnu/arch_memset.S +++ b/libs/libc/machine/arm64/gnu/arch_memset.S @@ -59,6 +59,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64, unaligned accesses @@ -240,3 +244,5 @@ L(zva_other): b L(tail64) .size memset, . - memset + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strchr.S b/libs/libc/machine/arm64/gnu/arch_strchr.S index 5ff53d5e053..f7b4baf472e 100644 --- a/libs/libc/machine/arm64/gnu/arch_strchr.S +++ b/libs/libc/machine/arm64/gnu/arch_strchr.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64 @@ -159,3 +163,5 @@ def_fn strchr ret .size strchr, . - strchr + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strchrnul.S b/libs/libc/machine/arm64/gnu/arch_strchrnul.S index 04186d7e23c..335cfd53cea 100644 --- a/libs/libc/machine/arm64/gnu/arch_strchrnul.S +++ b/libs/libc/machine/arm64/gnu/arch_strchrnul.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64 @@ -144,3 +148,5 @@ def_fn strchrnul ret .size strchrnul, . - strchrnul + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strcmp.S b/libs/libc/machine/arm64/gnu/arch_strcmp.S index 6860c159765..225698a04ee 100644 --- a/libs/libc/machine/arm64/gnu/arch_strcmp.S +++ b/libs/libc/machine/arm64/gnu/arch_strcmp.S @@ -33,6 +33,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64 @@ -203,3 +207,5 @@ L(done): sub result, data1, data2 ret .size strcmp, .-strcmp + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strcpy.S b/libs/libc/machine/arm64/gnu/arch_strcpy.S index 286f12715b2..3acdff3460f 100644 --- a/libs/libc/machine/arm64/gnu/arch_strcpy.S +++ b/libs/libc/machine/arm64/gnu/arch_strcpy.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64, unaligned accesses, min page size 4k. @@ -336,3 +340,5 @@ def_fn STRCPY p2align=6 b .Lfp_gt8 .size STRCPY, . - STRCPY + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strlen.S b/libs/libc/machine/arm64/gnu/arch_strlen.S index bece19b93f5..3795381c87a 100644 --- a/libs/libc/machine/arm64/gnu/arch_strlen.S +++ b/libs/libc/machine/arm64/gnu/arch_strlen.S @@ -33,6 +33,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64, unaligned accesses, min page size 4k. @@ -240,3 +244,5 @@ L(page_cross): b L(page_cross_entry) .size strlen, . - strlen + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strncmp.S b/libs/libc/machine/arm64/gnu/arch_strncmp.S index 5b5fe7ab2a8..af7e6442d94 100644 --- a/libs/libc/machine/arm64/gnu/arch_strncmp.S +++ b/libs/libc/machine/arm64/gnu/arch_strncmp.S @@ -33,6 +33,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64 @@ -292,3 +296,5 @@ def_fn strncmp mov result, #0 ret .size strncmp, . - strncmp + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strnlen.S b/libs/libc/machine/arm64/gnu/arch_strnlen.S index 8623f033a6b..a659f805983 100644 --- a/libs/libc/machine/arm64/gnu/arch_strnlen.S +++ b/libs/libc/machine/arm64/gnu/arch_strnlen.S @@ -33,6 +33,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64 @@ -186,3 +190,5 @@ def_fn strnlen csel data2, data2, data2a, le b .Lrealigned .size strnlen, . - .Lstart /* Include pre-padding in size. */ + +#endif diff --git a/libs/libc/machine/arm64/gnu/arch_strrchr.S b/libs/libc/machine/arm64/gnu/arch_strrchr.S index 25daa316b72..212f20acc69 100644 --- a/libs/libc/machine/arm64/gnu/arch_strrchr.S +++ b/libs/libc/machine/arm64/gnu/arch_strrchr.S @@ -29,6 +29,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /* Assumptions: * * ARMv8-a, AArch64 @@ -177,3 +181,5 @@ def_fn strrchr ret .size strrchr, . - strrchr + +#endif diff --git a/libs/libc/machine/risc-v/gnu/arch_memcpy.S b/libs/libc/machine/risc-v/gnu/arch_memcpy.S index 74905ac313e..12198d1741e 100644 --- a/libs/libc/machine/risc-v/gnu/arch_memcpy.S +++ b/libs/libc/machine/risc-v/gnu/arch_memcpy.S @@ -18,6 +18,14 @@ * ****************************************************************************/ +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /************************************************************************************ * Public Symbols ************************************************************************************/ @@ -128,3 +136,5 @@ memcpy: bltu a1, a3, 5b 6: ret + +#endif diff --git a/libs/libc/machine/risc-v/gnu/arch_memset.S b/libs/libc/machine/risc-v/gnu/arch_memset.S index 08e797503f8..c4130754eaa 100644 --- a/libs/libc/machine/risc-v/gnu/arch_memset.S +++ b/libs/libc/machine/risc-v/gnu/arch_memset.S @@ -13,6 +13,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + .text .global memset .type memset, @function @@ -104,3 +108,5 @@ memset: bleu a2, t1, .Ltiny j .Laligned .size memset, .-memset + +#endif diff --git a/libs/libc/machine/risc-v/gnu/arch_strcmp.S b/libs/libc/machine/risc-v/gnu/arch_strcmp.S index b82dcd0103b..178c1397490 100644 --- a/libs/libc/machine/risc-v/gnu/arch_strcmp.S +++ b/libs/libc/machine/risc-v/gnu/arch_strcmp.S @@ -13,6 +13,10 @@ * ****************************************************************************/ +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + #include "asm.h" .text @@ -185,3 +189,5 @@ strcmp: mask: .dword 0x7f7f7f7f7f7f7f7f #endif + +#endif diff --git a/libs/libc/machine/xtensa/arch_memcpy.S b/libs/libc/machine/xtensa/arch_memcpy.S index b2e8eabf403..d73e3b127bf 100644 --- a/libs/libc/machine/xtensa/arch_memcpy.S +++ b/libs/libc/machine/xtensa/arch_memcpy.S @@ -27,6 +27,10 @@ #include #include +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /**************************************************************************** * Pre-processor Macros ****************************************************************************/ @@ -276,3 +280,5 @@ __memcpy_aux: .end schedule .size memcpy, . - memcpy + +#endif diff --git a/libs/libc/machine/xtensa/arch_memmove.S b/libs/libc/machine/xtensa/arch_memmove.S index f3a1d89b68a..cbfb50c585b 100644 --- a/libs/libc/machine/xtensa/arch_memmove.S +++ b/libs/libc/machine/xtensa/arch_memmove.S @@ -27,6 +27,10 @@ #include #include +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /**************************************************************************** * Pre-processor Macros ****************************************************************************/ @@ -479,3 +483,5 @@ memmove: .end schedule .size memmove, . - memmove + +#endif diff --git a/libs/libc/machine/xtensa/arch_memset.S b/libs/libc/machine/xtensa/arch_memset.S index c01b7b48297..d1a0ab7ee7e 100644 --- a/libs/libc/machine/xtensa/arch_memset.S +++ b/libs/libc/machine/xtensa/arch_memset.S @@ -27,6 +27,10 @@ #include #include +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -175,3 +179,5 @@ __memset_aux: .end schedule .size memset, . - memset + +#endif diff --git a/libs/libc/machine/xtensa/arch_strcmp.S b/libs/libc/machine/xtensa/arch_strcmp.S index 0fd2d1b5256..01ea8276ccf 100644 --- a/libs/libc/machine/xtensa/arch_strcmp.S +++ b/libs/libc/machine/xtensa/arch_strcmp.S @@ -27,6 +27,10 @@ #include #include +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /**************************************************************************** * Pre-processor Macros ****************************************************************************/ @@ -760,3 +764,4 @@ strcmp: .end schedule .size strcmp, . - strcmp +#endif diff --git a/libs/libc/machine/xtensa/arch_strcpy.S b/libs/libc/machine/xtensa/arch_strcpy.S index 64b51d35470..20b3076bf76 100644 --- a/libs/libc/machine/xtensa/arch_strcpy.S +++ b/libs/libc/machine/xtensa/arch_strcpy.S @@ -27,6 +27,10 @@ #include #include +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -240,3 +244,5 @@ strcpy: .end schedule .size strcpy, . - strcpy + +#endif diff --git a/libs/libc/machine/xtensa/arch_strlen.S b/libs/libc/machine/xtensa/arch_strlen.S index 2653689e7a6..4e5e0765c7d 100644 --- a/libs/libc/machine/xtensa/arch_strlen.S +++ b/libs/libc/machine/xtensa/arch_strlen.S @@ -27,6 +27,10 @@ #include #include +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -120,3 +124,5 @@ strlen: .end schedule .size strlen, . - strlen + +#endif diff --git a/libs/libc/machine/xtensa/arch_strncpy.S b/libs/libc/machine/xtensa/arch_strncpy.S index 93ca1840277..24bca9aa063 100644 --- a/libs/libc/machine/xtensa/arch_strncpy.S +++ b/libs/libc/machine/xtensa/arch_strncpy.S @@ -27,6 +27,10 @@ #include #include +#include "libc.h" + +#ifdef LIBC_BUILD_STRING + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -261,3 +265,5 @@ strncpy: .end schedule .size strncpy, . - strncpy + +#endif diff --git a/libs/libc/string/Make.defs b/libs/libc/string/Make.defs index 36876f41a4f..54989a901cd 100644 --- a/libs/libc/string/Make.defs +++ b/libs/libc/string/Make.defs @@ -32,61 +32,15 @@ CSRCS += lib_strsep.c lib_strerrorr.c lib_explicit_bzero.c lib_strsignal.c CSRCS += lib_index.c lib_rindex.c lib_timingsafe_bcmp.c lib_strverscmp.c CSRCS += lib_mempcpy.c lib_rawmemchr.c lib_bzero.c -ifneq ($(CONFIG_LIBC_ARCH_MEMCHR),y) -CSRCS += lib_memchr.c -endif +CSRCS += lib_memchr.c lib_memcmp.c lib_memmove.c lib_memset.c +CSRCS += lib_strchr.c lib_strcmp.c lib_strcpy.c lib_strlcat.c +CSRCS += lib_strlcpy.c lib_strlen.c lib_strncpy.c lib_strnlen.c -ifneq ($(CONFIG_LIBC_ARCH_MEMCMP),y) -CSRCS += lib_memcmp.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_MEMCPY),y) ifeq ($(CONFIG_MEMCPY_VIK),y) CSRCS += lib_vikmemcpy.c else CSRCS += lib_memcpy.c endif -endif - -ifneq ($(CONFIG_LIBC_ARCH_MEMMOVE),y) -CSRCS += lib_memmove.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_MEMSET),y) -CSRCS += lib_memset.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRCHR),y) -CSRCS += lib_strchr.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRCMP),y) -CSRCS += lib_strcmp.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRCPY),y) -CSRCS += lib_strcpy.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRLCAT),y) -CSRCS += lib_strlcat.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRLCPY),y) -CSRCS += lib_strlcpy.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRLEN),y) -CSRCS += lib_strlen.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRNCPY),y) -CSRCS += lib_strncpy.c -endif - -ifneq ($(CONFIG_LIBC_ARCH_STRNLEN),y) -CSRCS += lib_strnlen.c -endif ifeq ($(CONFIG_LIBC_LOCALE),y) CSRCS += lib_strcoll.c lib_strxfrm.c diff --git a/libs/libc/string/lib_memchr.c b/libs/libc/string/lib_memchr.c index 1c58bb1bde9..d4b2f87f018 100644 --- a/libs/libc/string/lib_memchr.c +++ b/libs/libc/string/lib_memchr.c @@ -26,6 +26,8 @@ #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -44,6 +46,7 @@ * ****************************************************************************/ +#if !defined(CONFIG_LIBC_ARCH_MEMCHR) && defined(LIBC_BUILD_STRING) #undef memchr /* See mm/README.txt */ FAR void *memchr(FAR const void *s, int c, size_t n) { @@ -61,3 +64,4 @@ FAR void *memchr(FAR const void *s, int c, size_t n) return NULL; } +#endif diff --git a/libs/libc/string/lib_memcmp.c b/libs/libc/string/lib_memcmp.c index 9602c9a254d..95b2614a6f2 100644 --- a/libs/libc/string/lib_memcmp.c +++ b/libs/libc/string/lib_memcmp.c @@ -26,11 +26,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_MEMCMP +#if !defined(CONFIG_LIBC_ARCH_MEMCMP) && defined(LIBC_BUILD_STRING) #undef memcmp /* See mm/README.txt */ no_builtin("memcmp") int memcmp(FAR const void *s1, FAR const void *s2, size_t n) diff --git a/libs/libc/string/lib_memcpy.c b/libs/libc/string/lib_memcpy.c index ba91d5abb1d..d26e6054e38 100644 --- a/libs/libc/string/lib_memcpy.c +++ b/libs/libc/string/lib_memcpy.c @@ -26,6 +26,8 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -34,7 +36,7 @@ * Name: memcpy ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_MEMCPY +#if !defined(CONFIG_LIBC_ARCH_MEMCPY) && defined(LIBC_BUILD_STRING) #undef memcpy /* See mm/README.txt */ no_builtin("memcpy") FAR void *memcpy(FAR void *dest, FAR const void *src, size_t n) diff --git a/libs/libc/string/lib_memmove.c b/libs/libc/string/lib_memmove.c index afed8e01725..c2828dd468c 100644 --- a/libs/libc/string/lib_memmove.c +++ b/libs/libc/string/lib_memmove.c @@ -26,11 +26,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_MEMMOVE +#if !defined(CONFIG_LIBC_ARCH_MEMMOVE) && defined(LIBC_BUILD_STRING) #undef memmove /* See mm/README.txt */ no_builtin("memmove") FAR void *memmove(FAR void *dest, FAR const void *src, size_t count) diff --git a/libs/libc/string/lib_memset.c b/libs/libc/string/lib_memset.c index 4f20f15f9e1..934b4c1f6d3 100644 --- a/libs/libc/string/lib_memset.c +++ b/libs/libc/string/lib_memset.c @@ -30,6 +30,8 @@ #include #include +#include "libc.h" + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ @@ -46,7 +48,7 @@ * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_MEMSET +#if !defined(CONFIG_LIBC_ARCH_MEMSET) && defined(LIBC_BUILD_STRING) #undef memset /* See mm/README.txt */ no_builtin("memset") FAR void *memset(FAR void *s, int c, size_t n) diff --git a/libs/libc/string/lib_strcasecmp.c b/libs/libc/string/lib_strcasecmp.c index 1717682c038..7d7f5dd5c56 100644 --- a/libs/libc/string/lib_strcasecmp.c +++ b/libs/libc/string/lib_strcasecmp.c @@ -27,11 +27,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRCASECMP +#if !defined(CONFIG_LIBC_ARCH_STRCASECMP) && defined(LIBC_BUILD_STRING) #undef strcasecmp /* See mm/README.txt */ int strcasecmp(FAR const char *cs, FAR const char *ct) { diff --git a/libs/libc/string/lib_strcat.c b/libs/libc/string/lib_strcat.c index e6c34955496..ae0e39baa57 100644 --- a/libs/libc/string/lib_strcat.c +++ b/libs/libc/string/lib_strcat.c @@ -26,11 +26,13 @@ #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRCAT +#if !defined(CONFIG_LIBC_ARCH_STRCAT) && defined(LIBC_BUILD_STRING) #undef strcat /* See mm/README.txt */ FAR char *strcat(FAR char *dest, FAR const char *src) { diff --git a/libs/libc/string/lib_strchr.c b/libs/libc/string/lib_strchr.c index 1942042e303..3d611c14713 100644 --- a/libs/libc/string/lib_strchr.c +++ b/libs/libc/string/lib_strchr.c @@ -26,6 +26,8 @@ #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -44,7 +46,7 @@ * ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRCHR +#if !defined(CONFIG_LIBC_ARCH_STRCHR) && defined(LIBC_BUILD_STRING) #undef strchr /* See mm/README.txt */ FAR char *strchr(FAR const char *s, int c) { diff --git a/libs/libc/string/lib_strchrnul.c b/libs/libc/string/lib_strchrnul.c index abafb54fa9b..e6ad6aa59c5 100644 --- a/libs/libc/string/lib_strchrnul.c +++ b/libs/libc/string/lib_strchrnul.c @@ -26,6 +26,8 @@ #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -44,7 +46,7 @@ * ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRCHRNUL +#if !defined(CONFIG_LIBC_ARCH_STRCHRNUL) && defined(LIBC_BUILD_STRING) FAR char *strchrnul(FAR const char *s, int c) { if (s) diff --git a/libs/libc/string/lib_strcmp.c b/libs/libc/string/lib_strcmp.c index 3067684698e..aad048eaaaa 100644 --- a/libs/libc/string/lib_strcmp.c +++ b/libs/libc/string/lib_strcmp.c @@ -26,11 +26,13 @@ #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRCMP +#if !defined(CONFIG_LIBC_ARCH_STRCMP) && defined(LIBC_BUILD_STRING) #undef strcmp /* See mm/README.txt */ int strcmp(FAR const char *cs, FAR const char *ct) { diff --git a/libs/libc/string/lib_strcpy.c b/libs/libc/string/lib_strcpy.c index d66dc7e5a49..a602fab89f1 100644 --- a/libs/libc/string/lib_strcpy.c +++ b/libs/libc/string/lib_strcpy.c @@ -26,6 +26,8 @@ #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -42,7 +44,7 @@ * ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRCPY +#if !defined(CONFIG_LIBC_ARCH_STRCPY) && defined(LIBC_BUILD_STRING) #undef strcpy /* See mm/README.txt */ FAR char *strcpy(FAR char *dest, FAR const char *src) { diff --git a/libs/libc/string/lib_strlcat.c b/libs/libc/string/lib_strlcat.c index bc68885444b..29365cdd9ab 100644 --- a/libs/libc/string/lib_strlcat.c +++ b/libs/libc/string/lib_strlcat.c @@ -27,6 +27,8 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -44,7 +46,7 @@ * ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRLCAT +#if !defined(CONFIG_LIBC_ARCH_STRLCAT) && defined(LIBC_BUILD_STRING) size_t strlcat(FAR char *dst, FAR const char *src, size_t dsize) { FAR const char *odst = dst; diff --git a/libs/libc/string/lib_strlcpy.c b/libs/libc/string/lib_strlcpy.c index ee6f20177bb..b108af6cf01 100644 --- a/libs/libc/string/lib_strlcpy.c +++ b/libs/libc/string/lib_strlcpy.c @@ -27,6 +27,8 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -43,7 +45,7 @@ * ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRLCPY +#if !defined(CONFIG_LIBC_ARCH_STRLCPY) && defined(LIBC_BUILD_STRING) size_t strlcpy(FAR char *dst, FAR const char *src, size_t dsize) { FAR const char *osrc = src; diff --git a/libs/libc/string/lib_strlen.c b/libs/libc/string/lib_strlen.c index 647c6d06433..de180e266fb 100644 --- a/libs/libc/string/lib_strlen.c +++ b/libs/libc/string/lib_strlen.c @@ -26,11 +26,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRLEN +#if !defined(CONFIG_LIBC_ARCH_STRLEN) && defined(LIBC_BUILD_STRING) #undef strlen /* See mm/README.txt */ size_t strlen(const char *s) { diff --git a/libs/libc/string/lib_strncasecmp.c b/libs/libc/string/lib_strncasecmp.c index b2e8261e431..ab3c4595f4e 100644 --- a/libs/libc/string/lib_strncasecmp.c +++ b/libs/libc/string/lib_strncasecmp.c @@ -28,11 +28,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRNCASECMP +#if !defined(CONFIG_LIBC_ARCH_STRNCASECMP) && defined(LIBC_BUILD_STRING) #undef strncasecmp /* See mm/README.txt */ int strncasecmp(FAR const char *cs, FAR const char *ct, size_t nb) { diff --git a/libs/libc/string/lib_strncat.c b/libs/libc/string/lib_strncat.c index aa05d4c871b..379e503fc16 100644 --- a/libs/libc/string/lib_strncat.c +++ b/libs/libc/string/lib_strncat.c @@ -26,11 +26,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRNCAT +#if !defined(CONFIG_LIBC_ARCH_STRNCAT) && defined(LIBC_BUILD_STRING) #undef strncat /* See mm/README.txt */ FAR char *strncat(FAR char *dest, FAR const char *src, size_t n) { diff --git a/libs/libc/string/lib_strncmp.c b/libs/libc/string/lib_strncmp.c index 2af32e98569..58b6fbfde2f 100644 --- a/libs/libc/string/lib_strncmp.c +++ b/libs/libc/string/lib_strncmp.c @@ -26,11 +26,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRNCMP +#if !defined(CONFIG_LIBC_ARCH_STRNCMP) && defined(LIBC_BUILD_STRING) #undef strncmp /* See mm/README.txt */ int strncmp(FAR const char *cs, FAR const char *ct, size_t nb) { diff --git a/libs/libc/string/lib_strncpy.c b/libs/libc/string/lib_strncpy.c index 1a7cf58bb23..7200ebadec2 100644 --- a/libs/libc/string/lib_strncpy.c +++ b/libs/libc/string/lib_strncpy.c @@ -26,6 +26,8 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -51,7 +53,7 @@ * ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRNCPY +#if !defined(CONFIG_LIBC_ARCH_STRNCPY) && defined(LIBC_BUILD_STRING) #undef strncpy /* See mm/README.txt */ FAR char *strncpy(FAR char *dest, FAR const char *src, size_t n) { diff --git a/libs/libc/string/lib_strnlen.c b/libs/libc/string/lib_strnlen.c index 26f94198430..c81fcc61259 100644 --- a/libs/libc/string/lib_strnlen.c +++ b/libs/libc/string/lib_strnlen.c @@ -26,11 +26,13 @@ #include #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ -#ifndef CONFIG_LIBC_ARCH_STRNLEN +#if !defined(CONFIG_LIBC_ARCH_STRNLEN) && defined(LIBC_BUILD_STRING) size_t strnlen(const char *s, size_t maxlen) { const char *sc; diff --git a/libs/libc/string/lib_strrchr.c b/libs/libc/string/lib_strrchr.c index c690e94c3f9..b8c3c05b5ff 100644 --- a/libs/libc/string/lib_strrchr.c +++ b/libs/libc/string/lib_strrchr.c @@ -26,6 +26,8 @@ #include +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -34,7 +36,7 @@ * occurrence of the character c in the string s. */ -#ifndef CONFIG_LIBC_ARCH_STRRCHR +#if !defined(CONFIG_LIBC_ARCH_STRRCHR) && defined(LIBC_BUILD_STRING) #undef strrchr /* See mm/README.txt */ FAR char *strrchr(FAR const char *s, int c) { diff --git a/libs/libc/string/lib_vikmemcpy.c b/libs/libc/string/lib_vikmemcpy.c index ce9a89a4e24..ef1f99afed7 100644 --- a/libs/libc/string/lib_vikmemcpy.c +++ b/libs/libc/string/lib_vikmemcpy.c @@ -62,6 +62,10 @@ #include #include +#include "libc.h" + +#if !defined(CONFIG_LIBC_ARCH_MEMCPY) && defined(LIBC_BUILD_STRING) + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ @@ -342,3 +346,5 @@ FAR void *memcpy(FAR void *dest, FAR const void *src, size_t count) return dest; } + +#endif