8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
-
+
+
+
+
+
+
|
* It should work with OpenStep, but it's not been tried.
*
* Copyright (c) 1995 Apple Computer, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclLoadDyld.c,v 1.2 2000/04/25 17:55:45 hobbs Exp $
* RCS: @(#) $Id: tclLoadDyld.c,v 1.2.2.1 2001/04/06 18:42:39 hobbs Exp $
*/
#include "tclInt.h"
#include <mach-o/dyld.h>
/* For compatibility with older API. */
#ifndef NSLINKMODULE_OPTION_PRIVATE
#define NSLINKMODULE_OPTION_PRIVATE TRUE
#endif
/*
*----------------------------------------------------------------------
*
* TclpLoadFile --
*
* Dynamically loads a binary code file into memory and returns
|
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
-
+
+
+
+
+
+
+
+
+
|
default:
Tcl_SetResult(interp, "dyld: unknown failure", TCL_STATIC);
break;
}
return TCL_ERROR;
}
module = NSLinkModule(image, fileName, TRUE);
module = NSLinkModule(image, fileName, NSLINKMODULE_OPTION_PRIVATE);
if (module == NULL) {
Tcl_SetResult(interp, "dyld: falied to link module", TCL_STATIC);
return TCL_ERROR;
}
name = (char*)malloc(sizeof(char)*(strlen(sym1)+2));
sprintf(name, "_%s", sym1);
#ifdef NSLINKMODULE_OPTION_PRIVATE
symbol = NSLookupSymbolInModule(module, name);
#else
symbol = NSLookupAndBindSymbol(name);
#endif
free(name);
*proc1Ptr = NSAddressOfSymbol(symbol);
name = (char*)malloc(sizeof(char)*(strlen(sym2)+2));
sprintf(name, "_%s", sym2);
#ifdef NSLINKMODULE_OPTION_PRIVATE
symbol = NSLookupSymbolInModule(module, name);
#else
symbol = NSLookupAndBindSymbol(name);
#endif
free(name);
*proc2Ptr = NSAddressOfSymbol(symbol);
*clientDataPtr = module;
return TCL_OK;
}
|