diff options
author | wtc <devnull@localhost> | 1998-05-08 18:43:58 +0000 |
---|---|---|
committer | wtc <devnull@localhost> | 1998-05-08 18:43:58 +0000 |
commit | fe275f95743bccd36e6c1385a5aa8c19bee38594 (patch) | |
tree | 10826ab504cd339fdf7cc10a8bc61659631be635 | |
parent | 3de0f6679742b8ccab15ba8fa597bd8c83a2ada7 (diff) | |
download | nspr-hg-fe275f95743bccd36e6c1385a5aa8c19bee38594.tar.gz |
Merged patches from Matt Watson <mwatson@apple.com> to make loadable
modules work on Rhapsody. Still have a few kinks to iron out.
-rw-r--r-- | pr/src/linking/prlink.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/pr/src/linking/prlink.c b/pr/src/linking/prlink.c index 4a996cf2..53a9ae94 100644 --- a/pr/src/linking/prlink.c +++ b/pr/src/linking/prlink.c @@ -33,9 +33,7 @@ #elif defined(USE_HPSHL) #include <dl.h> #elif defined(USE_RLD) -#include <fcntl.h> -#include <streams/streams.h> -#include <mach-o/rld.h> +#include <mach-o/dyld.h> #endif /* Define this on systems which don't have it (AIX) */ @@ -67,8 +65,7 @@ struct PRLibrary { #if defined(USE_HPSHL) shl_t dlh; #elif defined(USE_RLD) - NXStream* dlh; - int rld_fd; + NSModule dlh; #else void* dlh; #endif @@ -642,10 +639,12 @@ PR_LoadLibrary(const char *name) */ shl_t h = shl_load(name, BIND_IMMEDIATE | DYNAMIC_PATH, 0L); #elif defined(USE_RLD) - int fd = open(name, O_RDONLY); - NXStream *h = NXOpenFile(fd, NX_READONLY); - - lm->rld_fd = fd; + NSObjectFileImage ofi; + NSModule h = NULL; + if (NSCreateObjectFileImageFromFile(name, &ofi) + == NSObjectFileImageSuccess) { + h = NSLinkModule(ofi, name, TRUE); + } #else #error Configuration error #endif @@ -713,9 +712,7 @@ PR_UnloadLibrary(PRLibrary *lib) #elif defined(USE_HPSHL) result = shl_unload(lib->dlh); #elif defined(USE_RLD) - result = rld_unload(lib->dlh); - NXClose(lib->dlh); - close(lib->rld_fd); + result = NSUnLinkModule(lib->dlh, FALSE); #else #error Configuration error #endif @@ -827,8 +824,7 @@ pr_FindSymbolInLib(PRLibrary *lm, const char *name) if (shl_findsym(&lm->dlh, name, TYPE_PROCEDURE, &f) == -1) f = NULL; #elif defined(USE_RLD) - if (rld_lookup(lm->dlh, name, (unsigned long*)&f) == -1) - f = NULL; + f = NSAddressOfSymbol(NSLookupAndBindSymbol(name)); #endif #endif /* HAVE_DLL */ #endif /* XP_UNIX */ @@ -854,7 +850,7 @@ PR_FindSymbol(PRLibrary *lib, const char *raw_name) /* ** Mangle the raw symbol name in any way that is platform specific. */ -#if defined(SUNOS4) +#if defined(SUNOS4) || defined(RHAPSODY) /* Need a leading _ */ name = PR_smprintf("_%s", raw_name); #elif defined(AIX) @@ -899,7 +895,7 @@ PR_FindSymbolAndLibrary(const char *raw_name, PRLibrary* *lib) /* ** Mangle the raw symbol name in any way that is platform specific. */ -#if defined(SUNOS4) +#if defined(SUNOS4) || defined(RHAPSODY) /* Need a leading _ */ name = PR_smprintf("_%s", raw_name); #elif defined(AIX) |