Modified process creation sequence: call PE_CreateModule in the
context of the new process (in TASK_CallToStart).
Changed all PE/Module routines so as to always operate on the current
process; adapted all callers.

diff --git a/loader/elf.c b/loader/elf.c
index 203b995..2365537 100644
--- a/loader/elf.c
+++ b/loader/elf.c
@@ -25,8 +25,7 @@
 #include "module.h"
 #include "debug.h"
 
-WINE_MODREF *
-ELF_CreateDummyModule( LPCSTR libname, LPCSTR modname, PDB32 *process )
+WINE_MODREF *ELF_CreateDummyModule( LPCSTR libname, LPCSTR modname )
 {
 	PIMAGE_DOS_HEADER	dh;
 	PIMAGE_NT_HEADERS	nth;
@@ -34,17 +33,20 @@
 	WINE_MODREF *wm;
 	HMODULE32 hmod;
 
-	wm=(WINE_MODREF*)HeapAlloc(process->heap,HEAP_ZERO_MEMORY,sizeof(*wm));
+	wm=(WINE_MODREF*)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wm) );
 	wm->type = MODULE32_ELF;
 
 	/* FIXME: hmm, order? */
-	wm->next = process->modref_list;
-	process->modref_list = wm;
+	wm->next = PROCESS_Current()->modref_list;
+	PROCESS_Current()->modref_list = wm;
 
-	wm->modname = HEAP_strdupA(process->heap,0,modname);
-	wm->longname = HEAP_strdupA(process->heap,0,libname);
+	wm->modname = HEAP_strdupA( GetProcessHeap(), 0, modname );
+	wm->longname = HEAP_strdupA( GetProcessHeap(), 0, libname );
 
-	hmod = (HMODULE32)HeapAlloc(process->heap,HEAP_ZERO_MEMORY,sizeof(IMAGE_DOS_HEADER)+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)+100);
+	hmod = (HMODULE32)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 
+                                     sizeof(IMAGE_DOS_HEADER) + 
+                                     sizeof(IMAGE_NT_HEADERS) +
+                                     sizeof(IMAGE_SECTION_HEADER) + 100 );
 	dh = (PIMAGE_DOS_HEADER)hmod;
 	dh->e_magic = IMAGE_DOS_SIGNATURE;
 	dh->e_lfanew = sizeof(IMAGE_DOS_HEADER);
@@ -94,13 +96,14 @@
 
 #include <dlfcn.h>
 
-HMODULE32
-ELF_LoadLibraryEx32A(LPCSTR libname,PDB32 *process,HANDLE32 hf,DWORD flags) {
+HMODULE32 ELF_LoadLibraryEx32A( LPCSTR libname, HANDLE32 hf, DWORD flags )
+{
 	WINE_MODREF	*wm;
 	char		*modname,*s,*t,*x;
 	LPVOID		*dlhandle;
 
-	t = HeapAlloc(process->heap,HEAP_ZERO_MEMORY,strlen(libname)+strlen("lib.so")+1);
+	t = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
+                       strlen(libname) + strlen("lib.so") + 1 );
 	*t = '\0';
 	/* copy path to tempvar ... */
 	s=strrchr(libname,'/');
@@ -130,19 +133,19 @@
 	/* ... and open it */
 	dlhandle = dlopen(t,RTLD_NOW);
 	if (!dlhandle) {
-		HeapFree(process->heap,0,t);
+		HeapFree( GetProcessHeap(), 0, t );
 		return 0;
 	}
 
-	wm = ELF_CreateDummyModule( t, modname, process );
+	wm = ELF_CreateDummyModule( t, modname );
 	wm->binfmt.elf.dlhandle = dlhandle;
 
 	SNOOP_RegisterDLL(wm->module,libname,STUBSIZE/sizeof(ELF_STDCALL_STUB));
 	return wm->module;
 }
 
-FARPROC32
-ELF_FindExportedFunction( PDB32 *process,WINE_MODREF *wm, LPCSTR funcName) {
+FARPROC32 ELF_FindExportedFunction( WINE_MODREF *wm, LPCSTR funcName) 
+{
 	LPVOID			fun;
 	int			i,nrofargs = 0;
 	ELF_STDCALL_STUB	*stub;
@@ -163,14 +166,14 @@
 		 * with nrofargs bytes that are popped at the end
 		 */
 		if (strchr(funcName,'@')) {
-			LPSTR	t,fn = HEAP_strdupA(process->heap,0,funcName);
+			LPSTR	t,fn = HEAP_strdupA( GetProcessHeap(), 0, funcName );
 
 			t = strchr(fn,'@');
 			*t = '\0';
 			nrofargs = 0;
 			sscanf(t+1,"%d",&nrofargs);
 			fun = dlsym(wm->binfmt.elf.dlhandle,fn);
-			HeapFree(process->heap,0,fn);
+			HeapFree( GetProcessHeap(), 0, fn );
 		}
 	}
 	/* We sometimes have Win32 dlls implemented using stdcall but UNIX 
@@ -242,12 +245,12 @@
 }
 #else
 
-HMODULE32
-ELF_LoadLibraryEx32A(LPCSTR libname,PDB32 *process,HANDLE32 hf,DWORD flags) {
+HMODULE32 ELF_LoadLibraryEx32A( LPCSTR libname, HANDLE32 hf, DWORD flags)
+{
 	return 0;
 }
-FARPROC32
-ELF_FindExportedFunction( PDB32 *process,WINE_MODREF *wm, LPCSTR funcName) {
+FARPROC32 ELF_FindExportedFunction( WINE_MODREF *wm, LPCSTR funcName) 
+{
 	return (FARPROC32)0;
 }