Mercurial > sdl-ios-xcode
annotate src/loadso/macosx/SDL_dlcompat.c @ 1982:3b4ce57c6215
First shot at new audio data types (int32 and float32).
Notable changes:
- Converters between types are autogenerated. Instead of making multiple
passes over the data with seperate filters for endianess, size, signedness,
etc, converting between data types is always one specialized filter. This
simplifies SDL_BuildAudioCVT(), which otherwise had a million edge cases
with the new types, and makes the actually conversions more CPU cache
friendly. Left a stub for adding specific optimized versions of these
routines (SSE/MMX/Altivec, assembler, etc)
- Autogenerated converters are built by SDL/src/audio/sdlgenaudiocvt.pl. This
does not need to be run unless tweaking the code, and thus doesn't need
integration into the build system.
- Went through all the drivers and tried to weed out all the "Uint16"
references that are better specified with the new SDL_AudioFormat typedef.
- Cleaned out a bunch of hardcoded bitwise magic numbers and replaced them
with new SDL_AUDIO_* macros.
- Added initial float32 and int32 support code. Theoretically, existing
drivers will push these through converters to get the data they want to
feed to the hardware.
Still TODO:
- Optimize and debug new converters.
- Update the CoreAudio backend to accept float32 data directly.
- Other backends, too?
- SDL_LoadWAV() needs to be updated to support int32 and float32 .wav files
(both of which exist and can be generated by 'sox' for testing purposes).
- Update the mixer to handle new datatypes.
- Optionally update SDL_sound and SDL_mixer, etc.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 24 Aug 2006 12:10:46 +0000 |
parents | c121d94672cb |
children | e1da92da346c |
rev | line source |
---|---|
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #ifdef SDL_LOADSO_DLCOMPAT |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 /* Please note that dlcompat apparently ships in current Mac OS X versions |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 * as a system library that provides compatibility with the Unix "dlopen" |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 * interface. In order to allow SDL to work on older OS X releases and also |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 * not conflict with the system lib on newer versions, we include dlcompat |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 * in SDL and change the symbols to prevent symbol clash with any existing |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 * system libraries. --ryan. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 /* here is the dlcompat license: */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 Copyright (c) 2002 Jorge Acereda <jacereda@users.sourceforge.net> & |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 Peter O'Gorman <ogorman@users.sourceforge.net> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 Portions may be copyright others, see the AUTHORS file included with this |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 distribution. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 Maintained by Peter O'Gorman <ogorman@users.sourceforge.net> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 Bug Reports and other queries should go to <ogorman@users.sourceforge.net> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 Permission is hereby granted, free of charge, to any person obtaining |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 a copy of this software and associated documentation files (the |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 "Software"), to deal in the Software without restriction, including |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 without limitation the rights to use, copy, modify, merge, publish, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 distribute, sublicense, and/or sell copies of the Software, and to |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 permit persons to whom the Software is furnished to do so, subject to |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 the following conditions: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 The above copyright notice and this permission notice shall be |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 included in all copies or substantial portions of the Software. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 #include <pthread.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 #include <sys/types.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 #include <sys/stat.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 #include <stdarg.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 #include <limits.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 #include <mach-o/dyld.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 #include <mach-o/nlist.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 #include <mach-o/getsect.h> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 #include "SDL_stdinc.h" |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 /* Just playing to see if it would compile with the freebsd headers, it does, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 * but because of the different values for RTLD_LOCAL etc, it would break binary |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 * compat... oh well |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 #ifndef __BSD_VISIBLE |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 #define __BSD_VISIBLE 1 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 /*include "dlfcn.h"*/ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 #ifdef __cplusplus |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
88 extern "C" |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
89 { |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 #if defined (__GNUC__) && __GNUC__ > 3 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 #define dl_restrict __restrict |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 #else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 #define dl_restrict |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 #if 0 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 #ifndef _POSIX_SOURCE |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 * Structure filled in by dladdr(). |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
103 typedef struct SDL_OSX_dl_info |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
104 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
105 const char *dli_fname; /* Pathname of shared object */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
106 void *dli_fbase; /* Base address of shared object */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
107 const char *dli_sname; /* Name of nearest symbol */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
108 void *dli_saddr; /* Address of nearest symbol */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
109 } SDL_OSX_Dl_info; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
111 static int SDL_OSX_dladdr(const void *dl_restrict, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
112 SDL_OSX_Dl_info * dl_restrict); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
113 #endif /* ! _POSIX_SOURCE */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
114 #endif /* 0 */ |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
116 static int SDL_OSX_dlclose(void *handle); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
117 static const char *SDL_OSX_dlerror(void); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
118 static void *SDL_OSX_dlopen(const char *path, int mode); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
119 static void *SDL_OSX_dlsym(void *dl_restrict handle, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
120 const char *dl_restrict symbol); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 #define RTLD_LAZY 0x1 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 #define RTLD_NOW 0x2 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 #define RTLD_LOCAL 0x4 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 #define RTLD_GLOBAL 0x8 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 #ifndef _POSIX_SOURCE |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 #define RTLD_NOLOAD 0x10 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 #define RTLD_NODELETE 0x80 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 * Special handle arguments for SDL_OSX_dlsym(). |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
134 #define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
135 #define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
136 #endif /* ! _POSIX_SOURCE */ |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 #ifdef __cplusplus |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 #ifndef dl_restrict |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 #define dl_restrict __restrict |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 /* This is not available on 10.1 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 #ifndef LC_LOAD_WEAK_DYLIB |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 #define LC_LOAD_WEAK_DYLIB (0x18 | LC_REQ_DYLD) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 /* With this stuff here, this thing may actually compile/run on 10.0 systems |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 * Not that I have a 10.0 system to test it on anylonger |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 #ifndef LC_REQ_DYLD |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 #define LC_REQ_DYLD 0x80000000 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 #ifndef NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 #define NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED 0x4 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 #ifndef NSADDIMAGE_OPTION_RETURN_ON_ERROR |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 #define NSADDIMAGE_OPTION_RETURN_ON_ERROR 0x1 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 #ifndef NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 #define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND 0x0 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 #ifndef NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 #define NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR 0x4 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 /* These symbols will be looked for in dyld */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
169 static const struct mach_header *(*dyld_NSAddImage) (const char *, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
170 unsigned long) = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
171 static int (*dyld_NSIsSymbolNameDefinedInImage) (const struct mach_header *, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
172 const char *) = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
173 static NSSymbol(*dyld_NSLookupSymbolInImage) (const struct mach_header *, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
174 const char *, unsigned long) = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
175 0; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 /* Define this to make dlcompat reuse data block. This way in theory we save |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 * a little bit of overhead. However we then couldn't correctly catch excess |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 * calls to SDL_OSX_dlclose(). Hence we don't use this feature |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 #undef REUSE_STATUS |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 /* Size of the internal error message buffer (used by dlerror()) */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 #define ERR_STR_LEN 251 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 /* Maximum number of search paths supported by getSearchPath */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 #define MAX_SEARCH_PATHS 32 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 #define MAGIC_DYLIB_OFI ((NSObjectFileImage) 'DYOF') |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 #define MAGIC_DYLIB_MOD ((NSModule) 'DYMO') |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 /* internal flags */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 #define DL_IN_LIST 0x01 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 /* our mutex */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 static pthread_mutex_t dlcompat_mutex; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 /* Our thread specific storage |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 static pthread_key_t dlerror_key; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 struct dlthread |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
204 int lockcnt; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
205 unsigned char errset; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
206 char errstr[ERR_STR_LEN]; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 }; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 /* This is our central data structure. Whenever a module is loaded via |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 * SDL_OSX_dlopen(), we create such a struct. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 struct dlstatus |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
214 struct dlstatus *next; /* pointer to next element in the linked list */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
215 NSModule module; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
216 const struct mach_header *lib; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
217 int refs; /* reference count */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
218 int mode; /* mode in which this module was loaded */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
219 dev_t device; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
220 ino_t inode; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
221 int flags; /* Any internal flags we may need */ |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 }; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
224 /* Head node of the dlstatus list */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
225 static struct dlstatus mainStatus = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
226 { 0, MAGIC_DYLIB_MOD, NULL, -1, RTLD_GLOBAL, 0, 0, 0 }; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 static struct dlstatus *stqueue = &mainStatus; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 /* Storage for the last error message (used by dlerror()) */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 /* static char err_str[ERR_STR_LEN]; */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 /* static int err_filled = 0; */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 /* Prototypes to internal functions */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 static void debug(const char *fmt, ...); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 static void error(const char *str, ...); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 static const char *safegetenv(const char *s); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 static const char *searchList(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 static const char *getSearchPath(int i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 static const char *getFullPath(int i, const char *file); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 static const struct stat *findFile(const char *file, const char **fullPath); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 static int isValidStatus(struct dlstatus *status); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 static inline int isFlagSet(int mode, int flag); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 static struct dlstatus *lookupStatus(const struct stat *sbuf); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 static void insertStatus(struct dlstatus *dls, const struct stat *sbuf); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 static int promoteLocalToGlobal(struct dlstatus *dls); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 static void *reference(struct dlstatus *dls, int mode); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
248 static void *dlsymIntern(struct dlstatus *dls, const char *symbol, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
249 int canSetError); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 static struct dlstatus *allocStatus(void); |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
251 static struct dlstatus *loadModule(const char *path, const struct stat *sbuf, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
252 int mode); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
253 static NSSymbol search_linked_libs(const struct mach_header *mh, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
254 const char *symbol); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 static const char *get_lib_name(const struct mach_header *mh); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 static const struct mach_header *get_mach_header_from_NSModule(NSModule mod); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 static void dlcompat_init_func(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 static inline void dlcompat_init_check(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 static inline void dolock(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 static inline void dounlock(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 static void dlerrorfree(void *data); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 static void resetdlerror(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 static const struct mach_header *my_find_image(const char *name); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 static const struct mach_header *image_for_address(const void *address); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 static inline char *dyld_error_str(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 #if FINK_BUILD |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 /* Two Global Functions */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 static void *dlsym_prepend_underscore(void *handle, const char *symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 static void *dlsym_auto_underscore(void *handle, const char *symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 /* And their _intern counterparts */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
273 static void *dlsym_prepend_underscore_intern(void *handle, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
274 const char *symbol); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 static void *dlsym_auto_underscore_intern(void *handle, const char *symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 /* Functions */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
280 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
281 debug(const char *fmt, ...) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 #if DEBUG > 1 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
284 va_list arg; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
285 va_start(arg, fmt); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
286 fprintf(stderr, "DLDEBUG: "); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
287 vfprintf(stderr, fmt, arg); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
288 fprintf(stderr, "\n"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
289 fflush(stderr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
290 va_end(arg); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
294 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
295 error(const char *str, ...) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
297 va_list arg; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
298 struct dlthread *tss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
299 char *err_str; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
300 va_start(arg, str); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
301 tss = pthread_getspecific(dlerror_key); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
302 err_str = tss->errstr; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
303 SDL_strlcpy(err_str, "dlcompat: ", ERR_STR_LEN); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
304 vsnprintf(err_str + 10, ERR_STR_LEN - 10, str, arg); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
305 va_end(arg); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
306 debug("ERROR: %s\n", err_str); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
307 tss->errset = 1; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
310 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
311 warning(const char *str) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 #if DEBUG > 0 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
314 fprintf(stderr, "WARNING: dlcompat: %s\n", str); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
318 static const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
319 safegetenv(const char *s) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
321 const char *ss = SDL_getenv(s); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
322 return ss ? ss : ""; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 /* because this is only used for debugging and error reporting functions, we |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 * don't really care about how elegant it is... it could use the load |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 * commands to find the install name of the library, but... |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
329 static const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
330 get_lib_name(const struct mach_header *mh) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
332 unsigned long count = _dyld_image_count(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
333 unsigned long i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
334 const char *val = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
335 if (mh) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
336 for (i = 0; i < count; i++) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
337 if (mh == _dyld_get_image_header(i)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
338 val = _dyld_get_image_name(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
339 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
340 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
341 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
342 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
343 return val; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 /* Returns the mach_header for the module bu going through all the loaded images |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 * and finding the one with the same name as the module. There really ought to be |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 * an api for doing this, would be faster, but there isn't one right now |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
350 static const struct mach_header * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
351 get_mach_header_from_NSModule(NSModule mod) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
353 const char *mod_name = NSNameOfModule(mod); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
354 const struct mach_header *mh = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
355 unsigned long count = _dyld_image_count(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
356 unsigned long i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
357 debug("Module name: %s", mod_name); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
358 for (i = 0; i < count; i++) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
359 if (!SDL_strcmp(mod_name, _dyld_get_image_name(i))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
360 mh = _dyld_get_image_header(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
361 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
362 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
363 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
364 return mh; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 /* Compute and return a list of all directories that we should search when |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 * trying to locate a module. We first look at the values of LD_LIBRARY_PATH |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 * and DYLD_LIBRARY_PATH, and then finally fall back to looking into |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 * /usr/lib and /lib. Since both of the environments variables can contain a |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 * list of colon seperated paths, we simply concat them and the two other paths |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 * into one big string, which we then can easily parse. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 * Splitting this string into the actual path list is done by getSearchPath() |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
376 static const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
377 searchList() |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
379 size_t buf_size; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
380 static char *buf = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
381 const char *ldlp = safegetenv("LD_LIBRARY_PATH"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
382 const char *dyldlp = safegetenv("DYLD_LIBRARY_PATH"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
383 const char *stdpath = SDL_getenv("DYLD_FALLBACK_LIBRARY_PATH"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
384 if (!stdpath) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
385 stdpath = "/usr/local/lib:/lib:/usr/lib"; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
386 if (!buf) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
387 buf_size = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
388 SDL_strlen(ldlp) + SDL_strlen(dyldlp) + SDL_strlen(stdpath) + 4; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
389 buf = SDL_malloc(buf_size); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
390 SDL_snprintf(buf, buf_size, "%s%s%s%s%s%c", dyldlp, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
391 (dyldlp[0] ? ":" : ""), ldlp, (ldlp[0] ? ":" : ""), |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
392 stdpath, '\0'); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
393 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
394 return buf; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
395 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
396 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
397 /* Returns the ith search path from the list as computed by searchList() */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
398 static const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
399 getSearchPath(int i) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
400 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
401 static const char *list = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
402 static char **path = (char **) 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
403 static int end = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
404 static int numsize = MAX_SEARCH_PATHS; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
405 static char **tmp; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
406 /* So we can call SDL_free() in the "destructor" we use i=-1 to return the alloc'd array */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
407 if (i == -1) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
408 return (const char *) path; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
409 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
410 if (!path) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
411 path = (char **) SDL_calloc(MAX_SEARCH_PATHS, sizeof(char **)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
412 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
413 if (!list && !end) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
414 list = searchList(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
415 if (i >= (numsize)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
416 debug("Increasing size for long PATH"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
417 tmp = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
418 (char **) SDL_calloc((MAX_SEARCH_PATHS + numsize), |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
419 sizeof(char **)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
420 if (tmp) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
421 SDL_memcpy(tmp, path, sizeof(char **) * numsize); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
422 SDL_free(path); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
423 path = tmp; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
424 numsize += MAX_SEARCH_PATHS; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
425 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
426 return 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
427 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
428 } |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
430 while (!path[i] && !end) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
431 path[i] = strsep((char **) &list, ":"); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
432 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
433 if (path[i][0] == 0) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
434 path[i] = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
435 end = (list == 0); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
436 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
437 return path[i]; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
438 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
439 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
440 static const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
441 getFullPath(int i, const char *file) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
442 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
443 static char buf[PATH_MAX]; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
444 const char *path = getSearchPath(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
445 if (path) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
446 SDL_snprintf(buf, PATH_MAX, "%s/%s", path, file); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
447 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
448 return path ? buf : 0; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
449 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
450 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
451 /* Given a file name, try to determine the full path for that file. Starts |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
452 * its search in the current directory, and then tries all paths in the |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
453 * search list in the order they are specified there. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
454 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
455 static const struct stat * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
456 findFile(const char *file, const char **fullPath) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
457 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
458 int i = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
459 static struct stat sbuf; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
460 char *fileName; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
461 debug("finding file %s", file); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
462 *fullPath = file; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
463 if (0 == stat(file, &sbuf)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
464 return &sbuf; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
465 if (SDL_strchr(file, '/')) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
466 return 0; /* If the path had a / we don't look in env var places */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
467 fileName = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
468 if (!fileName) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
469 fileName = (char *) file; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
470 while ((*fullPath = getFullPath(i++, fileName))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
471 if (0 == stat(*fullPath, &sbuf)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
472 return &sbuf; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
473 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
474 ; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
475 return 0; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
477 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
478 /* Determine whether a given dlstatus is valid or not */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
479 static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
480 isValidStatus(struct dlstatus *status) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
481 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
482 /* Walk the list to verify status is contained in it */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
483 struct dlstatus *dls = stqueue; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
484 while (dls && status != dls) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
485 dls = dls->next; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
486 if (dls == 0) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
487 error("invalid handle"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
488 else if ((dls->module == 0) || (dls->refs == 0)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
489 error("handle to closed library"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
490 else |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
491 return TRUE; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
492 return FALSE; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
493 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
494 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
495 static inline int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
496 isFlagSet(int mode, int flag) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
497 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
498 return (mode & flag) == flag; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
499 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
500 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
501 static struct dlstatus * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
502 lookupStatus(const struct stat *sbuf) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
503 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
504 struct dlstatus *dls = stqueue; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
505 debug("looking for status"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
506 while (dls && ( /* isFlagSet(dls->mode, RTLD_UNSHARED) */ 0 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
507 || sbuf->st_dev != dls->device |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
508 || sbuf->st_ino != dls->inode)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
509 dls = dls->next; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
510 return dls; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
511 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
513 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
514 insertStatus(struct dlstatus *dls, const struct stat *sbuf) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
515 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
516 debug("inserting status"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
517 dls->inode = sbuf->st_ino; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
518 dls->device = sbuf->st_dev; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
519 dls->refs = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
520 dls->mode = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
521 if ((dls->flags & DL_IN_LIST) == 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
522 dls->next = stqueue; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
523 stqueue = dls; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
524 dls->flags |= DL_IN_LIST; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
525 } |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
527 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
528 static struct dlstatus * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
529 allocStatus() |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
530 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
531 struct dlstatus *dls; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
532 #ifdef REUSE_STATUS |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
533 dls = stqueue; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
534 while (dls && dls->module) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
535 dls = dls->next; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
536 if (!dls) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
537 #endif |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
538 dls = SDL_calloc(sizeof(*dls), 1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
539 return dls; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
540 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
541 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
542 static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
543 promoteLocalToGlobal(struct dlstatus *dls) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
545 static int (*p) (NSModule module) = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
546 debug("promoting"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
547 if (!p) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
548 _dyld_func_lookup("__dyld_NSMakePrivateModulePublic", (void **) &p); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
549 return (dls->module == MAGIC_DYLIB_MOD) || (p && p(dls->module)); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
551 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
552 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
553 reference(struct dlstatus *dls, int mode) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
555 if (dls) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
556 if (dls->module == MAGIC_DYLIB_MOD && isFlagSet(mode, RTLD_LOCAL)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
557 warning("trying to open a .dylib with RTLD_LOCAL"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
558 error("unable to open a .dylib with RTLD_LOCAL"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
559 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
560 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
561 if (isFlagSet(mode, RTLD_GLOBAL) && !isFlagSet(dls->mode, RTLD_GLOBAL) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
562 && !promoteLocalToGlobal(dls)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
563 error("unable to promote local module to global"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
564 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
565 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
566 dls->mode |= mode; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
567 dls->refs++; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
568 } else |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
569 debug("reference called with NULL argument"); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
571 return dls; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
572 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
573 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
574 static const struct mach_header * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
575 my_find_image(const char *name) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
576 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
577 const struct mach_header *mh = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
578 const char *id = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
579 int i = _dyld_image_count(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
580 int j; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
581 mh = (struct mach_header *) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
582 dyld_NSAddImage(name, NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED | |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
583 NSADDIMAGE_OPTION_RETURN_ON_ERROR); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
584 if (!mh) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
585 for (j = 0; j < i; j++) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
586 id = _dyld_get_image_name(j); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
587 if (!SDL_strcmp(id, name)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
588 mh = _dyld_get_image_header(j); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
589 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
590 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
591 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
592 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
593 return mh; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
594 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
595 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
596 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
597 * dyld adds libraries by first adding the directly dependant libraries in link order, and |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
598 * then adding the dependencies for those libraries, so we should do the same... but we don't |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
599 * bother adding the extra dependencies, if the symbols are neither in the loaded image nor |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
600 * any of it's direct dependencies, then it probably isn't there. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
601 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
602 static NSSymbol |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
603 search_linked_libs(const struct mach_header *mh, const char *symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
604 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
605 unsigned int n; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
606 struct load_command *lc = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
607 struct mach_header *wh; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
608 NSSymbol nssym = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
609 if (dyld_NSAddImage && dyld_NSIsSymbolNameDefinedInImage |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
610 && dyld_NSLookupSymbolInImage) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
611 lc = (struct load_command *) ((char *) mh + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
612 sizeof(struct mach_header)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
613 for (n = 0; n < mh->ncmds; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
614 n++, lc = (struct load_command *) ((char *) lc + lc->cmdsize)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
615 if ((LC_LOAD_DYLIB == lc->cmd) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
616 || (LC_LOAD_WEAK_DYLIB == lc->cmd)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
617 if ((wh = (struct mach_header *) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
618 my_find_image((char |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
619 *) (((struct dylib_command *) lc)-> |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
620 dylib.name.offset + (char *) lc)))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
621 if (dyld_NSIsSymbolNameDefinedInImage(wh, symbol)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
622 nssym = dyld_NSLookupSymbolInImage(wh, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
623 symbol, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
624 NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
625 | |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
626 NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
627 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
628 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
629 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
630 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
631 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
632 if ((!nssym) && NSIsSymbolNameDefined(symbol)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
633 /* I've never seen this debug message... */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
634 debug("Symbol \"%s\" is defined but was not found", symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
635 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
636 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
637 return nssym; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
638 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
639 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
640 /* Up to the caller to SDL_free() returned string */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
641 static inline char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
642 dyld_error_str() |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
643 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
644 NSLinkEditErrors dylder; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
645 int dylderno; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
646 const char *dylderrstr; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
647 const char *dyldfile; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
648 char *retStr = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
649 NSLinkEditError(&dylder, &dylderno, &dyldfile, &dylderrstr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
650 if (dylderrstr && *dylderrstr) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
651 retStr = SDL_strdup(dylderrstr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
652 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
653 return retStr; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
654 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
655 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
656 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
657 dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetError) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
658 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
659 NSSymbol nssym = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
660 #ifdef __GCC__ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
661 void *caller = __builtin_return_address(1); /* Be *very* careful about inlining */ |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
662 #else |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
663 void *caller = NULL; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
664 #endif |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
665 const struct mach_header *caller_mh = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
666 char *savedErrorStr = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
667 resetdlerror(); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
668 #ifndef RTLD_SELF |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
669 #define RTLD_SELF ((void *) -3) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
670 #endif |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
671 if (NULL == dls) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
672 dls = RTLD_SELF; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
673 if ((RTLD_NEXT == dls) || (RTLD_SELF == dls)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
674 if (dyld_NSIsSymbolNameDefinedInImage && dyld_NSLookupSymbolInImage |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
675 && caller) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
676 caller_mh = image_for_address(caller); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
677 if (RTLD_SELF == dls) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
678 /* FIXME: We should be using the NSModule api, if SELF is an MH_BUNDLE |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
679 * But it appears to work anyway, and looking at the code in dyld_libfuncs.c |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
680 * this is acceptable. |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
681 */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
682 if (dyld_NSIsSymbolNameDefinedInImage(caller_mh, symbol)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
683 nssym = dyld_NSLookupSymbolInImage(caller_mh, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
684 symbol, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
685 NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
686 | |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
687 NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
688 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
689 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
690 if (!nssym) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
691 if (RTLD_SELF == dls) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
692 savedErrorStr = dyld_error_str(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
693 nssym = search_linked_libs(caller_mh, symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
694 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
695 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
696 if (canSetError) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
697 error("RTLD_SELF and RTLD_NEXT are not supported"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
698 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
699 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
700 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
701 if (!nssym) { |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
702 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
703 if (RTLD_DEFAULT == dls) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
704 dls = &mainStatus; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
705 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
706 if (!isValidStatus(dls)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
707 return NULL; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
708 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
709 if (dls->module != MAGIC_DYLIB_MOD) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
710 nssym = NSLookupSymbolInModule(dls->module, symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
711 if (!nssym && NSIsSymbolNameDefined(symbol)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
712 debug("Searching dependencies"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
713 savedErrorStr = dyld_error_str(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
714 nssym = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
715 search_linked_libs(get_mach_header_from_NSModule |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
716 (dls->module), symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
717 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
718 } else if (dls->lib && dyld_NSIsSymbolNameDefinedInImage |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
719 && dyld_NSLookupSymbolInImage) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
720 if (dyld_NSIsSymbolNameDefinedInImage(dls->lib, symbol)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
721 nssym = dyld_NSLookupSymbolInImage(dls->lib, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
722 symbol, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
723 NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
724 | |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
725 NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
726 } else if (NSIsSymbolNameDefined(symbol)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
727 debug("Searching dependencies"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
728 savedErrorStr = dyld_error_str(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
729 nssym = search_linked_libs(dls->lib, symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
730 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
731 } else if (dls->module == MAGIC_DYLIB_MOD) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
732 /* Global context, use NSLookupAndBindSymbol */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
733 if (NSIsSymbolNameDefined(symbol)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
734 /* There doesn't seem to be a return on error option for this call??? |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
735 this is potentially broken, if binding fails, it will improperly |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
736 exit the application. */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
737 nssym = NSLookupAndBindSymbol(symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
738 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
739 if (savedErrorStr) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
740 SDL_free(savedErrorStr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
741 savedErrorStr = SDL_malloc(256); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
742 SDL_snprintf(savedErrorStr, 256, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
743 "Symbol \"%s\" not in global context", symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
744 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
745 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
746 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
747 /* Error reporting */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
748 if (!nssym) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
749 if (!savedErrorStr || !SDL_strlen(savedErrorStr)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
750 if (savedErrorStr) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
751 SDL_free(savedErrorStr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
752 savedErrorStr = SDL_malloc(256); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
753 SDL_snprintf(savedErrorStr, 256, "Symbol \"%s\" not found", |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
754 symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
755 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
756 if (canSetError) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
757 error(savedErrorStr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
758 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
759 debug(savedErrorStr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
760 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
761 if (savedErrorStr) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
762 SDL_free(savedErrorStr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
763 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
764 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
765 return NSAddressOfSymbol(nssym); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
766 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
767 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
768 static struct dlstatus * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
769 loadModule(const char *path, const struct stat *sbuf, int mode) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
770 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
771 NSObjectFileImage ofi = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
772 NSObjectFileImageReturnCode ofirc; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
773 struct dlstatus *dls; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
774 NSLinkEditErrors ler; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
775 int lerno; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
776 const char *errstr; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
777 const char *file; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
778 void (*init) (void); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
779 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
780 ofirc = NSCreateObjectFileImageFromFile(path, &ofi); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
781 switch (ofirc) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
782 case NSObjectFileImageSuccess: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
783 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
784 case NSObjectFileImageInappropriateFile: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
785 if (dyld_NSAddImage && dyld_NSIsSymbolNameDefinedInImage |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
786 && dyld_NSLookupSymbolInImage) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
787 if (isFlagSet(mode, RTLD_LOCAL)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
788 warning("trying to open a .dylib with RTLD_LOCAL"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
789 error("unable to open this file with RTLD_LOCAL"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
790 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
791 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
792 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
793 error("opening this file is unsupported on this system"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
794 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
795 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
796 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
797 case NSObjectFileImageFailure: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
798 error("object file setup failure"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
799 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
800 case NSObjectFileImageArch: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
801 error("no object for this architecture"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
802 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
803 case NSObjectFileImageFormat: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
804 error("bad object file format"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
805 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
806 case NSObjectFileImageAccess: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
807 error("can't read object file"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
808 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
809 default: |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
810 error("unknown error from NSCreateObjectFileImageFromFile()"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
811 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
812 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
813 dls = lookupStatus(sbuf); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
814 if (!dls) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
815 dls = allocStatus(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
816 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
817 if (!dls) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
818 error("unable to allocate memory"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
819 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
820 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
821 // dls->lib = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
822 if (ofirc == NSObjectFileImageInappropriateFile) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
823 if ((dls->lib = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
824 dyld_NSAddImage(path, NSADDIMAGE_OPTION_RETURN_ON_ERROR))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
825 debug("Dynamic lib loaded at %ld", dls->lib); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
826 ofi = MAGIC_DYLIB_OFI; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
827 dls->module = MAGIC_DYLIB_MOD; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
828 ofirc = NSObjectFileImageSuccess; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
829 /* Although it is possible with a bit of work to modify this so it works and |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
830 functions with RTLD_NOW, I don't deem it necessary at the moment */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
831 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
832 if (!(dls->module)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
833 NSLinkEditError(&ler, &lerno, &file, &errstr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
834 if (!errstr || (!SDL_strlen(errstr))) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
835 error("Can't open this file type"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
836 else |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
837 error(errstr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
838 if ((dls->flags & DL_IN_LIST) == 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
839 SDL_free(dls); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
840 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
841 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
842 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
843 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
844 dls->module = NSLinkModule(ofi, path, |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
845 NSLINKMODULE_OPTION_RETURN_ON_ERROR | |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
846 NSLINKMODULE_OPTION_PRIVATE | |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
847 (isFlagSet(mode, RTLD_NOW) ? |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
848 NSLINKMODULE_OPTION_BINDNOW : 0)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
849 NSDestroyObjectFileImage(ofi); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
850 if (dls->module) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
851 dls->lib = get_mach_header_from_NSModule(dls->module); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
852 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
853 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
854 if (!dls->module) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
855 NSLinkEditError(&ler, &lerno, &file, &errstr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
856 if ((dls->flags & DL_IN_LIST) == 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
857 SDL_free(dls); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
858 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
859 error(errstr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
860 return NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
861 } |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
862 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
863 insertStatus(dls, sbuf); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
864 dls = reference(dls, mode); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
865 if ((init = dlsymIntern(dls, "__init", 0))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
866 debug("calling _init()"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
867 init(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
868 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
869 return dls; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
870 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
871 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
872 inline static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
873 dlcompat_init_check(void) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
874 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
875 static pthread_mutex_t l = PTHREAD_MUTEX_INITIALIZER; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
876 static int init_done = 0; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
877 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
878 pthread_mutex_lock(&l); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
879 if (!init_done) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
880 dlcompat_init_func(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
881 init_done = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
882 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
883 pthread_mutex_unlock(&l); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
884 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
885 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
886 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
887 dlcompat_init_func(void) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
888 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
889 _dyld_func_lookup("__dyld_NSAddImage", (void **) &dyld_NSAddImage); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
890 _dyld_func_lookup("__dyld_NSIsSymbolNameDefinedInImage", |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
891 (void **) &dyld_NSIsSymbolNameDefinedInImage); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
892 _dyld_func_lookup("__dyld_NSLookupSymbolInImage", |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
893 (void **) &dyld_NSLookupSymbolInImage); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
894 if (pthread_mutex_init(&dlcompat_mutex, NULL)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
895 exit(1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
896 if (pthread_key_create(&dlerror_key, &dlerrorfree)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
897 exit(1); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
898 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
899 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
900 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
901 resetdlerror() |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
902 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
903 struct dlthread *tss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
904 tss = pthread_getspecific(dlerror_key); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
905 tss->errset = 0; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
906 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
907 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
908 static void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
909 dlerrorfree(void *data) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
910 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
911 SDL_free(data); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
912 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
913 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
914 /* We kind of want a recursive lock here, but meet a little trouble |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
915 * because they are not available pre OS X 10.2, so we fake it |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
916 * using thread specific storage to keep a lock count |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
917 */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
918 static inline void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
919 dolock(void) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
920 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
921 int err = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
922 struct dlthread *tss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
923 dlcompat_init_check(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
924 tss = pthread_getspecific(dlerror_key); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
925 if (!tss) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
926 tss = SDL_malloc(sizeof(struct dlthread)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
927 tss->lockcnt = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
928 tss->errset = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
929 if (pthread_setspecific(dlerror_key, tss)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
930 fprintf(stderr, "dlcompat: pthread_setspecific failed\n"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
931 exit(1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
932 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
933 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
934 if (!tss->lockcnt) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
935 err = pthread_mutex_lock(&dlcompat_mutex); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
936 tss->lockcnt = tss->lockcnt + 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
937 if (err) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
938 exit(err); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
939 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
940 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
941 static inline void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
942 dounlock(void) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
943 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
944 int err = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
945 struct dlthread *tss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
946 tss = pthread_getspecific(dlerror_key); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
947 tss->lockcnt = tss->lockcnt - 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
948 if (!tss->lockcnt) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
949 err = pthread_mutex_unlock(&dlcompat_mutex); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
950 if (err) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
951 exit(err); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
952 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
953 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
954 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
955 SDL_OSX_dlopen(const char *path, int mode) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
956 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
957 const struct stat *sbuf; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
958 struct dlstatus *dls; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
959 const char *fullPath; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
960 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
961 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
962 resetdlerror(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
963 if (!path) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
964 dls = &mainStatus; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
965 goto dlopenok; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
966 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
967 if (!(sbuf = findFile(path, &fullPath))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
968 error("file \"%s\" not found", path); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
969 goto dlopenerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
970 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
971 /* Now checks that it hasn't been closed already */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
972 if ((dls = lookupStatus(sbuf)) && (dls->refs > 0)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
973 /* debug("status found"); */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
974 dls = reference(dls, mode); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
975 goto dlopenok; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
976 } |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
977 #ifdef RTLD_NOLOAD |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
978 if (isFlagSet(mode, RTLD_NOLOAD)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
979 error("no existing handle and RTLD_NOLOAD specified"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
980 goto dlopenerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
981 } |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
982 #endif |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
983 if (isFlagSet(mode, RTLD_LAZY) && isFlagSet(mode, RTLD_NOW)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
984 error("how can I load something both RTLD_LAZY and RTLD_NOW?"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
985 goto dlopenerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
986 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
987 dls = loadModule(fullPath, sbuf, mode); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
988 |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
989 dlopenok: |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
990 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
991 return (void *) dls; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
992 dlopenerror: |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
993 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
994 return NULL; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
995 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
996 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
997 #if !FINK_BUILD |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
998 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
999 SDL_OSX_dlsym(void *dl_restrict handle, const char *dl_restrict symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1000 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1001 int sym_len = SDL_strlen(symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1002 void *value = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1003 char *malloc_sym = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1004 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1005 malloc_sym = SDL_malloc(sym_len + 2); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1006 if (malloc_sym) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1007 SDL_snprintf(malloc_sym, sym_len + 2, "_%s", symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1008 value = dlsymIntern(handle, malloc_sym, 1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1009 SDL_free(malloc_sym); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1010 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1011 error("Unable to allocate memory"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1012 goto dlsymerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1013 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1014 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1015 return value; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1016 dlsymerror: |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1017 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1018 return NULL; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1019 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1020 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1021 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1022 #if FINK_BUILD |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1023 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1024 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1025 dlsym_prepend_underscore(void *handle, const char *symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1026 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1027 void *answer; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1028 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1029 answer = dlsym_prepend_underscore_intern(handle, symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1030 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1031 return answer; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1032 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1033 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1034 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1035 dlsym_prepend_underscore_intern(void *handle, const char *symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1036 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1037 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1038 * A quick and easy way for porting packages which call dlsym(handle,"sym") |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1039 * If the porter adds -Ddlsym=dlsym_prepend_underscore to the CFLAGS then |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1040 * this function will be called, and will add the required underscore. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1041 * |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1042 * Note that I haven't figured out yet which should be "standard", prepend |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1043 * the underscore always, or not at all. These global functions need to go away |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1044 * for opendarwin. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1045 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1046 int sym_len = SDL_strlen(symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1047 void *value = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1048 char *malloc_sym = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1049 malloc_sym = SDL_malloc(sym_len + 2); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1050 if (malloc_sym) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1051 SDL_snprintf(malloc_sym, sym_len + 2, "_%s", symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1052 value = dlsymIntern(handle, malloc_sym, 1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1053 SDL_free(malloc_sym); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1054 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1055 error("Unable to allocate memory"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1056 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1057 return value; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1058 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1059 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1060 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1061 dlsym_auto_underscore(void *handle, const char *symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1062 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1063 void *answer; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1064 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1065 answer = dlsym_auto_underscore_intern(handle, symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1066 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1067 return answer; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1068 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1069 } |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1070 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1071 dlsym_auto_underscore_intern(void *handle, const char *symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1072 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1073 struct dlstatus *dls = handle; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1074 void *addr = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1075 addr = dlsymIntern(dls, symbol, 0); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1076 if (!addr) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1077 addr = dlsym_prepend_underscore_intern(handle, symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1078 return addr; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1079 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1080 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1081 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1082 static void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1083 SDL_OSX_dlsym(void *dl_restrict handle, const char *dl_restrict symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1084 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1085 struct dlstatus *dls = handle; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1086 void *addr = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1087 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1088 addr = dlsymIntern(dls, symbol, 1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1089 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1090 return addr; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1091 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1092 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1093 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1094 static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1095 SDL_OSX_dlclose(void *handle) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1096 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1097 struct dlstatus *dls = handle; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1098 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1099 resetdlerror(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1100 if (!isValidStatus(dls)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1101 goto dlcloseerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1102 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1103 if (dls->module == MAGIC_DYLIB_MOD) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1104 const char *name; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1105 if (!dls->lib) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1106 name = "global context"; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1107 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1108 name = get_lib_name(dls->lib); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1109 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1110 warning("trying to close a .dylib!"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1111 error("Not closing \"%s\" - dynamic libraries cannot be closed", |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1112 name); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1113 goto dlcloseerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1114 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1115 if (!dls->module) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1116 error("module already closed"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1117 goto dlcloseerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1118 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1119 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1120 if (dls->refs == 1) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1121 unsigned long options = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1122 void (*fini) (void); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1123 if ((fini = dlsymIntern(dls, "__fini", 0))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1124 debug("calling _fini()"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1125 fini(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1126 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1127 options |= NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1128 #ifdef RTLD_NODELETE |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1129 if (isFlagSet(dls->mode, RTLD_NODELETE)) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1130 options |= NSUNLINKMODULE_OPTION_KEEP_MEMORY_MAPPED; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1131 #endif |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1132 if (!NSUnLinkModule(dls->module, options)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1133 error("unable to unlink module"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1134 goto dlcloseerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1135 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1136 dls->refs--; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1137 dls->module = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1138 /* Note: the dlstatus struct dls is neither removed from the list |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1139 * nor is the memory it occupies freed. This shouldn't pose a |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1140 * problem in mostly all cases, though. |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1141 */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1142 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1143 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1144 return 0; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1145 dlcloseerror: |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1146 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1147 return 1; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1148 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1149 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1150 static const char * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1151 SDL_OSX_dlerror(void) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1152 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1153 struct dlthread *tss; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1154 const char *err_str = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1155 dlcompat_init_check(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1156 tss = pthread_getspecific(dlerror_key); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1157 if (tss != NULL && tss->errset != 0) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1158 tss->errset = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1159 err_str = tss->errstr; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1160 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1161 return (err_str); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1162 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1163 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1164 /* Given an address, return the mach_header for the image containing it |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1165 * or zero if the given address is not contained in any loaded images. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1166 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1167 static const struct mach_header * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1168 image_for_address(const void *address) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1169 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1170 unsigned long i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1171 unsigned long j; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1172 unsigned long count = _dyld_image_count(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1173 const struct mach_header *mh = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1174 struct load_command *lc = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1175 unsigned long addr = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1176 for (i = 0; i < count; i++) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1177 addr = (unsigned long) address - _dyld_get_image_vmaddr_slide(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1178 mh = _dyld_get_image_header(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1179 if (mh) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1180 lc = (struct load_command *) ((char *) mh + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1181 sizeof(struct mach_header)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1182 for (j = 0; j < mh->ncmds; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1183 j++, lc = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1184 (struct load_command *) ((char *) lc + lc->cmdsize)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1185 if (LC_SEGMENT == lc->cmd && |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1186 addr >= ((struct segment_command *) lc)->vmaddr && |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1187 addr < |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1188 ((struct segment_command *) lc)->vmaddr + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1189 ((struct segment_command *) lc)->vmsize) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1190 goto image_found; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1191 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1192 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1193 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1194 mh = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1195 } |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1196 image_found: |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1197 return mh; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1198 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1199 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1200 #if 0 /* unused */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1201 static int |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1202 SDL_OSX_dladdr(const void *dl_restrict p, SDL_OSX_Dl_info * dl_restrict info) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1203 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1204 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1205 FIXME: USe the routine image_for_address. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1206 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1207 unsigned long i; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1208 unsigned long j; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1209 unsigned long count = _dyld_image_count(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1210 struct mach_header *mh = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1211 struct load_command *lc = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1212 unsigned long addr = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1213 unsigned long table_off = (unsigned long) 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1214 int found = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1215 if (!info) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1216 return 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1217 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1218 resetdlerror(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1219 info->dli_fname = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1220 info->dli_fbase = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1221 info->dli_sname = 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1222 info->dli_saddr = 0; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1223 /* Some of this was swiped from code posted by Douglas Davidson <ddavidso AT apple DOT com> |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1224 * to darwin-development AT lists DOT apple DOT com and slightly modified |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1225 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1226 for (i = 0; i < count; i++) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1227 addr = (unsigned long) p - _dyld_get_image_vmaddr_slide(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1228 mh = _dyld_get_image_header(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1229 if (mh) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1230 lc = (struct load_command *) ((char *) mh + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1231 sizeof(struct mach_header)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1232 for (j = 0; j < mh->ncmds; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1233 j++, lc = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1234 (struct load_command *) ((char *) lc + lc->cmdsize)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1235 if (LC_SEGMENT == lc->cmd && |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1236 addr >= ((struct segment_command *) lc)->vmaddr && |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1237 addr < |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1238 ((struct segment_command *) lc)->vmaddr + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1239 ((struct segment_command *) lc)->vmsize) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1240 info->dli_fname = _dyld_get_image_name(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1241 info->dli_fbase = (void *) mh; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1242 found = 1; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1243 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1244 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1245 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1246 if (found) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1247 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1248 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1249 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1250 if (!found) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1251 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1252 return 0; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1253 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1254 lc = (struct load_command *) ((char *) mh + sizeof(struct mach_header)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1255 for (j = 0; j < mh->ncmds; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1256 j++, lc = (struct load_command *) ((char *) lc + lc->cmdsize)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1257 if (LC_SEGMENT == lc->cmd) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1258 if (!SDL_strcmp |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1259 (((struct segment_command *) lc)->segname, "__LINKEDIT")) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1260 break; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1261 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1262 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1263 table_off = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1264 ((unsigned long) ((struct segment_command *) lc)->vmaddr) - |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1265 ((unsigned long) ((struct segment_command *) lc)->fileoff) + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1266 _dyld_get_image_vmaddr_slide(i); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1267 debug("table off %x", table_off); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1268 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1269 lc = (struct load_command *) ((char *) mh + sizeof(struct mach_header)); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1270 for (j = 0; j < mh->ncmds; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1271 j++, lc = (struct load_command *) ((char *) lc + lc->cmdsize)) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1272 if (LC_SYMTAB == lc->cmd) { |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1273 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1274 struct nlist *symtable = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1275 (struct nlist *) (((struct symtab_command *) lc)->symoff + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1276 table_off); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1277 unsigned long numsyms = ((struct symtab_command *) lc)->nsyms; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1278 struct nlist *nearest = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1279 unsigned long diff = 0xffffffff; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1280 unsigned long strtable = |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1281 (unsigned long) (((struct symtab_command *) lc)->stroff + |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1282 table_off); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1283 debug("symtable %x", symtable); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1284 for (i = 0; i < numsyms; i++) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1285 /* Ignore the following kinds of Symbols */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1286 if ((!symtable->n_value) /* Undefined */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1287 ||(symtable->n_type >= N_PEXT) /* Debug symbol */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1288 ||(!(symtable->n_type & N_EXT)) /* Local Symbol */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1289 ) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1290 symtable++; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1291 continue; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1292 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1293 if ((addr >= symtable->n_value) |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1294 && (diff >= (symtable->n_value - addr))) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1295 diff = (unsigned long) symtable->n_value - addr; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1296 nearest = symtable; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1297 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1298 symtable++; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1299 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1300 if (nearest) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1301 info->dli_saddr = nearest->n_value + ((void *) p - addr); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1302 info->dli_sname = (char *) (strtable + nearest->n_un.n_strx); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1303 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1304 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1305 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1306 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1307 return 1; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1308 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1309 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1310 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1311 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1312 * Implement the dlfunc() interface, which behaves exactly the same as |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1313 * dlsym() except that it returns a function pointer instead of a data |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1314 * pointer. This can be used by applications to avoid compiler warnings |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1315 * about undefined behavior, and is intended as prior art for future |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1316 * POSIX standardization. This function requires that all pointer types |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1317 * have the same representation, which is true on all platforms FreeBSD |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1318 * runs on, but is not guaranteed by the C standard. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1319 */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1320 #if 0 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1321 static dlfunc_t |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1322 SDL_OSX_dlfunc(void *dl_restrict handle, const char *dl_restrict symbol) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1323 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1324 union |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1325 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1326 void *d; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1327 dlfunc_t f; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1328 } rv; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1329 int sym_len = SDL_strlen(symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1330 char *malloc_sym = NULL; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1331 dolock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1332 malloc_sym = SDL_malloc(sym_len + 2); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1333 if (malloc_sym) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1334 SDL_snprintf(malloc_sym, sym_len + 2, "_%s", symbol); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1335 rv.d = dlsymIntern(handle, malloc_sym, 1); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1336 SDL_free(malloc_sym); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1337 } else { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1338 error("Unable to allocate memory"); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1339 goto dlfuncerror; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1340 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1341 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1342 return rv.f; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1343 dlfuncerror: |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1344 dounlock(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1345 return NULL; |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1346 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1347 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1348 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1349 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1350 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1351 /* dlcompat ends, here's the SDL interface... --ryan. */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1352 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1353 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1354 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1355 /* System dependent library loading routines */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1356 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1357 #include "SDL_loadso.h" |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1358 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1359 void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1360 SDL_LoadObject(const char *sofile) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1361 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1362 void *handle = SDL_OSX_dlopen(sofile, RTLD_NOW); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1363 const char *loaderror = SDL_OSX_dlerror(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1364 if (handle == NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1365 SDL_SetError("Failed loading %s: %s", sofile, loaderror); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1366 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1367 return (handle); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1368 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1369 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1370 void * |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1371 SDL_LoadFunction(void *handle, const char *name) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1372 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1373 void *symbol = SDL_OSX_dlsym(handle, name); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1374 if (symbol == NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1375 SDL_SetError("Failed loading %s: %s", name, SDL_OSX_dlerror()); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1376 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1377 return (symbol); |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1378 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1379 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1380 void |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1381 SDL_UnloadObject(void *handle) |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1382 { |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1383 if (handle != NULL) { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1384 SDL_OSX_dlclose(handle); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1385 } |
1801
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1386 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1387 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1388 #endif /* SDL_LOADSO_DLCOMPAT */ |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1801
diff
changeset
|
1389 /* vi: set ts=4 sw=4 expandtab: */ |