diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h index 3f2596fa102..9751cfbb6cc 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 64c550a67bd..038a552e429 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 df38129e12c..c55443905b0 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 b8ac41f0080..feba96d53ea 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, };