From d4fcc4bd06a130f998db69df123449dea540d82e Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Wed, 5 Mar 2003 02:50:25 +0000 Subject: [PATCH] Removed SO loading type. --- dlls/ntdll/Makefile.in | 1 - documentation/configuring.sgml | 14 +- documentation/wine.conf.man | 8 +- documentation/wine.man.in | 8 +- include/module.h | 1 - loader/elf.c | 281 --------------------------------- loader/loadorder.c | 77 ++++----- loader/module.c | 6 - loader/ne/module.c | 1 - 9 files changed, 44 insertions(+), 353 deletions(-) delete mode 100644 loader/elf.c diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in index 06fab0c0b2d..20883f8fead 100644 --- a/dlls/ntdll/Makefile.in +++ b/dlls/ntdll/Makefile.in @@ -18,7 +18,6 @@ C_SRCS = \ $(TOPOBJDIR)/if1632/builtin.c \ $(TOPOBJDIR)/if1632/relay.c \ $(TOPOBJDIR)/if1632/snoop.c \ - $(TOPOBJDIR)/loader/elf.c \ $(TOPOBJDIR)/loader/loadorder.c \ $(TOPOBJDIR)/loader/main.c \ $(TOPOBJDIR)/loader/module.c \ diff --git a/documentation/configuring.sgml b/documentation/configuring.sgml index 304337f7708..45762f13498 100644 --- a/documentation/configuring.sgml +++ b/documentation/configuring.sgml @@ -538,7 +538,7 @@ And here is a setup for Drive A, a generic floppy drive: so - Native ELF libraries. Will not work yet. + Native ELF libraries. Has been deprecated, ignored. @@ -559,7 +559,7 @@ And here is a setup for Drive A, a generic floppy drive: These settings provide wine's default handling of DLL loading. - "DefaultLoadOrder" =" native, so, builtin" + "DefaultLoadOrder" =" native, builtin" This setting is a comma-delimited list of the order in @@ -1617,16 +1617,6 @@ OPTIONAL: that Wine is able to load on demand. - - so - - A native Unix .so file, with - calling convention conversion thunks generated on the - fly as the library is loaded. This is mostly useful - for libraries such as "glide" that have exactly the - same API on both Windows and Unix. - - diff --git a/documentation/wine.conf.man b/documentation/wine.conf.man index 9062d1efa8f..75ccc506b96 100644 --- a/documentation/wine.conf.man +++ b/documentation/wine.conf.man @@ -192,14 +192,14 @@ Also valid as an AppDefaults setting (recommended/preferred use). .PP .B [DllOverrides] .br -.I format: """modulename""=""native,so,builtin""" +.I format: """modulename""=""native,builtin""" .br .I modulename can be any valid DLL module name. If no extension is specified .dll is assumed. The specified value is a comma separated list of module-types to try to load in that specific order. Case is not important and only -the first letter of each type is enough to identify the type n[ative], -s[o], b[uiltin]. Also whitespace is ignored. See also commandline +the first letter of each type is enough to identify the type n[ative] +or b[uiltin]. Also whitespace is ignored. See also commandline option .I --dll for details about the allowable types. @@ -208,7 +208,7 @@ The wildcard entry .I """*""" specifies the load order to use for modules not explicitly mentioned. If the wildcard entry is not found, then the order -"native,builtin,so" is used. +"native,builtin" is used. .br Examples: .br diff --git a/documentation/wine.man.in b/documentation/wine.man.in index 43cbcedcdd4..decee800b61 100644 --- a/documentation/wine.man.in +++ b/documentation/wine.man.in @@ -105,20 +105,18 @@ For more information on debugging messages, see the file in the source distribution (FIXME: outdated). .RE .TP -.I --dll name[,name[,...]]={native|so|builtin}[,{n|s|b}[,...]] +.I --dll name[,name[,...]]={native|builtin}[,{n|b}[,...]] Selects the override type and load order of dll used in the loading process for any dll. The default is set in the configuration file. There are currently three types of libraries that can be loaded into a process' address space: Native windows dlls ( .I native -), native ELF libraries ( -.I so -)and +), .B wine internal dlls ( .I builtin ). The type may be abbreviated with the first letter of the type ( -.I n, s, b +.I n, b ). Each sequence of orders must be separated by commas. .br Each dll may have its own specific load order. The load order diff --git a/include/module.h b/include/module.h index 4db3cc56182..ef3cdba469a 100644 --- a/include/module.h +++ b/include/module.h @@ -175,7 +175,6 @@ enum loadorder_type { LOADORDER_INVALID = 0, /* Must be 0 */ LOADORDER_DLL, /* Native DLLs */ - LOADORDER_SO, /* Native .so libraries */ LOADORDER_BI, /* Built-in modules */ LOADORDER_NTYPES }; diff --git a/loader/elf.c b/loader/elf.c deleted file mode 100644 index 3d95f86e6dd..00000000000 --- a/loader/elf.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - * UNIX dynamic loader - * - * Currently only supports stuff using the dl* API. - * - * Copyright 1998 Marcus Meissner - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * FIXME: Small reentrancy problem. - * IDEA(s): could be used to split up shell32,comctl32... - */ - -#include "config.h" -#include "wine/port.h" - -#include -#include -#include -#include - -#include "snoop.h" -#include "file.h" -#include "wine/debug.h" -#include "winerror.h" - -WINE_DEFAULT_DEBUG_CHANNEL(win32); - -typedef struct { - WORD popl WINE_PACKED; /* 0x8f 0x05 */ - DWORD addr_popped WINE_PACKED;/* ... */ - BYTE pushl1 WINE_PACKED; /* 0x68 */ - DWORD newret WINE_PACKED; /* ... */ - BYTE pushl2 WINE_PACKED; /* 0x68 */ - DWORD origfun WINE_PACKED; /* original function */ - BYTE ret1 WINE_PACKED; /* 0xc3 */ - WORD addesp WINE_PACKED; /* 0x83 0xc4 */ - BYTE nrofargs WINE_PACKED; /* nr of arguments to add esp, */ - BYTE pushl3 WINE_PACKED; /* 0x68 */ - DWORD oldret WINE_PACKED; /* Filled out from popl above */ - BYTE ret2 WINE_PACKED; /* 0xc3 */ -} ELF_STDCALL_STUB; - -#define UNIX_DLL_ENDING "so" - -#define STUBSIZE 4095 -#define STUBOFFSET (sizeof(IMAGE_DOS_HEADER) + \ - sizeof(IMAGE_NT_HEADERS) + \ - sizeof(IMAGE_SECTION_HEADER)) - -static FARPROC ELF_FindExportedFunction( WINE_MODREF *wm, LPCSTR funcName, int hint, BOOL snoop ); - -static HMODULE ELF_CreateDummyModule( LPCSTR libname, LPCSTR modname ) -{ - PIMAGE_DOS_HEADER dh; - PIMAGE_NT_HEADERS nth; - PIMAGE_SECTION_HEADER sh; - HMODULE hmod; - - hmod = (HMODULE)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, - sizeof(IMAGE_DOS_HEADER) + - sizeof(IMAGE_NT_HEADERS) + - sizeof(IMAGE_SECTION_HEADER) + STUBSIZE ); - dh = (PIMAGE_DOS_HEADER)hmod; - dh->e_magic = IMAGE_DOS_SIGNATURE; - dh->e_lfanew = sizeof(IMAGE_DOS_HEADER); - nth = (IMAGE_NT_HEADERS *)(dh + 1); - nth->Signature = IMAGE_NT_SIGNATURE; - nth->FileHeader.Machine = IMAGE_FILE_MACHINE_I386; - nth->FileHeader.NumberOfSections = 1; - nth->FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER); - nth->FileHeader.Characteristics = - IMAGE_FILE_RELOCS_STRIPPED|IMAGE_FILE_LINE_NUMS_STRIPPED| - IMAGE_FILE_LOCAL_SYMS_STRIPPED|IMAGE_FILE_32BIT_MACHINE| - IMAGE_FILE_DLL|IMAGE_FILE_DEBUG_STRIPPED; - nth->OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR_MAGIC; - nth->OptionalHeader.SizeOfCode = 0; - nth->OptionalHeader.SizeOfInitializedData = 0; - nth->OptionalHeader.SizeOfUninitializedData = 0; - nth->OptionalHeader.AddressOfEntryPoint = 0; - nth->OptionalHeader.BaseOfCode = 0; - nth->OptionalHeader.MajorOperatingSystemVersion = 4; - nth->OptionalHeader.MajorImageVersion = 4; - nth->OptionalHeader.SizeOfImage = 0; - nth->OptionalHeader.SizeOfHeaders = 0; - nth->OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_NATIVE; - nth->OptionalHeader.DllCharacteristics = 0; - nth->OptionalHeader.NumberOfRvaAndSizes = 0; - - /* allocate one code section that crosses the whole process range - * (we could find out from internal tables ... hmm ) - */ - sh=(PIMAGE_SECTION_HEADER)(nth+1); - strcpy(sh->Name,".text"); - sh->Misc.VirtualSize = STUBSIZE; - sh->VirtualAddress = STUBOFFSET; /* so snoop can use it ... */ - sh->SizeOfRawData = STUBSIZE; - sh->PointerToRawData = 0; - sh->Characteristics = IMAGE_SCN_CNT_CODE|IMAGE_SCN_CNT_INITIALIZED_DATA|IMAGE_SCN_MEM_EXECUTE|IMAGE_SCN_MEM_READ; - return hmod; -} - -WINE_MODREF *ELF_LoadLibraryExA( LPCSTR libname, DWORD flags) -{ - WINE_MODREF *wm; - HMODULE hmod; - char *modname,*s,*t,*x; - LPVOID *dlhandle; - char error[1024]; - - t = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, - strlen(libname) + strlen("lib.so") + 1 ); - *t = '\0'; - /* copy path to tempvar ... */ - s=strrchr(libname,'/'); - if (!s) - s=strrchr(libname,'\\'); - if (s) { - s++; /* skip / or \ */ - /* copy everything up to s-1 */ - memcpy(t,libname,s-libname); - t[s-libname]= '\0'; - } else - s = (LPSTR)libname; - modname = s; - /* append "lib" foo ".so" */ - strcat(t,"lib"); - x = t+strlen(t); - strcat(t,s); - s = strchr(x,'.'); - if (s) { - while (s) { - if (!FILE_strcasecmp(s,".dll")) { - strcpy(s+1,UNIX_DLL_ENDING); - break; - } - s=strchr(s+1,'.'); - } - } else { - strcat(x,"."UNIX_DLL_ENDING); - } - - /* grab just the last piece of the path/filename - which should be the name of the library we are - looking to load. increment by 1 to skip the DOS slash */ - s = strrchr(t,'\\'); - s++; - - /* ... and open the library pointed by s, while t points - points to the ENTIRE DOS filename of the library - t is returned by HeapAlloc() above and so is also used - with HeapFree() below */ - dlhandle = wine_dlopen(s,RTLD_NOW,error,sizeof(error)); - if (!dlhandle) { - WARN("failed to load %s: %s\n", s, error); - HeapFree( GetProcessHeap(), 0, t ); - SetLastError( ERROR_FILE_NOT_FOUND ); - return NULL; - } - - hmod = ELF_CreateDummyModule( t, modname ); - - SNOOP_RegisterDLL(hmod,libname,0,STUBSIZE/sizeof(ELF_STDCALL_STUB)); - - wm = PE_CreateModule( hmod, libname, 0, 0, FALSE ); - wm->find_export = ELF_FindExportedFunction; - wm->dlhandle = dlhandle; - return wm; -} - -static FARPROC ELF_FindExportedFunction( WINE_MODREF *wm, LPCSTR funcName, int hint, BOOL snoop ) -{ - LPVOID fun; - int i,nrofargs = 0; - ELF_STDCALL_STUB *stub, *first_stub; - char error[256]; - - if (!HIWORD(funcName)) { - ERR("Can't import from UNIX dynamic libs by ordinal, sorry.\n"); - return (FARPROC)0; - } - fun = wine_dlsym(wm->dlhandle,funcName,error,sizeof(error)); - if (!fun) - { - /* we sometimes have an excess '_' at the beginning of the name */ - if (funcName[0]=='_') - { - funcName++ ; - fun = wine_dlsym(wm->dlhandle,funcName,error,sizeof(error)); - } - } - if (!fun) { - /* Function@nrofargs usually marks a stdcall function - * with nrofargs bytes that are popped at the end - */ - LPCSTR t; - if ((t = strchr(funcName,'@'))) - { - LPSTR fn = HeapAlloc( GetProcessHeap(), 0, t - funcName + 1 ); - memcpy( fn, funcName, t - funcName ); - fn[t - funcName] = 0; - nrofargs = 0; - sscanf(t+1,"%d",&nrofargs); - fun = wine_dlsym(wm->dlhandle,fn,error,sizeof(error)); - HeapFree( GetProcessHeap(), 0, fn ); - } - } - /* We sometimes have Win32 dlls implemented using stdcall but UNIX - * dlls using cdecl. If we find out the number of args the function - * uses, we remove them from the stack using two small stubs. - */ - stub = first_stub = (ELF_STDCALL_STUB *)((char *)wm->module + STUBOFFSET); - for (i=0;iorigfun) - break; - if (stub->origfun == (DWORD)fun) - break; - stub++; - } - if (i==STUBSIZE/sizeof(ELF_STDCALL_STUB)) { - ERR("please report, that there are not enough slots for stdcall stubs in the ELF loader.\n"); - assert(iorigfun) - stub->origfun=(DWORD)fun; /* just a marker */ - - if (fun && nrofargs) { /* we don't need it for 0 args */ - /* Selfmodifying entry/return stub for stdcall -> cdecl - * conversion. - * - Pop returnaddress directly into our return code - * popl - * - Replace it by pointer to start of our returncode - * push $newret - * - And call the original function - * jmp $orgfun - * - Remove the arguments no longer needed - * newret: add esp, - * - Push the original returnvalue on the stack - * pushl - * - And return to it. - * ret - */ - - /* FIXME: The function stub is not reentrant. */ - - ((LPBYTE)&(stub->popl))[0] = 0x8f; - ((LPBYTE)&(stub->popl))[1] = 0x05; - stub->addr_popped = (DWORD)&(stub->oldret); - stub->pushl1 = 0x68; - stub->newret = (DWORD)&(stub->addesp); - stub->pushl2 = 0x68; - stub->origfun = (DWORD)fun; - stub->ret1 = 0xc3; - ((LPBYTE)&(stub->addesp))[0]=0x83; - ((LPBYTE)&(stub->addesp))[1]=0xc4; - stub->nrofargs = nrofargs; - stub->pushl3 = 0x68; - /* filled out by entrycode */ - stub->oldret = 0xdeadbeef; - stub->ret2 = 0xc3; - fun=(FARPROC)stub; - } - if (!fun) { - FIXME("function %s not found: %s\n",funcName,error); - return fun; - } - fun = SNOOP_GetProcAddress(wm->module,funcName,stub-first_stub,fun); - return (FARPROC)fun; -} diff --git a/loader/loadorder.c b/loader/loadorder.c index 0e3eafb5b9b..107e1ac5948 100644 --- a/loader/loadorder.c +++ b/loader/loadorder.c @@ -55,39 +55,36 @@ struct loadorder_list /* the list must remain sorted by dll name */ static module_loadorder_t default_order_list[] = { - { "display", { LOADORDER_BI, 0, 0, 0 } }, - { "gdi.exe", { LOADORDER_BI, 0, 0, 0 } }, - { "gdi32", { LOADORDER_BI, 0, 0, 0 } }, - { "glide2x", { LOADORDER_SO, LOADORDER_DLL, 0, 0 } }, - { "glide3x", { LOADORDER_SO, LOADORDER_DLL, 0, 0 } }, - { "icmp", { LOADORDER_BI, 0, 0, 0 } }, - { "kernel", { LOADORDER_BI, 0, 0, 0 } }, - { "kernel32", { LOADORDER_BI, 0, 0, 0 } }, - { "keyboard", { LOADORDER_BI, 0, 0, 0 } }, - { "krnl386.exe", { LOADORDER_BI, 0, 0, 0 } }, - { "mmsystem", { LOADORDER_BI, 0, 0, 0 } }, - { "mouse", { LOADORDER_BI, 0, 0, 0 } }, - { "ntdll", { LOADORDER_BI, 0, 0, 0 } }, - { "odbc32", { LOADORDER_BI, 0, 0, 0 } }, - { "system", { LOADORDER_BI, 0, 0, 0 } }, - { "toolhelp", { LOADORDER_BI, 0, 0, 0 } }, - { "ttydrv", { LOADORDER_BI, 0, 0, 0 } }, - { "user.exe", { LOADORDER_BI, 0, 0, 0 } }, - { "user32", { LOADORDER_BI, 0, 0, 0 } }, - { "w32skrnl", { LOADORDER_BI, 0, 0, 0 } }, - { "winaspi", { LOADORDER_BI, 0, 0, 0 } }, - { "windebug", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } }, - { "winedos", { LOADORDER_BI, 0, 0, 0 } }, - { "wineps", { LOADORDER_BI, 0, 0, 0 } }, - { "wing", { LOADORDER_BI, 0, 0, 0 } }, - { "winmm", { LOADORDER_BI, 0, 0, 0 } }, - { "winsock", { LOADORDER_BI, 0, 0, 0 } }, - { "wnaspi32", { LOADORDER_BI, 0, 0, 0 } }, - { "wow32", { LOADORDER_BI, 0, 0, 0 } }, - { "wprocs", { LOADORDER_BI, 0, 0, 0 } }, - { "ws2_32", { LOADORDER_BI, 0, 0, 0 } }, - { "wsock32", { LOADORDER_BI, 0, 0, 0 } }, - { "x11drv", { LOADORDER_BI, 0, 0, 0 } } + { "display", { LOADORDER_BI, 0, 0 } }, + { "gdi.exe", { LOADORDER_BI, 0, 0 } }, + { "gdi32", { LOADORDER_BI, 0, 0 } }, + { "icmp", { LOADORDER_BI, 0, 0 } }, + { "kernel", { LOADORDER_BI, 0, 0 } }, + { "kernel32", { LOADORDER_BI, 0, 0 } }, + { "keyboard", { LOADORDER_BI, 0, 0 } }, + { "krnl386.exe", { LOADORDER_BI, 0, 0 } }, + { "mmsystem", { LOADORDER_BI, 0, 0 } }, + { "mouse", { LOADORDER_BI, 0, 0 } }, + { "ntdll", { LOADORDER_BI, 0, 0 } }, + { "odbc32", { LOADORDER_BI, 0, 0 } }, + { "system", { LOADORDER_BI, 0, 0 } }, + { "toolhelp", { LOADORDER_BI, 0, 0 } }, + { "ttydrv", { LOADORDER_BI, 0, 0 } }, + { "user.exe", { LOADORDER_BI, 0, 0 } }, + { "user32", { LOADORDER_BI, 0, 0 } }, + { "w32skrnl", { LOADORDER_BI, 0, 0 } }, + { "winaspi", { LOADORDER_BI, 0, 0 } }, + { "winedos", { LOADORDER_BI, 0, 0 } }, + { "wineps", { LOADORDER_BI, 0, 0 } }, + { "wing", { LOADORDER_BI, 0, 0 } }, + { "winmm", { LOADORDER_BI, 0, 0 } }, + { "winsock", { LOADORDER_BI, 0, 0 } }, + { "wnaspi32", { LOADORDER_BI, 0, 0 } }, + { "wow32", { LOADORDER_BI, 0, 0 } }, + { "wprocs", { LOADORDER_BI, 0, 0 } }, + { "ws2_32", { LOADORDER_BI, 0, 0 } }, + { "wsock32", { LOADORDER_BI, 0, 0 } }, + { "x11drv", { LOADORDER_BI, 0, 0 } } }; static const struct loadorder_list default_list = @@ -100,13 +97,13 @@ static const struct loadorder_list default_list = /* default if nothing else specified */ static const enum loadorder_type default_loadorder[LOADORDER_NTYPES] = { - LOADORDER_BI, LOADORDER_DLL, 0, 0 + LOADORDER_BI, LOADORDER_DLL, 0 }; /* default for modules with an explicit path */ static const enum loadorder_type default_path_loadorder[LOADORDER_NTYPES] = { - LOADORDER_DLL, LOADORDER_BI, 0, 0 + LOADORDER_DLL, LOADORDER_BI, 0 }; static struct loadorder_list cmdline_list; @@ -198,7 +195,6 @@ static const char *debugstr_loadorder( enum loadorder_type lo[] ) switch(lo[i]) { case LOADORDER_DLL: strcat( buffer, "n," ); break; - case LOADORDER_SO: strcat( buffer, "s," ); break; case LOADORDER_BI: strcat( buffer, "b," ); break; default: strcat( buffer, "?," ); break; } @@ -236,12 +232,10 @@ static BOOL ParseLoadOrder(char *order, enum loadorder_type lo[]) case 'N': /* Native */ case 'n': type = LOADORDER_DLL; break; - case 'E': /* Elfdll */ - case 'e': - if (!warn++) MESSAGE("Load order 'elfdll' no longer supported, ignored\n"); - break; case 'S': /* So */ - case 's': type = LOADORDER_SO; break; + case 's': + if (!warn++) MESSAGE("Load order 'so' no longer supported, ignored\n"); + break; case 'B': /* Builtin */ case 'b': type = LOADORDER_BI; break; @@ -458,7 +452,6 @@ static BOOL get_registry_value( HKEY hkey, const char *module, enum loadorder_ty switch(tolowerW(*str)) { case 'n': type = LOADORDER_DLL; break; - case 's': type = LOADORDER_SO; break; case 'b': type = LOADORDER_BI; break; case 0: break; /* end of string */ default: diff --git a/loader/module.c b/loader/module.c index ecab5fef981..a74bfb86fa8 100644 --- a/loader/module.c +++ b/loader/module.c @@ -1279,12 +1279,6 @@ WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HANDLE hfile, DWORD flags ) filetype = "native"; break; - case LOADORDER_SO: - TRACE("Trying so-library '%s'\n", filename); - pwm = ELF_LoadLibraryExA(filename, flags); - filetype = "so"; - break; - case LOADORDER_BI: TRACE("Trying built-in '%s'\n", filename); pwm = BUILTIN32_LoadLibraryExA(filename, flags); diff --git a/loader/ne/module.c b/loader/ne/module.c index 8d01f5b1247..20f2c19024d 100644 --- a/loader/ne/module.c +++ b/loader/ne/module.c @@ -957,7 +957,6 @@ static HINSTANCE16 MODULE_LoadModule16( LPCSTR libname, BOOL implicit, BOOL lib_ filetype = "builtin"; break; - case LOADORDER_SO: /* This is not supported for NE modules */ default: hinst = 2; break;