Alexandre Julliard : ntdll: Use the standard code path to load ntdll.dll.
Alexandre Julliard
julliard at winehq.org
Mon Sep 28 14:49:26 CDT 2020
Module: wine
Branch: master
Commit: 7cec3dc28492f2d43d706cde9afa4fcbc4ae87c4
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7cec3dc28492f2d43d706cde9afa4fcbc4ae87c4
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Sep 28 19:38:23 2020 +0200
ntdll: Use the standard code path to load ntdll.dll.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/unix/loader.c | 20 ++++-------------
dlls/ntdll/unix/unix_private.h | 1 -
dlls/ntdll/unix/virtual.c | 50 ------------------------------------------
3 files changed, 4 insertions(+), 67 deletions(-)
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index b8500b5772..6890a08428 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -1438,24 +1438,12 @@ found:
static void load_ntdll(void)
{
NTSTATUS status;
+ SECTION_IMAGE_INFORMATION info;
void *module;
- int fd;
- char *name = build_path( dll_dir, "ntdll.dll" );
+ char *name = build_path( dll_dir, "ntdll.dll.so" );
- if ((fd = open( name, O_RDONLY )) != -1)
- {
- struct stat st;
- fstat( fd, &st );
- if (!(status = virtual_map_ntdll( fd, &module )))
- add_builtin_module( module, NULL, &st );
- close( fd );
- }
- else
- {
- free( name );
- name = build_path( dll_dir, "ntdll.dll.so" );
- status = dlopen_dll( name, &module );
- }
+ name[strlen(name) - 3] = 0; /* remove .so */
+ status = open_builtin_file( name, &module, &info );
if (status) fatal_error( "failed to load %s error %x\n", name, status );
free( name );
load_ntdll_functions( module );
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index 88a726d244..f99c13fe2a 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -177,7 +177,6 @@ extern NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct o
extern void *anon_mmap_fixed( void *start, size_t size, int prot, int flags ) DECLSPEC_HIDDEN;
extern void *anon_mmap_alloc( size_t size, int prot ) DECLSPEC_HIDDEN;
extern void virtual_init(void) DECLSPEC_HIDDEN;
-extern NTSTATUS virtual_map_ntdll( int fd, void **module ) DECLSPEC_HIDDEN;
extern ULONG_PTR get_system_affinity_mask(void) DECLSPEC_HIDDEN;
extern void virtual_get_system_info( SYSTEM_BASIC_INFORMATION *info ) DECLSPEC_HIDDEN;
extern NTSTATUS virtual_create_builtin_view( void *module ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 336666c358..d79e3de662 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -2436,56 +2436,6 @@ void virtual_init(void)
}
-/***********************************************************************
- * virtual_map_ntdll
- *
- * Map ntdll, used instead of virtual_map_section() because some things are not initialized yet.
- */
-NTSTATUS virtual_map_ntdll( int fd, void **module )
-{
- IMAGE_DOS_HEADER dos;
- IMAGE_NT_HEADERS nt;
- NTSTATUS status;
- SIZE_T size;
- void *base;
- unsigned int vprot;
- struct file_view *view;
-
- /* load the headers */
-
- size = pread( fd, &dos, sizeof(dos), 0 );
- if (size < sizeof(dos)) return STATUS_INVALID_IMAGE_FORMAT;
- if (dos.e_magic != IMAGE_DOS_SIGNATURE) return STATUS_INVALID_IMAGE_FORMAT;
-
- size = pread( fd, &nt, sizeof(nt), dos.e_lfanew );
- if (size < sizeof(nt)) return STATUS_INVALID_IMAGE_PROTECT;
- if (nt.Signature != IMAGE_NT_SIGNATURE) return STATUS_INVALID_IMAGE_FORMAT;
- if (nt.OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR_MAGIC) return STATUS_INVALID_IMAGE_FORMAT;
-#ifdef __i386__
- if (nt.FileHeader.Machine != IMAGE_FILE_MACHINE_I386) return STATUS_INVALID_IMAGE_FORMAT;
-#elif defined(__x86_64__)
- if (nt.FileHeader.Machine != IMAGE_FILE_MACHINE_AMD64) return STATUS_INVALID_IMAGE_FORMAT;
-#elif defined(__arm__)
- if (nt.FileHeader.Machine != IMAGE_FILE_MACHINE_ARM &&
- nt.FileHeader.Machine != IMAGE_FILE_MACHINE_THUMB &&
- nt.FileHeader.Machine != IMAGE_FILE_MACHINE_ARMNT) return STATUS_INVALID_IMAGE_FORMAT;
-#elif defined(__aarch64__)
- if (nt.FileHeader.Machine != IMAGE_FILE_MACHINE_ARM64) return STATUS_INVALID_IMAGE_FORMAT;
-#endif
-
- base = (void *)nt.OptionalHeader.ImageBase;
- size = ROUND_SIZE( 0, nt.OptionalHeader.SizeOfImage );
- vprot = SEC_IMAGE | SEC_FILE | VPROT_COMMITTED | VPROT_READ | VPROT_EXEC | VPROT_WRITECOPY;
-
- status = map_view( &view, base, size, FALSE, vprot, 0 );
- if (status == STATUS_CONFLICTING_ADDRESSES)
- ERR( "couldn't load ntdll at preferred address %p\n", base );
- if (status) return status;
- *module = view->base;
- return map_image_into_view( view, fd, base, nt.OptionalHeader.SizeOfHeaders, 0, -1, FALSE );
-}
-
-
/***********************************************************************
* get_system_affinity_mask
*/
More information about the wine-cvs
mailing list