]> git.saurik.com Git - apple/libdispatch.git/blob - src/shims.h
libdispatch-339.92.1.tar.gz
[apple/libdispatch.git] / src / shims.h
1 /*
2 * Copyright (c) 2008-2013 Apple Inc. All rights reserved.
3 *
4 * @APPLE_APACHE_LICENSE_HEADER_START@
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 * @APPLE_APACHE_LICENSE_HEADER_END@
19 */
20
21 /*
22 * IMPORTANT: This header file describes INTERNAL interfaces to libdispatch
23 * which are subject to change in future releases of Mac OS X. Any applications
24 * relying on these interfaces WILL break.
25 */
26
27 #ifndef __DISPATCH_OS_SHIMS__
28 #define __DISPATCH_OS_SHIMS__
29
30 #include <pthread.h>
31 #if HAVE_PTHREAD_WORKQUEUES
32 #include <pthread_workqueue.h>
33 #endif
34 #if HAVE_PTHREAD_NP_H
35 #include <pthread_np.h>
36 #endif
37
38 #if !HAVE_DECL_FD_COPY
39 #define FD_COPY(f, t) (void)(*(t) = *(f))
40 #endif
41
42 #if TARGET_OS_WIN32
43 #define bzero(ptr,len) memset((ptr), 0, (len))
44 #define snprintf _snprintf
45
46 inline size_t strlcpy(char *dst, const char *src, size_t size) {
47 int res = strlen(dst) + strlen(src) + 1;
48 if (size > 0) {
49 size_t n = size - 1;
50 strncpy(dst, src, n);
51 dst[n] = 0;
52 }
53 return res;
54 }
55 #endif // TARGET_OS_WIN32
56
57 #if !HAVE_NORETURN_BUILTIN_TRAP
58 /*
59 * XXXRW: Work-around for possible clang bug in which __builtin_trap() is not
60 * marked noreturn, leading to a build error as dispatch_main() *is* marked
61 * noreturn. Mask by marking __builtin_trap() as noreturn locally.
62 */
63 DISPATCH_NORETURN
64 void __builtin_trap(void);
65 #endif
66
67 #if DISPATCH_HW_CONFIG_UP
68 #define DISPATCH_ATOMIC_UP 1
69 #endif
70
71 #include "shims/atomic.h"
72 #include "shims/atomic_sfb.h"
73 #include "shims/tsd.h"
74 #include "shims/hw_config.h"
75 #include "shims/perfmon.h"
76
77 #include "shims/getprogname.h"
78 #include "shims/time.h"
79
80 #ifdef __APPLE__
81 // Clear the stack before calling long-running thread-handler functions that
82 // never return (and don't take arguments), to facilitate leak detection and
83 // provide cleaner backtraces. <rdar://problem/9050566>
84 #define _dispatch_clear_stack(s) do { \
85 void *a[(s)/sizeof(void*) ? (s)/sizeof(void*) : 1]; \
86 a[0] = pthread_get_stackaddr_np(pthread_self()); \
87 bzero((void*)&a[1], (size_t)(a[0] - (void*)&a[1])); \
88 } while (0)
89 #else
90 #define _dispatch_clear_stack(s)
91 #endif
92
93 #endif