Mercurial > sdl-ios-xcode
annotate src/loadso/macosx/SDL_dlcompat.c @ 4170:092c0bc69155 SDL-1.2
Fixed bug #618
Description From Tim Angus 2008-08-30 12:23:56 (-) [reply]
As we all know SDL 1.2 doesn't handle dead keys well since one key press
potentially equals two (or more) characters. For example, on many layouts,
keying <backquote>,<space> results in <no character>,<backquote><space>. Since
the unicode member of the SDL_keysym struct only has room for one character,
only one can be returned.
On Linux, the first character is returned. On Windows however, unless the exact
number of characters generated by the keypress is 1, nothing is returned. The
following patch addresses this inconsistency.
Updated patch which includes a further fix to the handling of the numpad when
numlock is on. This further fix is courtesy Amanieu d'Antras.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 13 Apr 2009 08:42:09 +0000 |
parents | a1b03ba2fcd0 |
children |
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 |
4159 | 3 Copyright (C) 1997-2009 Sam Lantinga |
1801
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 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 extern "C" { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 #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
|
92 #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
|
93 #else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 #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
|
95 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 #if 0 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 #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
|
99 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 * 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
|
101 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 typedef struct SDL_OSX_dl_info { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 const char *dli_fname; /* Pathname of shared object */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 void *dli_fbase; /* Base address of shared object */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 const char *dli_sname; /* Name of nearest symbol */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 void *dli_saddr; /* Address of nearest symbol */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 } SDL_OSX_Dl_info; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 static int SDL_OSX_dladdr(const void * dl_restrict, SDL_OSX_Dl_info * dl_restrict); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 #endif /* ! _POSIX_SOURCE */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 #endif /* 0 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 static int SDL_OSX_dlclose(void * handle); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 static const char * SDL_OSX_dlerror(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 static void * SDL_OSX_dlopen(const char *path, int mode); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 static void * SDL_OSX_dlsym(void * dl_restrict handle, const char * dl_restrict symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 #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
|
119 #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
|
120 #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
|
121 #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
|
122 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 #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
|
124 #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
|
125 #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
|
126 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 * 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
|
129 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 #define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 #define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 #endif /* ! _POSIX_SOURCE */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 #ifdef __cplusplus |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 #endif |
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 #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
|
139 #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
|
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 /* 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
|
142 #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
|
143 #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
|
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 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 /* 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
|
147 * 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
|
148 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 #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
|
150 #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
|
151 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 #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
|
153 #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
|
154 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 #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
|
156 #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
|
157 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 #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
|
159 #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
|
160 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 #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
|
162 #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
|
163 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 /* These symbols will be looked for in dyld */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 static const struct mach_header *(*dyld_NSAddImage) (const char *, unsigned long) = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 static int (*dyld_NSIsSymbolNameDefinedInImage) (const struct mach_header *, const char *) = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 static NSSymbol(*dyld_NSLookupSymbolInImage) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 (const struct mach_header *, const char *, unsigned long) = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 /* 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
|
171 * 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
|
172 * 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
|
173 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 #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
|
175 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 /* 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
|
177 #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
|
178 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 /* 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
|
180 #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
|
181 |
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 #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
|
184 #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
|
185 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 /* internal flags */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 #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
|
188 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 /* our mutex */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 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
|
191 /* 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
|
192 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 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
|
194 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 struct dlthread |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 int lockcnt; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 unsigned char errset; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 char errstr[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
|
200 }; |
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 /* 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
|
203 * 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
|
204 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 struct dlstatus |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 struct dlstatus *next; /* pointer to next element in the linked list */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 NSModule module; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 const struct mach_header *lib; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 int refs; /* reference count */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 int mode; /* mode in which this module was loaded */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 dev_t device; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 ino_t inode; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 int flags; /* Any internal flags we may need */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 }; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 /* Head node of the dlstatus list */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 static struct dlstatus mainStatus = { 0, MAGIC_DYLIB_MOD, NULL, -1, RTLD_GLOBAL, 0, 0, 0 }; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 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
|
220 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
221 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 /* 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
|
223 /* 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
|
224 /* 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
|
225 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 /* 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 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
|
232 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 static void *reference(struct dlstatus *dls, int mode); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 static void *dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetError); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 static struct dlstatus *allocStatus(void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 static struct dlstatus *loadModule(const char *path, const struct stat *sbuf, int mode); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 static NSSymbol search_linked_libs(const struct mach_header *mh, 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
|
244 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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 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
|
255 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 #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
|
257 /* 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
|
258 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
|
259 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
|
260 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 /* And their _intern counterparts */ |
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 *dlsym_prepend_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
|
263 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
|
264 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 /* Functions */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 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
|
269 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 #if DEBUG > 1 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 va_list arg; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 va_start(arg, fmt); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 fprintf(stderr, "DLDEBUG: "); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 vfprintf(stderr, fmt, arg); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 fprintf(stderr, "\n"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 fflush(stderr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 va_end(arg); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 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
|
282 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 va_list arg; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 struct dlthread *tss; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 char * err_str; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 va_start(arg, str); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 tss = pthread_getspecific(dlerror_key); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 err_str = tss->errstr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 SDL_strlcpy(err_str, "dlcompat: ", 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
|
290 vsnprintf(err_str + 10, ERR_STR_LEN - 10, str, arg); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 va_end(arg); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 debug("ERROR: %s\n", err_str); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 tss->errset = 1; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 static void warning(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
|
297 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 #if DEBUG > 0 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 fprintf(stderr, "WARNING: dlcompat: %s\n", str); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 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
|
304 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 const char *ss = SDL_getenv(s); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 return ss ? ss : ""; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 } |
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 /* 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
|
310 * 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
|
311 * 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
|
312 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 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
|
314 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 unsigned long count = _dyld_image_count(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 unsigned long i; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 const char *val = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 if (mh) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 for (i = 0; i < count; i++) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 if (mh == _dyld_get_image_header(i)) |
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 val = _dyld_get_image_name(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 return val; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 /* 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
|
333 * 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
|
334 * 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
|
335 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 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
|
337 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 const char *mod_name = NSNameOfModule(mod); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 const struct mach_header *mh = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 unsigned long count = _dyld_image_count(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 unsigned long i; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 debug("Module name: %s", mod_name); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 for (i = 0; i < count; i++) |
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 if (!SDL_strcmp(mod_name, _dyld_get_image_name(i))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 mh = _dyld_get_image_header(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 return mh; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
355 /* 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
|
356 * 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
|
357 * 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
|
358 * /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
|
359 * 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
|
360 * 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
|
361 * 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
|
362 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 static const char *searchList() |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 size_t buf_size; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 static char *buf=NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 const char *ldlp = safegetenv("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
|
368 const char *dyldlp = safegetenv("DYLD_LIBRARY_PATH"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 const char *stdpath = SDL_getenv("DYLD_FALLBACK_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 if (!stdpath) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 stdpath = "/usr/local/lib:/lib:/usr/lib"; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 if (!buf) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 buf_size = SDL_strlen(ldlp) + SDL_strlen(dyldlp) + SDL_strlen(stdpath) + 4; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 buf = SDL_malloc(buf_size); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
376 SDL_snprintf(buf, buf_size, "%s%s%s%s%s%c", dyldlp, (dyldlp[0] ? ":" : ""), ldlp, (ldlp[0] ? ":" : ""), |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
377 stdpath, '\0'); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
379 return buf; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
382 /* Returns the ith search path from the list as computed by searchList() */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
383 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
|
384 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
385 static const char *list = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
386 static char **path = (char **)0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 static int end = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 static int numsize = MAX_SEARCH_PATHS; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
389 static char **tmp; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
390 /* So we can call SDL_free() in the "destructor" we use i=-1 to return the alloc'd array */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
391 if (i == -1) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
392 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
393 return (const char*)path; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
395 if (!path) |
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 path = (char **)SDL_calloc(MAX_SEARCH_PATHS, sizeof(char **)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
398 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
399 if (!list && !end) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
400 list = searchList(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
401 if (i >= (numsize)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
402 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
403 debug("Increasing size for long PATH"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
404 tmp = (char **)SDL_calloc((MAX_SEARCH_PATHS + numsize), sizeof(char **)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
405 if (tmp) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
406 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
407 SDL_memcpy(tmp, path, sizeof(char **) * numsize); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
408 SDL_free(path); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
409 path = tmp; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
410 numsize += MAX_SEARCH_PATHS; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
411 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
413 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
414 return 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
415 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
416 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
417 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
418 while (!path[i] && !end) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
419 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
420 path[i] = strsep((char **)&list, ":"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
421 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
422 if (path[i][0] == 0) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
423 path[i] = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
424 end = (list == 0); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
425 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
426 return path[i]; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
427 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
428 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 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
|
430 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
431 static char buf[PATH_MAX]; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
432 const char *path = getSearchPath(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
433 if (path) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
434 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
435 SDL_snprintf(buf, PATH_MAX, "%s/%s", path, file); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
436 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
437 return path ? buf : 0; |
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 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
440 /* 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
|
441 * 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
|
442 * 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
|
443 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
444 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
|
445 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
446 int i = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
447 static 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
|
448 char *fileName; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
449 debug("finding file %s", file); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
450 *fullPath = file; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
451 if (0 == stat(file, &sbuf)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
452 return &sbuf; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
453 if (SDL_strchr(file, '/')) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
454 return 0; /* If the path had a / we don't look in env var places */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
455 fileName = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
456 if (!fileName) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
457 fileName = (char *)file; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
458 while ((*fullPath = getFullPath(i++, fileName))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
459 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
460 if (0 == stat(*fullPath, &sbuf)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
461 return &sbuf; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
462 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
463 ; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
464 return 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
465 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
466 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
467 /* Determine whether a given dlstatus is valid or not */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
468 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
|
469 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
470 /* Walk the list to verify status is contained in it */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
471 struct dlstatus *dls = stqueue; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
472 while (dls && status != dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
473 dls = dls->next; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
474 if (dls == 0) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
475 error("invalid handle"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 else if ((dls->module == 0) || (dls->refs == 0)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
477 error("handle to closed library"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
478 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
479 return TRUE; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
480 return FALSE; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
481 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
482 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
483 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
|
484 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
485 return (mode & flag) == flag; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
486 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
487 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
488 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
|
489 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
490 struct dlstatus *dls = stqueue; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
491 debug("looking for status"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
492 while (dls && ( /* isFlagSet(dls->mode, RTLD_UNSHARED) */ 0 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
493 || sbuf->st_dev != dls->device || sbuf->st_ino != dls->inode)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
494 dls = dls->next; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
495 return dls; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
496 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
497 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
498 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
|
499 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
500 debug("inserting status"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
501 dls->inode = sbuf->st_ino; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
502 dls->device = sbuf->st_dev; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
503 dls->refs = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
504 dls->mode = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
505 if ((dls->flags & DL_IN_LIST) == 0) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
506 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
507 dls->next = stqueue; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
508 stqueue = dls; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
509 dls->flags |= DL_IN_LIST; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
510 } |
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 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 static struct dlstatus *allocStatus() |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
514 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
515 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
|
516 #ifdef REUSE_STATUS |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
517 dls = stqueue; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
518 while (dls && dls->module) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
519 dls = dls->next; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
520 if (!dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
521 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
522 dls = SDL_calloc(sizeof(*dls),1); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
523 return dls; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
524 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
525 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 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
|
527 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
528 static int (*p) (NSModule module) = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
529 debug("promoting"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
530 if (!p) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
531 _dyld_func_lookup("__dyld_NSMakePrivateModulePublic", (void **)&p); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
532 return (dls->module == MAGIC_DYLIB_MOD) || (p && p(dls->module)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
533 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
534 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 static void *reference(struct dlstatus *dls, int mode) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
536 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
537 if (dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
538 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
539 if (dls->module == MAGIC_DYLIB_MOD && isFlagSet(mode, RTLD_LOCAL)) |
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 warning("trying to open a .dylib with RTLD_LOCAL"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
542 error("unable to open a .dylib with RTLD_LOCAL"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 if (isFlagSet(mode, RTLD_GLOBAL) && |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
546 !isFlagSet(dls->mode, RTLD_GLOBAL) && !promoteLocalToGlobal(dls)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
547 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 error("unable to promote local module to global"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 return NULL; |
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 dls->mode |= mode; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 dls->refs++; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
555 debug("reference called with NULL argument"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 return dls; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
558 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
559 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
560 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
|
561 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
562 const struct mach_header *mh = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
563 const char *id = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
564 int i = _dyld_image_count(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
565 int j; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
566 mh = (struct mach_header *) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
567 dyld_NSAddImage(name, 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
|
568 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
|
569 if (!mh) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
571 for (j = 0; j < i; j++) |
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 id = _dyld_get_image_name(j); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
574 if (!SDL_strcmp(id, name)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
575 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
576 mh = _dyld_get_image_header(j); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
577 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
578 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
579 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
580 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
581 return mh; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
582 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
583 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
584 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
585 * 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
|
586 * 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
|
587 * 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
|
588 * 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
|
589 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
590 static NSSymbol search_linked_libs(const struct mach_header * mh, 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
|
591 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
592 unsigned int n; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
593 struct load_command *lc = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
594 struct mach_header *wh; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
595 NSSymbol nssym = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
596 if (dyld_NSAddImage && dyld_NSIsSymbolNameDefinedInImage && dyld_NSLookupSymbolInImage) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
597 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
598 lc = (struct load_command *)((char *)mh + sizeof(struct mach_header)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
599 for (n = 0; n < mh->ncmds; n++, lc = (struct load_command *)((char *)lc + lc->cmdsize)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
600 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
601 if ((LC_LOAD_DYLIB == lc->cmd) || (LC_LOAD_WEAK_DYLIB == lc->cmd)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
602 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
603 if ((wh = (struct mach_header *) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
604 my_find_image((char *)(((struct dylib_command *)lc)->dylib.name.offset + |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
605 (char *)lc)))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
606 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
607 if (dyld_NSIsSymbolNameDefinedInImage(wh, symbol)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
608 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
609 nssym = dyld_NSLookupSymbolInImage(wh, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
610 symbol, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
611 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
|
612 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
|
613 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
614 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
615 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
616 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
617 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
618 if ((!nssym) && NSIsSymbolNameDefined(symbol)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
619 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
620 /* I've never seen this debug message...*/ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
621 debug("Symbol \"%s\" is defined but was not found", symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
622 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
623 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
624 return nssym; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
625 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
626 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
627 /* Up to the caller to SDL_free() returned string */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
628 static inline char *dyld_error_str() |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
629 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
630 NSLinkEditErrors dylder; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
631 int dylderno; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
632 const char *dylderrstr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
633 const char *dyldfile; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
634 char* retStr = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
635 NSLinkEditError(&dylder, &dylderno, &dyldfile, &dylderrstr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
636 if (dylderrstr && *dylderrstr) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
637 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
638 retStr = SDL_strdup(dylderrstr); |
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 return retStr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
641 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
642 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
643 static void *dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetError) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
644 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
645 NSSymbol nssym = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
646 #ifdef __GCC__ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
647 void *caller = __builtin_return_address(1); /* Be *very* careful about inlining */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
648 #else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
649 void *caller = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
650 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
651 const struct mach_header *caller_mh = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
652 char *savedErrorStr = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
653 resetdlerror(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
654 #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
|
655 #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
|
656 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
657 if (NULL == dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
658 dls = RTLD_SELF; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
659 if ((RTLD_NEXT == dls) || (RTLD_SELF == dls)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
660 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
661 if (dyld_NSIsSymbolNameDefinedInImage && dyld_NSLookupSymbolInImage && caller) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
662 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
663 caller_mh = image_for_address(caller); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
664 if (RTLD_SELF == dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
665 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
666 /* FIXME: We should be using the NSModule api, if SELF is an MH_BUNDLE |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
667 * But it appears to work anyway, and looking at the code in dyld_libfuncs.c |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
668 * this is acceptable. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
669 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
670 if (dyld_NSIsSymbolNameDefinedInImage(caller_mh, symbol)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
671 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
672 nssym = dyld_NSLookupSymbolInImage(caller_mh, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
673 symbol, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
674 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
|
675 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
|
676 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
677 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
678 if (!nssym) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
679 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
680 if (RTLD_SELF == dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
681 savedErrorStr = dyld_error_str(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
682 nssym = search_linked_libs(caller_mh, symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
683 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
684 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
685 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
686 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
687 if (canSetError) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
688 error("RTLD_SELF and RTLD_NEXT are not supported"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
689 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
690 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
691 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
692 if (!nssym) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
693 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
694 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
695 if (RTLD_DEFAULT == dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
696 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
697 dls = &mainStatus; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
698 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
699 if (!isValidStatus(dls)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
700 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
701 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
702 if (dls->module != MAGIC_DYLIB_MOD) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
703 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
704 nssym = NSLookupSymbolInModule(dls->module, symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
705 if (!nssym && NSIsSymbolNameDefined(symbol)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
706 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
707 debug("Searching dependencies"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
708 savedErrorStr = dyld_error_str(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
709 nssym = search_linked_libs(get_mach_header_from_NSModule(dls->module), symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
710 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
711 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
712 else if (dls->lib && dyld_NSIsSymbolNameDefinedInImage && dyld_NSLookupSymbolInImage) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
713 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
714 if (dyld_NSIsSymbolNameDefinedInImage(dls->lib, symbol)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
715 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
716 nssym = dyld_NSLookupSymbolInImage(dls->lib, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
717 symbol, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
718 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
|
719 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
|
720 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
721 else if (NSIsSymbolNameDefined(symbol)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
722 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
723 debug("Searching dependencies"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
724 savedErrorStr = dyld_error_str(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
725 nssym = search_linked_libs(dls->lib, symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
726 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
727 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
728 else if (dls->module == MAGIC_DYLIB_MOD) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
729 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
730 /* Global context, use NSLookupAndBindSymbol */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
731 if (NSIsSymbolNameDefined(symbol)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
732 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
733 /* There doesn't seem to be a return on error option for this call??? |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
734 this is potentially broken, if binding fails, it will improperly |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
735 exit the application. */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
736 nssym = NSLookupAndBindSymbol(symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
737 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
738 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
739 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
740 if (savedErrorStr) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
741 SDL_free(savedErrorStr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
742 savedErrorStr = SDL_malloc(256); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
743 SDL_snprintf(savedErrorStr, 256, "Symbol \"%s\" not in global context",symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
744 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
745 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
746 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
747 /* Error reporting */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
748 if (!nssym) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
749 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
750 if (!savedErrorStr || !SDL_strlen(savedErrorStr)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
751 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
752 if (savedErrorStr) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
753 SDL_free(savedErrorStr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
754 savedErrorStr = SDL_malloc(256); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
755 SDL_snprintf(savedErrorStr, 256,"Symbol \"%s\" not found",symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
756 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
757 if (canSetError) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
758 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
759 error(savedErrorStr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
760 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
761 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
762 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
763 debug(savedErrorStr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
764 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
765 if (savedErrorStr) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
766 SDL_free(savedErrorStr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
767 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
768 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
769 return NSAddressOfSymbol(nssym); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
770 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
771 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
772 static struct dlstatus *loadModule(const char *path, const struct stat *sbuf, int mode) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
773 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
774 NSObjectFileImage ofi = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
775 NSObjectFileImageReturnCode ofirc; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
776 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
|
777 NSLinkEditErrors ler; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
778 int lerno; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
779 const char *errstr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
780 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
|
781 void (*init) (void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
782 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
783 ofirc = NSCreateObjectFileImageFromFile(path, &ofi); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
784 switch (ofirc) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
785 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
786 case NSObjectFileImageSuccess: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
787 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
788 case NSObjectFileImageInappropriateFile: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
789 if (dyld_NSAddImage && dyld_NSIsSymbolNameDefinedInImage && dyld_NSLookupSymbolInImage) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
790 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
791 if (isFlagSet(mode, RTLD_LOCAL)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
792 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
793 warning("trying to open a .dylib with RTLD_LOCAL"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
794 error("unable to open this file with RTLD_LOCAL"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
795 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
796 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
797 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
798 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
799 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
800 error("opening this file is unsupported on this system"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
801 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
802 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
803 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
804 case NSObjectFileImageFailure: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
805 error("object file setup failure"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
806 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
807 case NSObjectFileImageArch: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
808 error("no object for this architecture"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
809 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
810 case NSObjectFileImageFormat: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
811 error("bad object file format"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
812 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
813 case NSObjectFileImageAccess: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
814 error("can't read object file"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
815 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
816 default: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
817 error("unknown error from NSCreateObjectFileImageFromFile()"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
818 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
819 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
820 dls = lookupStatus(sbuf); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
821 if (!dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
822 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
823 dls = allocStatus(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
824 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
825 if (!dls) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
826 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
827 error("unable to allocate memory"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
828 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
829 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
830 // dls->lib = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
831 if (ofirc == NSObjectFileImageInappropriateFile) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
832 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
833 if ((dls->lib = dyld_NSAddImage(path, 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
|
834 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
835 debug("Dynamic lib loaded at %ld", dls->lib); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
836 ofi = MAGIC_DYLIB_OFI; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
837 dls->module = MAGIC_DYLIB_MOD; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
838 ofirc = NSObjectFileImageSuccess; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
839 /* Although it is possible with a bit of work to modify this so it works and |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
840 functions with RTLD_NOW, I don't deem it necessary at the moment */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
841 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
842 if (!(dls->module)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
843 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
844 NSLinkEditError(&ler, &lerno, &file, &errstr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
845 if (!errstr || (!SDL_strlen(errstr))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
846 error("Can't open this file type"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
847 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
848 error(errstr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
849 if ((dls->flags & DL_IN_LIST) == 0) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
850 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
851 SDL_free(dls); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
852 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
853 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
854 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
855 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
856 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
857 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
858 dls->module = NSLinkModule(ofi, path, |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
859 NSLINKMODULE_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
|
860 NSLINKMODULE_OPTION_PRIVATE | |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
861 (isFlagSet(mode, RTLD_NOW) ? NSLINKMODULE_OPTION_BINDNOW : 0)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
862 NSDestroyObjectFileImage(ofi); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
863 if (dls->module) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
864 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
865 dls->lib = get_mach_header_from_NSModule(dls->module); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
866 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
867 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
868 if (!dls->module) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
869 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
870 NSLinkEditError(&ler, &lerno, &file, &errstr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
871 if ((dls->flags & DL_IN_LIST) == 0) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
872 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
873 SDL_free(dls); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
874 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
875 error(errstr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
876 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
877 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
878 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
879 insertStatus(dls, sbuf); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
880 dls = reference(dls, mode); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
881 if ((init = dlsymIntern(dls, "__init", 0))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
882 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
883 debug("calling _init()"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
884 init(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
885 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
886 return dls; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
887 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
888 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
889 inline static 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
|
890 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
891 static pthread_mutex_t l = PTHREAD_MUTEX_INITIALIZER; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
892 static int init_done = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
893 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
894 pthread_mutex_lock(&l); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
895 if (!init_done) { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
896 dlcompat_init_func(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
897 init_done = 1; |
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 pthread_mutex_unlock(&l); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
900 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
901 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
902 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
|
903 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
904 _dyld_func_lookup("__dyld_NSAddImage", (void **)&dyld_NSAddImage); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
905 _dyld_func_lookup("__dyld_NSIsSymbolNameDefinedInImage", |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
906 (void **)&dyld_NSIsSymbolNameDefinedInImage); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
907 _dyld_func_lookup("__dyld_NSLookupSymbolInImage", (void **)&dyld_NSLookupSymbolInImage); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
908 if (pthread_mutex_init(&dlcompat_mutex, NULL)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
909 exit(1); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
910 if (pthread_key_create(&dlerror_key, &dlerrorfree)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
911 exit(1); |
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 static void resetdlerror() |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
915 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
916 struct dlthread *tss; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
917 tss = pthread_getspecific(dlerror_key); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
918 tss->errset = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
919 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
920 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
921 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
|
922 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
923 SDL_free(data); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
924 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
925 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
926 /* 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
|
927 * 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
|
928 * using thread specific storage to keep a lock count |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
929 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
930 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
|
931 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
932 int err = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
933 struct dlthread *tss; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
934 dlcompat_init_check(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
935 tss = pthread_getspecific(dlerror_key); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
936 if (!tss) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
937 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
938 tss = SDL_malloc(sizeof(struct dlthread)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
939 tss->lockcnt = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
940 tss->errset = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
941 if (pthread_setspecific(dlerror_key, tss)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
942 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
943 fprintf(stderr,"dlcompat: pthread_setspecific failed\n"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
944 exit(1); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
945 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
946 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
947 if (!tss->lockcnt) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
948 err = pthread_mutex_lock(&dlcompat_mutex); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
949 tss->lockcnt = tss->lockcnt +1; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
950 if (err) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
951 exit(err); |
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 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
954 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
|
955 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
956 int err = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
957 struct dlthread *tss; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
958 tss = pthread_getspecific(dlerror_key); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
959 tss->lockcnt = tss->lockcnt -1; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
960 if (!tss->lockcnt) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
961 err = pthread_mutex_unlock(&dlcompat_mutex); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
962 if (err) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
963 exit(err); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
964 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
965 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
966 static void *SDL_OSX_dlopen(const char *path, int mode) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
967 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
968 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
|
969 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
|
970 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
|
971 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
972 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
973 resetdlerror(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
974 if (!path) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
975 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
976 dls = &mainStatus; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
977 goto dlopenok; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
978 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
979 if (!(sbuf = findFile(path, &fullPath))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
980 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
981 error("file \"%s\" not found", path); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
982 goto dlopenerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
983 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
984 /* Now checks that it hasn't been closed already */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
985 if ((dls = lookupStatus(sbuf)) && (dls->refs > 0)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
986 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
987 /* debug("status found"); */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
988 dls = reference(dls, mode); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
989 goto dlopenok; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
990 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
991 #ifdef RTLD_NOLOAD |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
992 if (isFlagSet(mode, RTLD_NOLOAD)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
993 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
994 error("no existing handle and RTLD_NOLOAD specified"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
995 goto dlopenerror; |
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 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
998 if (isFlagSet(mode, RTLD_LAZY) && isFlagSet(mode, RTLD_NOW)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
999 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1000 error("how can I load something both RTLD_LAZY and RTLD_NOW?"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1001 goto dlopenerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1002 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1003 dls = loadModule(fullPath, sbuf, mode); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1004 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1005 dlopenok: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1006 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1007 return (void *)dls; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1008 dlopenerror: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1009 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1010 return NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1011 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1012 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1013 #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
|
1014 static void *SDL_OSX_dlsym(void * dl_restrict handle, const char * dl_restrict symbol) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1015 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1016 int sym_len = SDL_strlen(symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1017 void *value = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1018 char *malloc_sym = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1019 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1020 malloc_sym = SDL_malloc(sym_len + 2); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1021 if (malloc_sym) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1022 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1023 SDL_snprintf(malloc_sym, sym_len+2, "_%s", symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1024 value = dlsymIntern(handle, malloc_sym, 1); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1025 SDL_free(malloc_sym); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1026 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1027 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1028 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1029 error("Unable to allocate memory"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1030 goto dlsymerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1031 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1032 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1033 return value; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1034 dlsymerror: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1035 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1036 return NULL; |
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 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1039 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1040 #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
|
1041 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1042 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
|
1043 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1044 void *answer; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1045 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1046 answer = dlsym_prepend_underscore_intern(handle, symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1047 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1048 return answer; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1049 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1050 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1051 static void *dlsym_prepend_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
|
1052 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1053 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1054 * 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
|
1055 * 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
|
1056 * 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
|
1057 * |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1058 * 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
|
1059 * 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
|
1060 * for opendarwin. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1061 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1062 int sym_len = SDL_strlen(symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1063 void *value = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1064 char *malloc_sym = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1065 malloc_sym = SDL_malloc(sym_len + 2); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1066 if (malloc_sym) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1067 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1068 SDL_snprintf(malloc_sym, sym_len+2, "_%s", symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1069 value = dlsymIntern(handle, malloc_sym, 1); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1070 SDL_free(malloc_sym); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1071 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1072 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1073 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1074 error("Unable to allocate memory"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1075 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1076 return value; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1077 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1078 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1079 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
|
1080 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1081 void *answer; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1082 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1083 answer = dlsym_auto_underscore_intern(handle, symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1084 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1085 return answer; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1086 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1087 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1088 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
|
1089 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1090 struct dlstatus *dls = handle; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1091 void *addr = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1092 addr = dlsymIntern(dls, symbol, 0); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1093 if (!addr) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1094 addr = dlsym_prepend_underscore_intern(handle, symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1095 return addr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1096 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1097 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1098 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1099 static void *SDL_OSX_dlsym(void * dl_restrict handle, const char * dl_restrict symbol) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1100 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1101 struct dlstatus *dls = handle; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1102 void *addr = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1103 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1104 addr = dlsymIntern(dls, symbol, 1); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1105 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1106 return addr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1107 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1108 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1109 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1110 static int SDL_OSX_dlclose(void *handle) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1111 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1112 struct dlstatus *dls = handle; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1113 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1114 resetdlerror(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1115 if (!isValidStatus(dls)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1116 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1117 goto dlcloseerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1118 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1119 if (dls->module == MAGIC_DYLIB_MOD) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1120 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1121 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
|
1122 if (!dls->lib) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1123 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1124 name = "global context"; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1125 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1126 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1127 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1128 name = get_lib_name(dls->lib); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1129 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1130 warning("trying to close a .dylib!"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1131 error("Not closing \"%s\" - dynamic libraries cannot be closed", name); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1132 goto dlcloseerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1133 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1134 if (!dls->module) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1135 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1136 error("module already closed"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1137 goto dlcloseerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1138 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1139 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1140 if (dls->refs == 1) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1141 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1142 unsigned long options = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1143 void (*fini) (void); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1144 if ((fini = dlsymIntern(dls, "__fini", 0))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1145 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1146 debug("calling _fini()"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1147 fini(); |
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 options |= NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1150 #ifdef RTLD_NODELETE |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1151 if (isFlagSet(dls->mode, RTLD_NODELETE)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1152 options |= NSUNLINKMODULE_OPTION_KEEP_MEMORY_MAPPED; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1153 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1154 if (!NSUnLinkModule(dls->module, options)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1155 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1156 error("unable to unlink module"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1157 goto dlcloseerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1158 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1159 dls->refs--; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1160 dls->module = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1161 /* Note: the dlstatus struct dls is neither removed from the list |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1162 * nor is the memory it occupies freed. This shouldn't pose a |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1163 * problem in mostly all cases, though. |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1164 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1165 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1166 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1167 return 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1168 dlcloseerror: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1169 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1170 return 1; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1171 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1172 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1173 static const char *SDL_OSX_dlerror(void) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1174 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1175 struct dlthread *tss; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1176 const char * err_str = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1177 dlcompat_init_check(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1178 tss = pthread_getspecific(dlerror_key); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1179 if (tss != NULL && tss->errset != 0) { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1180 tss->errset = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1181 err_str = tss->errstr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1182 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1183 return (err_str); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1184 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1185 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1186 /* 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
|
1187 * 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
|
1188 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1189 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
|
1190 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1191 unsigned long i; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1192 unsigned long j; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1193 unsigned long count = _dyld_image_count(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1194 const struct mach_header *mh = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1195 struct load_command *lc = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1196 unsigned long addr = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1197 for (i = 0; i < count; i++) |
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 addr = (unsigned long)address - _dyld_get_image_vmaddr_slide(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1200 mh = _dyld_get_image_header(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1201 if (mh) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1202 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1203 lc = (struct load_command *)((char *)mh + sizeof(struct mach_header)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1204 for (j = 0; j < mh->ncmds; j++, lc = (struct load_command *)((char *)lc + lc->cmdsize)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1205 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1206 if (LC_SEGMENT == lc->cmd && |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1207 addr >= ((struct segment_command *)lc)->vmaddr && |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1208 addr < |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1209 ((struct segment_command *)lc)->vmaddr + ((struct segment_command *)lc)->vmsize) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1210 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1211 goto image_found; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1212 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1213 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1214 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1215 mh = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1216 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1217 image_found: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1218 return mh; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1219 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1220 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1221 #if 0 /* unused */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1222 static int SDL_OSX_dladdr(const void * dl_restrict p, SDL_OSX_Dl_info * dl_restrict info) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1223 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1224 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1225 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
|
1226 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1227 unsigned long i; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1228 unsigned long j; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1229 unsigned long count = _dyld_image_count(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1230 struct mach_header *mh = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1231 struct load_command *lc = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1232 unsigned long addr = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1233 unsigned long table_off = (unsigned long)0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1234 int found = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1235 if (!info) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1236 return 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1237 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1238 resetdlerror(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1239 info->dli_fname = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1240 info->dli_fbase = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1241 info->dli_sname = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1242 info->dli_saddr = 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1243 /* 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
|
1244 * 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
|
1245 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1246 for (i = 0; i < count; i++) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1247 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1248 addr = (unsigned long)p - _dyld_get_image_vmaddr_slide(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1249 mh = _dyld_get_image_header(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1250 if (mh) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1251 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1252 lc = (struct load_command *)((char *)mh + sizeof(struct mach_header)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1253 for (j = 0; j < mh->ncmds; j++, lc = (struct load_command *)((char *)lc + lc->cmdsize)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1254 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1255 if (LC_SEGMENT == lc->cmd && |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1256 addr >= ((struct segment_command *)lc)->vmaddr && |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1257 addr < |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1258 ((struct segment_command *)lc)->vmaddr + ((struct segment_command *)lc)->vmsize) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1259 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1260 info->dli_fname = _dyld_get_image_name(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1261 info->dli_fbase = (void *)mh; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1262 found = 1; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1263 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1264 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1265 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1266 if (found) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1267 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1268 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1269 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1270 if (!found) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1271 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1272 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1273 return 0; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1274 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1275 lc = (struct load_command *)((char *)mh + sizeof(struct mach_header)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1276 for (j = 0; j < mh->ncmds; j++, lc = (struct load_command *)((char *)lc + lc->cmdsize)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1277 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1278 if (LC_SEGMENT == lc->cmd) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1279 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1280 if (!SDL_strcmp(((struct segment_command *)lc)->segname, "__LINKEDIT")) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1281 break; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1282 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1283 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1284 table_off = |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1285 ((unsigned long)((struct segment_command *)lc)->vmaddr) - |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1286 ((unsigned long)((struct segment_command *)lc)->fileoff) + _dyld_get_image_vmaddr_slide(i); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1287 debug("table off %x", table_off); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1288 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1289 lc = (struct load_command *)((char *)mh + sizeof(struct mach_header)); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1290 for (j = 0; j < mh->ncmds; j++, lc = (struct load_command *)((char *)lc + lc->cmdsize)) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1291 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1292 if (LC_SYMTAB == lc->cmd) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1293 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1294 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1295 struct nlist *symtable = (struct nlist *)(((struct symtab_command *)lc)->symoff + table_off); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1296 unsigned long numsyms = ((struct symtab_command *)lc)->nsyms; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1297 struct nlist *nearest = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1298 unsigned long diff = 0xffffffff; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1299 unsigned long strtable = (unsigned long)(((struct symtab_command *)lc)->stroff + table_off); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1300 debug("symtable %x", symtable); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1301 for (i = 0; i < numsyms; i++) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1302 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1303 /* Ignore the following kinds of Symbols */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1304 if ((!symtable->n_value) /* Undefined */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1305 || (symtable->n_type >= N_PEXT) /* Debug symbol */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1306 || (!(symtable->n_type & N_EXT)) /* Local Symbol */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1307 ) |
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 symtable++; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1310 continue; |
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 if ((addr >= symtable->n_value) && (diff >= (symtable->n_value - addr))) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1313 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1314 diff = (unsigned long)symtable->n_value - addr; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1315 nearest = symtable; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1316 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1317 symtable++; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1318 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1319 if (nearest) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1320 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1321 info->dli_saddr = nearest->n_value + ((void *)p - addr); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1322 info->dli_sname = (char *)(strtable + nearest->n_un.n_strx); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1323 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1324 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1325 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1326 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1327 return 1; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1328 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1329 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1330 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1331 /* |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1332 * 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
|
1333 * 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
|
1334 * 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
|
1335 * 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
|
1336 * 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
|
1337 * 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
|
1338 * 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
|
1339 */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1340 #if 0 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1341 static dlfunc_t SDL_OSX_dlfunc(void * dl_restrict handle, const char * dl_restrict symbol) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1342 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1343 union |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1344 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1345 void *d; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1346 dlfunc_t f; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1347 } rv; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1348 int sym_len = SDL_strlen(symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1349 char *malloc_sym = NULL; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1350 dolock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1351 malloc_sym = SDL_malloc(sym_len + 2); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1352 if (malloc_sym) |
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 SDL_snprintf(malloc_sym, sym_len+2, "_%s", symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1355 rv.d = dlsymIntern(handle, malloc_sym, 1); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1356 SDL_free(malloc_sym); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1357 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1358 else |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1359 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1360 error("Unable to allocate memory"); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1361 goto dlfuncerror; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1362 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1363 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1364 return rv.f; |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1365 dlfuncerror: |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1366 dounlock(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1367 return NULL; |
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 #endif |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1370 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1371 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1372 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1373 /* 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
|
1374 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1375 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1376 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1377 /* 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
|
1378 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1379 #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
|
1380 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1381 void *SDL_LoadObject(const char *sofile) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1382 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1383 void *handle = SDL_OSX_dlopen(sofile, RTLD_NOW); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1384 const char *loaderror = SDL_OSX_dlerror(); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1385 if ( handle == NULL ) { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1386 SDL_SetError("Failed loading %s: %s", sofile, loaderror); |
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 return(handle); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1389 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1390 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1391 void *SDL_LoadFunction(void *handle, 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
|
1392 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1393 void *symbol = SDL_OSX_dlsym(handle, name); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1394 if ( symbol == NULL ) { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1395 SDL_SetError("Failed loading %s: %s", name, SDL_OSX_dlerror()); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1396 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1397 return(symbol); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1398 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1399 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1400 void SDL_UnloadObject(void *handle) |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1401 { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1402 if ( handle != NULL ) { |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1403 SDL_OSX_dlclose(handle); |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1404 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1405 } |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1406 |
e308d020d315
Xcode has trouble compiling different files with the same name for two architectures
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1407 #endif /* SDL_LOADSO_DLCOMPAT */ |