Jacek Caban : dbghelp: Use loader_ops for load_module.

Alexandre Julliard julliard at winehq.org
Wed Mar 25 17:07:29 CDT 2020


Module: wine
Branch: master
Commit: 5ae3f969d4ec525a14a8109a5ee4c5a2e2238405
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5ae3f969d4ec525a14a8109a5ee4c5a2e2238405

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Mar 25 17:40:59 2020 +0100

dbghelp: Use loader_ops for load_module.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dbghelp/dbghelp_private.h |  5 +----
 dlls/dbghelp/elf_module.c      |  8 ++------
 dlls/dbghelp/macho_module.c    |  8 ++------
 dlls/dbghelp/module.c          | 19 +++++++------------
 4 files changed, 12 insertions(+), 28 deletions(-)

diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index 3f2596fa10..9751cfbb6c 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -392,6 +392,7 @@ typedef BOOL (*enum_modules_cb)(const WCHAR*, unsigned long addr, void* user);
 struct loader_ops
 {
     BOOL (*synchronize_module_list)(struct process* process);
+    struct module* (*load_module)(struct process* process, const WCHAR* name, ULONG_PTR addr);
     BOOL (*enum_modules)(struct process* process, enum_modules_cb callback, void* user);
     BOOL (*fetch_file_info)(struct process* process, const WCHAR* name, ULONG_PTR load_addr, DWORD_PTR* base, DWORD* size, DWORD* checksum);
 };
@@ -603,16 +604,12 @@ extern DWORD calc_crc32(HANDLE handle) DECLSPEC_HIDDEN;
 
 /* elf_module.c */
 extern BOOL         elf_load_debug_info(struct module* module) DECLSPEC_HIDDEN;
-extern struct module*
-                    elf_load_module(struct process* pcs, const WCHAR* name, unsigned long) DECLSPEC_HIDDEN;
 extern BOOL         elf_read_wine_loader_dbg_info(struct process* pcs) DECLSPEC_HIDDEN;
 struct elf_thunk_area;
 extern int          elf_is_in_thunk_area(unsigned long addr, const struct elf_thunk_area* thunks) DECLSPEC_HIDDEN;
 
 /* macho_module.c */
 extern BOOL         macho_load_debug_info(struct process *pcs, struct module* module) DECLSPEC_HIDDEN;
-extern struct module*
-                    macho_load_module(struct process* pcs, const WCHAR* name, unsigned long) DECLSPEC_HIDDEN;
 extern BOOL         macho_read_wine_loader_dbg_info(struct process* pcs) DECLSPEC_HIDDEN;
 
 /* minidump.c */
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index 64c550a67b..038a552e42 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -1583,7 +1583,7 @@ static BOOL elf_load_cb(const WCHAR* name, unsigned long load_addr,
  * Also, find module real name and load address from
  * the real loaded modules list in pcs address space
  */
-struct module*  elf_load_module(struct process* pcs, const WCHAR* name, unsigned long addr)
+static struct module* elf_load_module(struct process* pcs, const WCHAR* name, unsigned long addr)
 {
     struct elf_load     el;
 
@@ -1706,6 +1706,7 @@ static BOOL elf_search_loader(struct process* pcs, struct elf_info* elf_info)
 static const struct loader_ops elf_loader_ops =
 {
     elf_synchronize_module_list,
+    elf_load_module,
     elf_enum_modules,
     elf_fetch_file_info,
 };
@@ -1740,11 +1741,6 @@ BOOL elf_read_wine_loader_dbg_info(struct process* pcs)
     return FALSE;
 }
 
-struct module*  elf_load_module(struct process* pcs, const WCHAR* name, unsigned long addr)
-{
-    return NULL;
-}
-
 BOOL elf_load_debug_info(struct module* module)
 {
     return FALSE;
diff --git a/dlls/dbghelp/macho_module.c b/dlls/dbghelp/macho_module.c
index df38129e12..c55443905b 100644
--- a/dlls/dbghelp/macho_module.c
+++ b/dlls/dbghelp/macho_module.c
@@ -1782,7 +1782,7 @@ static BOOL macho_load_cb(const WCHAR* name, unsigned long addr, void* user)
  * Also, find module real name and load address from
  * the real loaded modules list in pcs address space.
  */
-struct module*  macho_load_module(struct process* pcs, const WCHAR* name, unsigned long addr)
+static struct module* macho_load_module(struct process* pcs, const WCHAR* name, unsigned long addr)
 {
     struct macho_load   ml;
 
@@ -1906,6 +1906,7 @@ static BOOL macho_search_loader(struct process* pcs, struct macho_info* macho_in
 static const struct loader_ops macho_loader_ops =
 {
     macho_synchronize_module_list,
+    macho_load_module,
     macho_enum_modules,
     macho_fetch_file_info,
 };
@@ -1936,11 +1937,6 @@ BOOL macho_read_wine_loader_dbg_info(struct process* pcs)
     return FALSE;
 }
 
-struct module*  macho_load_module(struct process* pcs, const WCHAR* name, unsigned long addr)
-{
-    return NULL;
-}
-
 BOOL macho_load_debug_info(struct process *pcs, struct module* module)
 {
     return FALSE;
diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c
index b8ac41f008..feba96d53e 100644
--- a/dlls/dbghelp/module.c
+++ b/dlls/dbghelp/module.c
@@ -890,18 +890,7 @@ DWORD64 WINAPI  SymLoadModuleExW(HANDLE hProcess, HANDLE hFile, PCWSTR wImageNam
             wImageName)
         {
             /* and finally an ELF or Mach-O module */
-            switch (module_get_type_by_name(wImageName))
-            {
-                case DMT_ELF:
-                    module = elf_load_module(pcs, wImageName, BaseOfDll);
-                    break;
-                case DMT_MACHO:
-                    module = macho_load_module(pcs, wImageName, BaseOfDll);
-                    break;
-                default:
-                    /* Ignored */
-                    break;
-            }
+            module = pcs->loader->load_module(pcs, wImageName, BaseOfDll);
         }
     }
     if (!module)
@@ -1431,6 +1420,11 @@ static BOOL native_synchronize_module_list(struct process* pcs)
     return FALSE;
 }
 
+static struct module* native_load_module(struct process* pcs, const WCHAR* name, unsigned long addr)
+{
+    return NULL;
+}
+
 static BOOL native_enum_modules(struct process *process, enum_modules_cb cb, void* user)
 {
     return FALSE;
@@ -1445,6 +1439,7 @@ static BOOL native_fetch_file_info(struct process* process, const WCHAR* name, U
 const struct loader_ops no_loader_ops =
 {
     native_synchronize_module_list,
+    native_load_module,
     native_enum_modules,
     native_fetch_file_info,
 };




More information about the wine-cvs mailing list