]>
git.saurik.com Git - apple/libpthread.git/blob - src/resolver.c
cb9ae241d280a740a4c1cd59d2a5e9f370d9af34
   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