This commit is contained in:
Branimir Karadžić
2025-11-23 10:05:20 -08:00
committed by GitHub
parent 69e6c9b597
commit 5dc415ee2e

View File

@@ -735,21 +735,21 @@ namespace bx
if (NULL != m_imageHlpDll) if (NULL != m_imageHlpDll)
{ {
m_symInitialize = dlsym<SymInitializeFn >(m_imageHlpDll, "SymInitialize"); auto symInitialize = dlsym<SymInitializeFn >(m_imageHlpDll, "SymInitialize");
m_symCleanup = dlsym<SymCleanupFn >(m_imageHlpDll, "SymCleanup"); auto symSetOptions = dlsym<SymSetOptionsFn >(m_imageHlpDll, "SymSetOptions");
m_symFromAddr = dlsym<SymFromAddrFn >(m_imageHlpDll, "SymFromAddr"); auto symCleanup = dlsym<SymCleanupFn >(m_imageHlpDll, "SymCleanup");
m_symSetOptions = dlsym<SymSetOptionsFn >(m_imageHlpDll, "SymSetOptions"); auto symFromAddr = dlsym<SymFromAddrFn >(m_imageHlpDll, "SymFromAddr");
m_symGetLineFromAddr = dlsym<SymGetLineFromAddrFn>(m_imageHlpDll, BX_ARCH_32BIT ? "SymGetLineFromAddr" : "SymGetLineFromAddr64"); auto symGetLineFromAddr = dlsym<SymGetLineFromAddrFn>(m_imageHlpDll, BX_ARCH_32BIT ? "SymGetLineFromAddr" : "SymGetLineFromAddr64");
if (true if (true
&& NULL != m_symInitialize && NULL != symInitialize
&& NULL != m_symCleanup && NULL != symSetOptions
&& NULL != m_symFromAddr && NULL != symCleanup
&& NULL != m_symSetOptions && NULL != symFromAddr
&& NULL != m_symGetLineFromAddr && NULL != symGetLineFromAddr
) )
{ {
m_symSetOptions(kSymOptUndName | kSymOptDeferredLoads | kSymOptLoadLines); symSetOptions(kSymOptUndName | kSymOptDeferredLoads | kSymOptLoadLines);
char symCache[1024] = "SRV*"; char symCache[1024] = "SRV*";
uint32_t len = BX_COUNTOF(symCache) - 4; uint32_t len = BX_COUNTOF(symCache) - 4;
@@ -763,11 +763,23 @@ namespace bx
symCache[0] = '\0'; symCache[0] = '\0';
} }
if (!m_symInitialize(kCurrentProcess, symCache, true) ) if (symInitialize(kCurrentProcess, symCache, true) )
{ {
m_symCleanup = symCleanup;
m_symFromAddr = symFromAddr;
m_symGetLineFromAddr = symGetLineFromAddr;
}
else
{
BX_TRACE("Failed to initialize debug symbols!");
cleanup(); cleanup();
} }
} }
else
{
BX_TRACE("Failed to obtain debug symbols functions!");
cleanup();
}
} }
} }
@@ -812,28 +824,26 @@ namespace bx
void cleanup() void cleanup()
{ {
if(NULL != m_symCleanup) if (NULL != m_imageHlpDll)
{
if (NULL != m_symCleanup)
{ {
m_symCleanup(kCurrentProcess); m_symCleanup(kCurrentProcess);
} }
m_symInitialize = NULL;
m_symCleanup = NULL; m_symCleanup = NULL;
m_symFromAddr = NULL; m_symFromAddr = NULL;
m_symSetOptions = NULL;
m_symGetLineFromAddr = NULL; m_symGetLineFromAddr = NULL;
dlclose(m_imageHlpDll); dlclose(m_imageHlpDll);
m_imageHlpDll = NULL; m_imageHlpDll = NULL;
} }
}
void* m_imageHlpDll = NULL; void* m_imageHlpDll = NULL;
SymInitializeFn m_symInitialize = NULL;
SymCleanupFn m_symCleanup = NULL; SymCleanupFn m_symCleanup = NULL;
SymFromAddrFn m_symFromAddr = NULL; SymFromAddrFn m_symFromAddr = NULL;
SymSetOptionsFn m_symSetOptions = NULL;
SymGetLineFromAddrFn m_symGetLineFromAddr = NULL; SymGetLineFromAddrFn m_symGetLineFromAddr = NULL;
}; };