From 17d464d0d99b0f7a1e91f91be156bd7597ca48be Mon Sep 17 00:00:00 2001 From: Eric Pouech <pouech-eric@wanadoo.fr> Date: Mon, 5 Apr 2004 22:49:32 +0000 Subject: [PATCH] Set correct options for dbghelp (ELF loading & parsing speed). --- programs/taskmgr/dbgchnl.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/programs/taskmgr/dbgchnl.c b/programs/taskmgr/dbgchnl.c index cd2a96df690..79ed96ce670 100644 --- a/programs/taskmgr/dbgchnl.c +++ b/programs/taskmgr/dbgchnl.c @@ -50,6 +50,7 @@ * setting for a fixme:s or err:s */ +static DWORD (WINAPI *pSymSetOptions)(DWORD); static BOOL (WINAPI *pSymInitialize)(HANDLE, PSTR, BOOL); static DWORD (WINAPI *pSymLoadModule)(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD); static BOOL (WINAPI *pSymCleanup)(HANDLE); @@ -62,11 +63,12 @@ BOOL AreDebugChannelsSupported(void) if (hDbgHelp) return TRUE; if (!(hDbgHelp = LoadLibrary("dbghelp.dll"))) return FALSE; + pSymSetOptions = (void*)GetProcAddress(hDbgHelp, "SymSetOptions"); pSymInitialize = (void*)GetProcAddress(hDbgHelp, "SymInitialize"); pSymLoadModule = (void*)GetProcAddress(hDbgHelp, "SymLoadModule"); pSymFromName = (void*)GetProcAddress(hDbgHelp, "SymFromName"); pSymCleanup = (void*)GetProcAddress(hDbgHelp, "SymCleanup"); - if (!pSymInitialize || !pSymLoadModule || !pSymCleanup || !pSymFromName) + if (!pSymSetOptions || !pSymInitialize || !pSymLoadModule || !pSymCleanup || !pSymFromName) { FreeLibrary(hDbgHelp); hDbgHelp = NULL; @@ -161,7 +163,11 @@ void* get_symbol(HANDLE hProcess, char* name, char* lib) SYMBOL_INFO* si = (SYMBOL_INFO*)buffer; void* ret = NULL; - if (pSymInitialize(hProcess, NULL, FALSE)) + pSymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_PUBLICS_ONLY); + /* FIXME: the TRUE option is due to the face that dbghelp requires it + * when loading an ELF module + */ + if (pSymInitialize(hProcess, NULL, TRUE)) { si->SizeOfStruct = sizeof(*si); si->MaxNameLen = sizeof(buffer) - sizeof(IMAGEHLP_SYMBOL); -- GitLab