Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  * include/asm-xtensa/string.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * These trivial string functions are considered part of the public domain.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * This file is subject to the terms and conditions of the GNU General Public
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * License.  See the file "COPYING" in the main directory of this archive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * Copyright (C) 2001 - 2005 Tensilica Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) /* We should optimize these. See arch/xtensa/lib/strncpy_user.S */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #ifndef _XTENSA_STRING_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define _XTENSA_STRING_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define __HAVE_ARCH_STRCPY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) static inline char *strcpy(char *__dest, const char *__src)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	register char *__xdest = __dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	unsigned long __dummy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	__asm__ __volatile__("1:\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 		"l8ui	%2, %1, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 		"s8i	%2, %0, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 		"addi	%1, %1, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 		"addi	%0, %0, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 		"bnez	%2, 1b\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 		: "=r" (__dest), "=r" (__src), "=&r" (__dummy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 		: "0" (__dest), "1" (__src)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 		: "memory");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	return __xdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define __HAVE_ARCH_STRNCPY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) static inline char *strncpy(char *__dest, const char *__src, size_t __n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	register char *__xdest = __dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	unsigned long __dummy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	if (__n == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 		return __xdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	__asm__ __volatile__(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 		"1:\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 		"l8ui	%2, %1, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 		"s8i	%2, %0, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 		"addi	%1, %1, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 		"addi	%0, %0, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 		"beqz	%2, 2f\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 		"bne	%1, %5, 1b\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 		"2:"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 		: "=r" (__dest), "=r" (__src), "=&r" (__dummy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 		: "0" (__dest), "1" (__src), "r" ((uintptr_t)__src+__n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 		: "memory");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	return __xdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) #define __HAVE_ARCH_STRCMP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) static inline int strcmp(const char *__cs, const char *__ct)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	register int __res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	unsigned long __dummy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	__asm__ __volatile__(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 		"1:\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 		"l8ui	%3, %1, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 		"addi	%1, %1, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 		"l8ui	%2, %0, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 		"addi	%0, %0, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 		"beqz	%2, 2f\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 		"beq	%2, %3, 1b\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 		"2:\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 		"sub	%2, %2, %3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 		: "=r" (__cs), "=r" (__ct), "=&r" (__res), "=&r" (__dummy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 		: "0" (__cs), "1" (__ct));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	return __res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define __HAVE_ARCH_STRNCMP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) static inline int strncmp(const char *__cs, const char *__ct, size_t __n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	register int __res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	unsigned long __dummy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	__asm__ __volatile__(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 		"mov	%2, %3\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 		"1:\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 		"beq	%0, %6, 2f\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 		"l8ui	%3, %1, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 		"addi	%1, %1, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 		"l8ui	%2, %0, 0\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 		"addi	%0, %0, 1\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 		"beqz	%2, 2f\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 		"beqz	%3, 2f\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		"beq	%2, %3, 1b\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 		"2:\n\t"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 		"sub	%2, %2, %3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 		: "=r" (__cs), "=r" (__ct), "=&r" (__res), "=&r" (__dummy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 		: "0" (__cs), "1" (__ct), "r" ((uintptr_t)__cs+__n));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	return __res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define __HAVE_ARCH_MEMSET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) extern void *memset(void *__s, int __c, size_t __count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) extern void *__memset(void *__s, int __c, size_t __count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define __HAVE_ARCH_MEMCPY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) extern void *__memcpy(void *__to, __const__ void *__from, size_t __n);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define __HAVE_ARCH_MEMMOVE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) extern void *__memmove(void *__dest, __const__ void *__src, size_t __n);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* Don't build bcopy at all ...  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define __HAVE_ARCH_BCOPY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)  * For files that are not instrumented (e.g. mm/slub.c) we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)  * should use not instrumented version of mem* functions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define memcpy(dst, src, len) __memcpy(dst, src, len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define memmove(dst, src, len) __memmove(dst, src, len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define memset(s, c, n) __memset(s, c, n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #ifndef __NO_FORTIFY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #endif	/* _XTENSA_STRING_H */