diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index 7d2ad7f6e67..a6778e746a5 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -455,6 +455,15 @@ enum module_type module_get_type_by_name(const WCHAR* name) return DMT_PE; } +/****************************************************************** + * refresh_module_list + */ +static BOOL refresh_module_list(struct process* pcs) +{ + /* force transparent ELF and Mach-O loading / unloading */ + return elf_synchronize_module_list(pcs) || macho_synchronize_module_list(pcs); +} + /*********************************************************************** * SymLoadModule (DBGHELP.@) */ @@ -536,9 +545,7 @@ DWORD64 WINAPI SymLoadModuleExW(HANDLE hProcess, HANDLE hFile, PCWSTR wImageNam if (Flags & ~(SLMFLAG_VIRTUAL)) FIXME("Unsupported Flags %08x for %s\n", Flags, debugstr_w(wImageName)); - /* force transparent ELF and Mach-O loading / unloading */ - elf_synchronize_module_list(pcs); - macho_synchronize_module_list(pcs); + refresh_module_list(pcs); /* this is a Wine extension to the API just to redo the synchronisation */ if (!wImageName && !hFile) return 0; @@ -1058,6 +1065,11 @@ void module_reset_debug_info(struct module* module) */ BOOL WINAPI SymRefreshModuleList(HANDLE hProcess) { - FIXME("(%p) stub\n", hProcess); - return FALSE; + struct process* pcs; + + TRACE("(%p)\n", hProcess); + + if (!(pcs = process_find_by_handle(hProcess))) return FALSE; + + return refresh_module_list(pcs); } diff --git a/include/dbghelp.h b/include/dbghelp.h index 98695b23634..34805f4e78a 100644 --- a/include/dbghelp.h +++ b/include/dbghelp.h @@ -1461,6 +1461,7 @@ BOOL WINAPI SymGetSymPrevW(HANDLE, PIMAGEHLP_SYMBOLW); DWORD WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD); BOOL WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID); BOOL WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID); +BOOL WINAPI SymRefreshModuleList(HANDLE); BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD); BOOL WINAPI SymUnloadModule(HANDLE, DWORD);