]>
git.saurik.com Git - apple/libpthread.git/blob - src/resolver.c
2 * Copyright (c) 2015 Apple Inc. All rights reserved.
4 * @APPLE_APACHE_LICENSE_HEADER_START@
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @APPLE_APACHE_LICENSE_HEADER_END@
21 #include "resolver_internal.h"
23 #define _OS_VARIANT_RESOLVER(s, v, ...) \
24 __attribute__((visibility(OS_STRINGIFY(v)))) extern void* s(void); \
26 __asm__(".symbol_resolver _" OS_STRINGIFY(s)); \
30 #define _OS_VARIANT_UPMP_RESOLVER(s, v) \
31 _OS_VARIANT_RESOLVER(s, v, \
32 uint32_t *_c = (void*)(uintptr_t)_COMM_PAGE_CPU_CAPABILITIES; \
34 extern void OS_VARIANT(s, up)(void); \
35 return &OS_VARIANT(s, up); \
37 extern void OS_VARIANT(s, mp)(void); \
38 return &OS_VARIANT(s, mp); \
41 #define OS_VARIANT_UPMP_RESOLVER(s) \
42 _OS_VARIANT_UPMP_RESOLVER(s, default)
44 #define OS_VARIANT_UPMP_RESOLVER_INTERNAL(s) \
45 _OS_VARIANT_UPMP_RESOLVER(s, hidden)
48 #ifdef OS_VARIANT_SELECTOR
50 OS_VARIANT_UPMP_RESOLVER(pthread_mutex_lock
)
51 OS_VARIANT_UPMP_RESOLVER(pthread_mutex_trylock
)
52 OS_VARIANT_UPMP_RESOLVER(pthread_mutex_unlock
)
54 #endif // OS_VARIANT_SELECTOR