]>
Commit | Line | Data |
---|---|---|
197008ea A |
1 | /* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- |
2 | * | |
412ebb8e | 3 | * Copyright (c) 2009-2010 Apple Inc. All rights reserved. |
2028a915 A |
4 | * |
5 | * @APPLE_LICENSE_HEADER_START@ | |
6 | * | |
7 | * This file contains Original Code and/or Modifications of Original Code | |
8 | * as defined in and that are subject to the Apple Public Source License | |
9 | * Version 2.0 (the 'License'). You may not use this file except in | |
10 | * compliance with the License. Please obtain a copy of the License at | |
11 | * http://www.opensource.apple.com/apsl/ and read it before using this | |
12 | * file. | |
13 | * | |
14 | * The Original Code and all software distributed under the License are | |
15 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
16 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
17 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
18 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | |
19 | * Please see the License for the specific language governing rights and | |
20 | * limitations under the License. | |
21 | * | |
22 | * @APPLE_LICENSE_HEADER_END@ | |
23 | */ | |
24 | ||
412ebb8e | 25 | #include <Availability.h> |
39a8cd10 A |
26 | |
27 | // | |
39a8cd10 A |
28 | // This is the temporary private interface between libSystem.B.dylib and dyld |
29 | // | |
30 | ||
412ebb8e A |
31 | // |
32 | // Long ago, the compiler driver added -ldylib1.o to every dylib which caused a | |
33 | // __DATA,__dyld section to be added every dylib. The new LINKEDIT format no longer requires | |
34 | // images to have a __DATA,__dyld section. But until libdyld.dylib and dyld update | |
35 | // to some sort of vtable based interface, libdyld still needs a __DATA,__dyld section. | |
36 | // The code below adds that section. | |
37 | // | |
39a8cd10 A |
38 | struct __DATA__dyld { long lazy; int (*lookup)(const char*, void**); }; |
39 | ||
412ebb8e | 40 | static volatile struct __DATA__dyld myDyldSection __attribute__ ((section ("__DATA,__dyld"))) = { 0, 0 }; |
39a8cd10 | 41 | |
412ebb8e A |
42 | #if __arm__ && __MAC_OS_X_VERSION_MIN_REQUIRED |
43 | // <rdar://problem/8755380> | |
44 | // For historical reasons, gcc and llvm-gcc added -ldylib1.o to the link line of armv6 | |
45 | // dylibs when targeting MacOSX (but not iOS). clang cleans up that mistake, but doing | |
46 | // so would break the libdyld build. Making _dyld_func_lookup weak,hidden means if | |
47 | // dylib1.o is used, it overrides this, otherwise this implementation is used. | |
48 | __attribute__((weak)) | |
49 | #endif | |
50 | __attribute__((visibility("hidden"))) | |
51 | int _dyld_func_lookup(const char* dyld_func_name, void **address) | |
39a8cd10 A |
52 | { |
53 | return (*myDyldSection.lookup)(dyld_func_name, address); | |
54 | } | |
55 | ||
39a8cd10 A |
56 | |
57 | ||
2028a915 | 58 |