xref: /linux/arch/arm64/include/asm/string.h (revision e33c8925)
1caab277bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
24a899227SCatalin Marinas /*
34a899227SCatalin Marinas  * Copyright (C) 2013 ARM Ltd.
44a899227SCatalin Marinas  */
54a899227SCatalin Marinas #ifndef __ASM_STRING_H
64a899227SCatalin Marinas #define __ASM_STRING_H
74a899227SCatalin Marinas 
8*0fea6e9aSAndrey Konovalov #if !(defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS))
92b8cac81SCatalin Marinas #define __HAVE_ARCH_STRRCHR
102b8cac81SCatalin Marinas extern char *strrchr(const char *, int c);
112b8cac81SCatalin Marinas 
122b8cac81SCatalin Marinas #define __HAVE_ARCH_STRCHR
132b8cac81SCatalin Marinas extern char *strchr(const char *, int c);
142b8cac81SCatalin Marinas 
15192c4d90Szhichang.yuan #define __HAVE_ARCH_STRCMP
16192c4d90Szhichang.yuan extern int strcmp(const char *, const char *);
17192c4d90Szhichang.yuan 
18192c4d90Szhichang.yuan #define __HAVE_ARCH_STRNCMP
19192c4d90Szhichang.yuan extern int strncmp(const char *, const char *, __kernel_size_t);
20192c4d90Szhichang.yuan 
210a42cb0aSzhichang.yuan #define __HAVE_ARCH_STRLEN
220a42cb0aSzhichang.yuan extern __kernel_size_t strlen(const char *);
230a42cb0aSzhichang.yuan 
240a42cb0aSzhichang.yuan #define __HAVE_ARCH_STRNLEN
250a42cb0aSzhichang.yuan extern __kernel_size_t strnlen(const char *, __kernel_size_t);
260a42cb0aSzhichang.yuan 
2719a2ca0fSAndrey Ryabinin #define __HAVE_ARCH_MEMCMP
2819a2ca0fSAndrey Ryabinin extern int memcmp(const void *, const void *, size_t);
2919a2ca0fSAndrey Ryabinin 
3019a2ca0fSAndrey Ryabinin #define __HAVE_ARCH_MEMCHR
3119a2ca0fSAndrey Ryabinin extern void *memchr(const void *, int, __kernel_size_t);
3219a2ca0fSAndrey Ryabinin #endif
3319a2ca0fSAndrey Ryabinin 
344a899227SCatalin Marinas #define __HAVE_ARCH_MEMCPY
354a899227SCatalin Marinas extern void *memcpy(void *, const void *, __kernel_size_t);
3639d114ddSAndrey Ryabinin extern void *__memcpy(void *, const void *, __kernel_size_t);
374a899227SCatalin Marinas 
384a899227SCatalin Marinas #define __HAVE_ARCH_MEMMOVE
394a899227SCatalin Marinas extern void *memmove(void *, const void *, __kernel_size_t);
4039d114ddSAndrey Ryabinin extern void *__memmove(void *, const void *, __kernel_size_t);
414a899227SCatalin Marinas 
424a899227SCatalin Marinas #define __HAVE_ARCH_MEMSET
434a899227SCatalin Marinas extern void *memset(void *, int, __kernel_size_t);
4439d114ddSAndrey Ryabinin extern void *__memset(void *, int, __kernel_size_t);
454a899227SCatalin Marinas 
465d7bdeb1SRobin Murphy #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE
475d7bdeb1SRobin Murphy #define __HAVE_ARCH_MEMCPY_FLUSHCACHE
485d7bdeb1SRobin Murphy void memcpy_flushcache(void *dst, const void *src, size_t cnt);
495d7bdeb1SRobin Murphy #endif
5039d114ddSAndrey Ryabinin 
51*0fea6e9aSAndrey Konovalov #if (defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)) && \
52*0fea6e9aSAndrey Konovalov 	!defined(__SANITIZE_ADDRESS__)
5339d114ddSAndrey Ryabinin 
5439d114ddSAndrey Ryabinin /*
5539d114ddSAndrey Ryabinin  * For files that are not instrumented (e.g. mm/slub.c) we
5639d114ddSAndrey Ryabinin  * should use not instrumented version of mem* functions.
5739d114ddSAndrey Ryabinin  */
5839d114ddSAndrey Ryabinin 
5939d114ddSAndrey Ryabinin #define memcpy(dst, src, len) __memcpy(dst, src, len)
6039d114ddSAndrey Ryabinin #define memmove(dst, src, len) __memmove(dst, src, len)
6139d114ddSAndrey Ryabinin #define memset(s, c, n) __memset(s, c, n)
626974f0c4SDaniel Micay 
636974f0c4SDaniel Micay #ifndef __NO_FORTIFY
646974f0c4SDaniel Micay #define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */
656974f0c4SDaniel Micay #endif
666974f0c4SDaniel Micay 
6739d114ddSAndrey Ryabinin #endif
6839d114ddSAndrey Ryabinin 
694a899227SCatalin Marinas #endif
70