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