0001
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
0040
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
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
0084
0085 #endif