1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2013 ARM Ltd. 4 */ 5 #ifndef __ASM_STRING_H 6 #define __ASM_STRING_H 7 8 #ifndef CONFIG_KASAN 9 #define __HAVE_ARCH_STRRCHR 10 extern char *strrchr(const char *, int c); 11 12 #define __HAVE_ARCH_STRCHR 13 extern char *strchr(const char *, int c); 14 15 #define __HAVE_ARCH_STRCMP 16 extern int strcmp(const char *, const char *); 17 18 #define __HAVE_ARCH_STRNCMP 19 extern int strncmp(const char *, const char *, __kernel_size_t); 20 21 #define __HAVE_ARCH_STRLEN 22 extern __kernel_size_t strlen(const char *); 23 24 #define __HAVE_ARCH_STRNLEN 25 extern __kernel_size_t strnlen(const char *, __kernel_size_t); 26 27 #define __HAVE_ARCH_MEMCMP 28 extern int memcmp(const void *, const void *, size_t); 29 30 #define __HAVE_ARCH_MEMCHR 31 extern void *memchr(const void *, int, __kernel_size_t); 32 #endif 33 34 #define __HAVE_ARCH_MEMCPY 35 extern void *memcpy(void *, const void *, __kernel_size_t); 36 extern void *__memcpy(void *, const void *, __kernel_size_t); 37 38 #define __HAVE_ARCH_MEMMOVE 39 extern void *memmove(void *, const void *, __kernel_size_t); 40 extern void *__memmove(void *, const void *, __kernel_size_t); 41 42 #define __HAVE_ARCH_MEMSET 43 extern void *memset(void *, int, __kernel_size_t); 44 extern void *__memset(void *, int, __kernel_size_t); 45 46 #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE 47 #define __HAVE_ARCH_MEMCPY_FLUSHCACHE 48 void memcpy_flushcache(void *dst, const void *src, size_t cnt); 49 #endif 50 51 #if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) 52 53 /* 54 * For files that are not instrumented (e.g. mm/slub.c) we 55 * should use not instrumented version of mem* functions. 56 */ 57 58 #define memcpy(dst, src, len) __memcpy(dst, src, len) 59 #define memmove(dst, src, len) __memmove(dst, src, len) 60 #define memset(s, c, n) __memset(s, c, n) 61 62 #ifndef __NO_FORTIFY 63 #define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ 64 #endif 65 66 #endif 67 68 #endif 69