ntdll: Remove support for being loaded directly from libwine.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2020-06-29 12:11:57 +02:00
parent 15c3eaafbb
commit 83a4549e9b
2 changed files with 2 additions and 70 deletions

View File

@ -3900,33 +3900,6 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
} }
static NTSTATUS load_ntdll_so( HMODULE module, const IMAGE_NT_HEADERS *nt )
{
NTSTATUS (__cdecl *init_func)( HMODULE module, const void *ptr_in, void *ptr_out );
Dl_info info;
char *name;
void *handle;
if (!dladdr( load_ntdll_so, &info ))
{
fprintf( stderr, "cannot get path to ntdll.dll.so\n" );
exit(1);
}
name = strdup( info.dli_fname );
strcpy( name + strlen(name) - strlen(".dll.so"), ".so" );
if (!(handle = dlopen( name, RTLD_NOW )))
{
fprintf( stderr, "failed to load %s: %s\n", name, dlerror() );
exit(1);
}
if (!(init_func = dlsym( handle, "__wine_init_unix_lib" )))
{
fprintf( stderr, "init func not found in %s\n", name );
exit(1);
}
return init_func( module, nt, &unix_funcs );
}
/*********************************************************************** /***********************************************************************
* __wine_process_init * __wine_process_init
*/ */
@ -3948,13 +3921,9 @@ void __wine_process_init(void)
HMODULE ntdll_module = (HMODULE)((__wine_spec_nt_header.OptionalHeader.ImageBase + 0xffff) & ~0xffff); HMODULE ntdll_module = (HMODULE)((__wine_spec_nt_header.OptionalHeader.ImageBase + 0xffff) & ~0xffff);
INITIAL_TEB stack; INITIAL_TEB stack;
SIZE_T info_size; SIZE_T info_size;
TEB *teb; TEB *teb = thread_init( &info_size );
PEB *peb; PEB *peb = teb->Peb;
if (!unix_funcs) load_ntdll_so( ntdll_module, &__wine_spec_nt_header );
teb = thread_init( &info_size );
peb = teb->Peb;
peb->ProcessHeap = RtlCreateHeap( HEAP_GROWABLE, NULL, 0, 0, NULL, NULL ); peb->ProcessHeap = RtlCreateHeap( HEAP_GROWABLE, NULL, 0, 0, NULL, NULL );
peb->LoaderLock = &loader_section; peb->LoaderLock = &loader_section;

View File

@ -105,10 +105,6 @@ static void (CDECL *p__wine_set_unix_funcs)( int version, const struct unix_func
static void fatal_error( const char *err, ... ) __attribute__((noreturn, format(printf,1,2))); static void fatal_error( const char *err, ... ) __attribute__((noreturn, format(printf,1,2)));
#endif #endif
extern int __wine_main_argc;
extern char **__wine_main_argv;
extern char **__wine_main_environ;
#if defined(linux) || defined(__APPLE__) #if defined(linux) || defined(__APPLE__)
static const BOOL use_preloader = TRUE; static const BOOL use_preloader = TRUE;
#else #else
@ -1803,39 +1799,6 @@ void __wine_main( int argc, char *argv[], char *envp[] )
} }
static int add_area( void *base, size_t size, void *arg )
{
mmap_add_reserved_area( base, size );
return 0;
}
/***********************************************************************
* __wine_init_unix_lib
*
* Lib entry point called by ntdll.dll.so if not yet initialized.
*/
NTSTATUS __cdecl __wine_init_unix_lib( HMODULE module, const void *ptr_in, void *ptr_out )
{
const IMAGE_NT_HEADERS *nt = ptr_in;
#ifdef __APPLE__
extern char **__wine_get_main_environment(void);
char **envp = __wine_get_main_environment();
#else
char **envp = __wine_main_environ;
#endif
init_paths( __wine_main_argc, __wine_main_argv, envp );
ntdll_module = module;
map_so_dll( nt, module );
fixup_ntdll_imports( &__wine_spec_nt_header );
init_environment( __wine_main_argc, __wine_main_argv, envp );
wine_dll_set_callback( load_builtin_callback );
*(struct unix_funcs **)ptr_out = &unix_funcs;
wine_mmap_enum_reserved_areas( add_area, NULL, 0 );
return STATUS_SUCCESS;
}
BOOL WINAPI DECLSPEC_HIDDEN DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) BOOL WINAPI DECLSPEC_HIDDEN DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
{ {
if (reason == DLL_PROCESS_ATTACH) LdrDisableThreadCalloutsForDll( inst ); if (reason == DLL_PROCESS_ATTACH) LdrDisableThreadCalloutsForDll( inst );