2 * Copyright (c) 2010-2014 Apple Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
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.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
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.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
29 #include "_libkernel_init.h"
32 extern _libkernel_functions_t _libkernel_functions
;
33 extern void mig_os_release(void* ptr
);
35 __attribute__((visibility("hidden")))
39 return _libkernel_functions
->malloc(size
);
42 __attribute__((visibility("hidden")))
46 return _libkernel_functions
->free(ptr
);
49 __attribute__((visibility("hidden")))
51 realloc(void *ptr
, size_t size
)
53 return _libkernel_functions
->realloc(ptr
, size
);
56 __attribute__((visibility("hidden")))
58 reallocf(void *ptr
, size_t size
)
60 void *nptr
= realloc(ptr
, size
);
67 __attribute__((visibility("hidden")))
69 _pthread_exit_if_canceled(int error
)
71 return _libkernel_functions
->_pthread_exit_if_canceled(error
);
74 __attribute__((visibility("hidden")))
76 _pthread_set_self(void *ptr
__attribute__((__unused__
)))
80 __attribute__((visibility("hidden")))
82 _pthread_clear_qos_tsd(mach_port_t thread_port
)
84 if (_libkernel_functions
->version
>= 3 &&
85 _libkernel_functions
->pthread_clear_qos_tsd
) {
86 return _libkernel_functions
->pthread_clear_qos_tsd(thread_port
);
90 __attribute__((visibility("hidden")))
92 pthread_current_stack_contains_np(const void *addr
, size_t len
)
94 if (_libkernel_functions
->version
>= 4 &&
95 _libkernel_functions
->pthread_current_stack_contains_np
) {
96 return _libkernel_functions
->pthread_current_stack_contains_np(addr
, len
);
103 * Upcalls to optimized libplatform string functions
106 static const struct _libkernel_string_functions
107 _libkernel_generic_string_functions
= {
108 .bzero
= _libkernel_bzero
,
109 .memmove
= _libkernel_memmove
,
110 .memset
= _libkernel_memset
,
111 .strchr
= _libkernel_strchr
,
112 .strcmp
= _libkernel_strcmp
,
113 .strcpy
= _libkernel_strcpy
,
114 .strlcpy
= _libkernel_strlcpy
,
115 .strlen
= _libkernel_strlen
,
117 static _libkernel_string_functions_t _libkernel_string_functions
=
118 &_libkernel_generic_string_functions
;
121 __libkernel_platform_init(_libkernel_string_functions_t fns
)
123 _libkernel_string_functions
= fns
;
127 __attribute__((visibility("hidden")))
129 bzero(void *s
, size_t n
)
131 return _libkernel_string_functions
->bzero(s
, n
);
134 __attribute__((visibility("hidden")))
136 __bzero(void *s
, size_t n
)
138 return _libkernel_string_functions
->bzero(s
, n
);
141 __attribute__((visibility("hidden")))
143 memchr(const void *s
, int c
, size_t n
)
145 return _libkernel_string_functions
->memchr(s
, c
, n
);
148 __attribute__((visibility("hidden")))
150 memcmp(const void *s1
, const void *s2
, size_t n
)
152 return _libkernel_string_functions
->memcmp(s1
, s2
, n
);
155 __attribute__((visibility("hidden")))
157 memmove(void *dst
, const void *src
, size_t n
)
159 return _libkernel_string_functions
->memmove(dst
, src
, n
);
162 __attribute__((visibility("hidden")))
164 memcpy(void *dst
, const void *src
, size_t n
)
166 return _libkernel_string_functions
->memmove(dst
, src
, n
);
169 __attribute__((visibility("hidden")))
171 memccpy(void *__restrict dst
, const void *__restrict src
, int c
, size_t n
)
173 return _libkernel_string_functions
->memccpy(dst
, src
, c
, n
);
176 __attribute__((visibility("hidden")))
178 memset(void *b
, int c
, size_t len
)
180 return _libkernel_string_functions
->memset(b
, c
, len
);
183 __attribute__((visibility("hidden")))
185 strchr(const char *s
, int c
)
187 return _libkernel_string_functions
->strchr(s
, c
);
190 __attribute__((visibility("hidden")))
192 index(const char *s
, int c
)
194 return _libkernel_string_functions
->strchr(s
, c
);
197 __attribute__((visibility("hidden")))
199 strcmp(const char *s1
, const char *s2
)
201 return _libkernel_string_functions
->strcmp(s1
, s2
);
204 __attribute__((visibility("hidden")))
206 strcpy(char * restrict dst
, const char * restrict src
)
208 return _libkernel_string_functions
->strcpy(dst
, src
);
211 __attribute__((visibility("hidden")))
213 strlcat(char * restrict dst
, const char * restrict src
, size_t maxlen
)
215 return _libkernel_string_functions
->strlcat(dst
, src
, maxlen
);
218 __attribute__((visibility("hidden")))
220 strlcpy(char * restrict dst
, const char * restrict src
, size_t maxlen
)
222 return _libkernel_string_functions
->strlcpy(dst
, src
, maxlen
);
225 __attribute__((visibility("hidden")))
227 strlen(const char *str
)
229 return _libkernel_string_functions
->strlen(str
);
232 __attribute__((visibility("hidden")))
234 strncmp(const char *s1
, const char *s2
, size_t n
)
236 return _libkernel_string_functions
->strncmp(s1
, s2
, n
);
239 __attribute__((visibility("hidden")))
241 strncpy(char * restrict dst
, const char * restrict src
, size_t maxlen
)
243 return _libkernel_string_functions
->strncpy(dst
, src
, maxlen
);
246 __attribute__((visibility("hidden")))
248 strnlen(const char *s
, size_t maxlen
)
250 return _libkernel_string_functions
->strnlen(s
, maxlen
);
253 __attribute__((visibility("hidden")))
255 strstr(const char *s
, const char *find
)
257 return _libkernel_string_functions
->strstr(s
, find
);
261 * mach/mach.h voucher_mach_msg API
264 static const struct _libkernel_voucher_functions
265 _libkernel_voucher_functions_empty
;
266 static _libkernel_voucher_functions_t _libkernel_voucher_functions
=
267 &_libkernel_voucher_functions_empty
;
270 __libkernel_voucher_init(_libkernel_voucher_functions_t fns
)
272 _libkernel_voucher_functions
= fns
;
277 voucher_mach_msg_set(mach_msg_header_t
*msg
)
279 if (_libkernel_voucher_functions
->voucher_mach_msg_set
) {
280 return _libkernel_voucher_functions
->voucher_mach_msg_set(msg
);
286 voucher_mach_msg_clear(mach_msg_header_t
*msg
)
288 if (_libkernel_voucher_functions
->voucher_mach_msg_clear
) {
289 return _libkernel_voucher_functions
->voucher_mach_msg_clear(msg
);
293 voucher_mach_msg_state_t
294 voucher_mach_msg_adopt(mach_msg_header_t
*msg
)
296 if (_libkernel_voucher_functions
->voucher_mach_msg_adopt
) {
297 return _libkernel_voucher_functions
->voucher_mach_msg_adopt(msg
);
299 return VOUCHER_MACH_MSG_STATE_UNCHANGED
;
303 voucher_mach_msg_revert(voucher_mach_msg_state_t state
)
305 if (_libkernel_voucher_functions
->voucher_mach_msg_revert
) {
306 return _libkernel_voucher_functions
->voucher_mach_msg_revert(state
);