1 /* 2 * Copyright (c) 2022 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29 #ifndef _MACHINE_STRING_H_ 30 #define _MACHINE_STRING_H_ 31 32 #include <sys/cdefs.h> 33 #include <types.h> 34 35 #if defined (__i386__) || defined (__x86_64__) 36 #include "i386/string.h" 37 #elif defined (__arm__) || defined (__arm64__) 38 #include "arm/string.h" 39 #else 40 #error architecture not supported 41 #endif 42 43 /* 44 * Below are prototypes that call into a precise symbol, 45 * and prevent the compiler from using a builtin. 46 */ 47 48 /* 49 * Memory functions 50 */ 51 extern int bcmp_impl(const void *, const void *, size_t) asm("_bcmp"); 52 extern int memcmp_impl(const void *, const void *, size_t) asm("_memcmp"); 53 54 extern void *bzero_impl(void *, const void *, size_t) asm("_bzero"); 55 extern void *memset_impl(void *, int c, size_t) asm("_memset"); 56 57 extern void *memcpy_impl(void *, const void *, size_t) asm("_memcpy"); 58 extern void *memmove_impl(void *, const void *, size_t) asm("_memmove"); 59 extern void bcopy_impl(const void *, void *, size_t) asm("_bcopy"); 60 61 /* 62 * String functions 63 */ 64 extern size_t strlen_impl(const char *) asm("_strlen"); 65 extern size_t strnlen_impl(const char *s, size_t) asm("_strnlen"); 66 67 extern int strcmp_impl(const char *, const char *) asm("_strcmp"); 68 extern int strncmp_impl(const char *, const char *, size_t) asm("_strncmp"); 69 extern int strcasecmp_impl(const char *, const char *) asm("_strcasecmp"); 70 extern int strncasecmp_impl(const char *, const char *, size_t) asm("_strncasecmp"); 71 72 extern char *strchr_impl(const char *, int) asm("_strchr"); 73 extern char *strrchr_impl(const char *, int) asm("_strrchr"); 74 extern char *strnstr_impl(const char *s, const char *, size_t) asm("_strnstr"); 75 76 extern size_t strlcat_impl(char *, const char *, size_t) asm("_strlcat"); 77 extern size_t strlcpy_impl(char *, const char *, size_t) asm("_strlcpy"); 78 79 /* 80 * Deprecated functions 81 */ 82 extern char *strncpy_impl(char *, const char *, size_t) asm("_strncpy"); 83 extern char *strncat_impl(char *, const char *, size_t) asm("_strncat"); 84 85 #if CONFIG_VSPRINTF 86 extern char *strcpy_impl(char *, const char *) asm("_strcpy"); 87 extern char *strcat_impl(char *, const char *) asm("_strcat"); 88 #endif 89 90 #endif /* _MACHINE_STRING_H_ */ 91