Commit 9faa1bf9 authored by sewardj's avatar sewardj

[project @ 2001-05-16 09:40:11 by sewardj]

Add enough entries to RTS_MINGW_ONLY_SYMBOLS to make packages
{std lang concurrent util data text} work.  Also add a proper fix
to this using GetModuleHandle(NULL); unfortunately it doesn't
work for some unknown reason.
parent 37e76467
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* $Id: Linker.c,v 1.40 2001/05/15 15:29:03 sewardj Exp $ * $Id: Linker.c,v 1.41 2001/05/16 09:40:11 sewardj Exp $
* *
* (c) The GHC Team, 2000 * (c) The GHC Team, 2000
* *
...@@ -81,6 +81,22 @@ typedef struct _RtsSymbolVal { ...@@ -81,6 +81,22 @@ typedef struct _RtsSymbolVal {
#define RTS_POSIX_ONLY_SYMBOLS #define RTS_POSIX_ONLY_SYMBOLS
#define RTS_MINGW_ONLY_SYMBOLS \ #define RTS_MINGW_ONLY_SYMBOLS \
SymX(abort) \
Sym(_alloca) \
Sym(isxdigit) \
Sym(isupper) \
Sym(ispunct) \
Sym(islower) \
Sym(isspace) \
Sym(isprint) \
Sym(isdigit) \
Sym(iscntrl) \
Sym(isalpha) \
Sym(isalnum) \
SymX(memset) \
SymX(strncpy) \
SymX(strcpy) \
SymX(strcmp) \
Sym(mktime) \ Sym(mktime) \
Sym(gmtime) \ Sym(gmtime) \
Sym(strftime) \ Sym(strftime) \
...@@ -444,26 +460,42 @@ addDLL ( char* dll_name ) ...@@ -444,26 +460,42 @@ addDLL ( char* dll_name )
ASSERT(0); /*NOTREACHED*/ ASSERT(0); /*NOTREACHED*/
# elif defined(OBJFORMAT_PEi386) # elif defined(OBJFORMAT_PEi386)
HINSTANCE instance; /* Add this DLL to the list of DLLs in which to search for symbols.
char* buf; The first time through, also add the executable to the list,
char* errmsg; since we need to search that too. */
char* buf;
OpenedDLL* o_dll; OpenedDLL* o_dll;
HINSTANCE instance;
/* fprintf(stderr, "addDLL %s\n", dll_name ); */ /* fprintf(stderr, "addDLL %s\n", dll_name ); */
#if 0
/* Later ... can't figure out why this doesn't work. So retain the
RTS_MINGW_ONLY_SYMBOLS hack for the time being. */
if (opened_dlls == NULL) {
/* First time through ... */
instance = GetModuleHandle(NULL);
if (instance == NULL)
return "addDLL: can't get handle to the executable";
o_dll = stgMallocBytes( sizeof(OpenedDLL), "addDLL-init" );
o_dll->instance = instance;
o_dll->next = opened_dlls;
opened_dlls = o_dll;
}
#endif
buf = stgMallocBytes(strlen(dll_name) + 10, "addDll"); buf = stgMallocBytes(strlen(dll_name) + 10, "addDll");
sprintf(buf, "%s.DLL", dll_name); sprintf(buf, "%s.DLL", dll_name);
instance = LoadLibrary(buf); instance = LoadLibrary(buf);
free(buf); free(buf);
if (instance == NULL) { if (instance == NULL) {
/* LoadLibrary failed; return a ptr to the error msg. */ /* LoadLibrary failed; return a ptr to the error msg. */
errmsg = "addDLL: unknown error"; return "addDLL: unknown error";
return errmsg;
} }
o_dll = stgMallocBytes( sizeof(OpenedDLL), "addDLL" ); o_dll = stgMallocBytes( sizeof(OpenedDLL), "addDLL" );
o_dll->instance = instance; o_dll->instance = instance;
o_dll->next = opened_dlls; o_dll->next = opened_dlls;
opened_dlls = o_dll; opened_dlls = o_dll;
return NULL; return NULL;
# else # else
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment