Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _ASM_POWERPC_STRING_H
0003 #define _ASM_POWERPC_STRING_H
0004 
0005 #ifdef __KERNEL__
0006 
0007 #ifndef CONFIG_KASAN
0008 #define __HAVE_ARCH_STRNCPY
0009 #define __HAVE_ARCH_STRNCMP
0010 #define __HAVE_ARCH_MEMCHR
0011 #define __HAVE_ARCH_MEMCMP
0012 #define __HAVE_ARCH_MEMSET16
0013 #endif
0014 
0015 #define __HAVE_ARCH_MEMSET
0016 #define __HAVE_ARCH_MEMCPY
0017 #define __HAVE_ARCH_MEMMOVE
0018 #define __HAVE_ARCH_MEMCPY_FLUSHCACHE
0019 
0020 extern char * strcpy(char *,const char *);
0021 extern char * strncpy(char *,const char *, __kernel_size_t);
0022 extern __kernel_size_t strlen(const char *);
0023 extern int strcmp(const char *,const char *);
0024 extern int strncmp(const char *, const char *, __kernel_size_t);
0025 extern char * strcat(char *, const char *);
0026 extern void * memset(void *,int,__kernel_size_t);
0027 extern void * memcpy(void *,const void *,__kernel_size_t);
0028 extern void * memmove(void *,const void *,__kernel_size_t);
0029 extern int memcmp(const void *,const void *,__kernel_size_t);
0030 extern void * memchr(const void *,int,__kernel_size_t);
0031 void memcpy_flushcache(void *dest, const void *src, size_t size);
0032 
0033 void *__memset(void *s, int c, __kernel_size_t count);
0034 void *__memcpy(void *to, const void *from, __kernel_size_t n);
0035 void *__memmove(void *to, const void *from, __kernel_size_t n);
0036 
0037 #if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)
0038 /*
0039  * For files that are not instrumented (e.g. mm/slub.c) we
0040  * should use not instrumented version of mem* functions.
0041  */
0042 #define memcpy(dst, src, len) __memcpy(dst, src, len)
0043 #define memmove(dst, src, len) __memmove(dst, src, len)
0044 #define memset(s, c, n) __memset(s, c, n)
0045 
0046 #ifndef __NO_FORTIFY
0047 #define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */
0048 #endif
0049 
0050 #endif
0051 
0052 #ifdef CONFIG_PPC64
0053 #ifndef CONFIG_KASAN
0054 #define __HAVE_ARCH_MEMSET32
0055 #define __HAVE_ARCH_MEMSET64
0056 
0057 extern void *__memset16(uint16_t *, uint16_t v, __kernel_size_t);
0058 extern void *__memset32(uint32_t *, uint32_t v, __kernel_size_t);
0059 extern void *__memset64(uint64_t *, uint64_t v, __kernel_size_t);
0060 
0061 static inline void *memset16(uint16_t *p, uint16_t v, __kernel_size_t n)
0062 {
0063     return __memset16(p, v, n * 2);
0064 }
0065 
0066 static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n)
0067 {
0068     return __memset32(p, v, n * 4);
0069 }
0070 
0071 static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n)
0072 {
0073     return __memset64(p, v, n * 8);
0074 }
0075 #endif
0076 #else
0077 #ifndef CONFIG_KASAN
0078 #define __HAVE_ARCH_STRLEN
0079 #endif
0080 
0081 extern void *memset16(uint16_t *, uint16_t, __kernel_size_t);
0082 #endif
0083 #endif /* __KERNEL__ */
0084 
0085 #endif  /* _ASM_POWERPC_STRING_H */