From 5dc415ee2e9935089b21186518436681c2d03b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sun, 23 Nov 2025 10:05:20 -0800 Subject: [PATCH] Cleanup. (#353) --- src/debug.cpp | 62 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 5f92672..a721364 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -735,21 +735,21 @@ namespace bx if (NULL != m_imageHlpDll) { - m_symInitialize = dlsym(m_imageHlpDll, "SymInitialize"); - m_symCleanup = dlsym(m_imageHlpDll, "SymCleanup"); - m_symFromAddr = dlsym(m_imageHlpDll, "SymFromAddr"); - m_symSetOptions = dlsym(m_imageHlpDll, "SymSetOptions"); - m_symGetLineFromAddr = dlsym(m_imageHlpDll, BX_ARCH_32BIT ? "SymGetLineFromAddr" : "SymGetLineFromAddr64"); + auto symInitialize = dlsym(m_imageHlpDll, "SymInitialize"); + auto symSetOptions = dlsym(m_imageHlpDll, "SymSetOptions"); + auto symCleanup = dlsym(m_imageHlpDll, "SymCleanup"); + auto symFromAddr = dlsym(m_imageHlpDll, "SymFromAddr"); + auto symGetLineFromAddr = dlsym(m_imageHlpDll, BX_ARCH_32BIT ? "SymGetLineFromAddr" : "SymGetLineFromAddr64"); if (true - && NULL != m_symInitialize - && NULL != m_symCleanup - && NULL != m_symFromAddr - && NULL != m_symSetOptions - && NULL != m_symGetLineFromAddr + && NULL != symInitialize + && NULL != symSetOptions + && NULL != symCleanup + && NULL != symFromAddr + && NULL != symGetLineFromAddr ) { - m_symSetOptions(kSymOptUndName | kSymOptDeferredLoads | kSymOptLoadLines); + symSetOptions(kSymOptUndName | kSymOptDeferredLoads | kSymOptLoadLines); char symCache[1024] = "SRV*"; uint32_t len = BX_COUNTOF(symCache) - 4; @@ -763,11 +763,23 @@ namespace bx 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(); } } + else + { + BX_TRACE("Failed to obtain debug symbols functions!"); + cleanup(); + } } } @@ -812,28 +824,26 @@ namespace bx void cleanup() { - if(NULL != m_symCleanup) + if (NULL != m_imageHlpDll) { - m_symCleanup(kCurrentProcess); + if (NULL != m_symCleanup) + { + m_symCleanup(kCurrentProcess); + } + + m_symCleanup = NULL; + m_symFromAddr = NULL; + m_symGetLineFromAddr = NULL; + + dlclose(m_imageHlpDll); + m_imageHlpDll = NULL; } - - m_symInitialize = NULL; - m_symCleanup = NULL; - m_symFromAddr = NULL; - m_symSetOptions = NULL; - m_symGetLineFromAddr = NULL; - - dlclose(m_imageHlpDll); - - m_imageHlpDll = NULL; } void* m_imageHlpDll = NULL; - SymInitializeFn m_symInitialize = NULL; SymCleanupFn m_symCleanup = NULL; SymFromAddrFn m_symFromAddr = NULL; - SymSetOptionsFn m_symSetOptions = NULL; SymGetLineFromAddrFn m_symGetLineFromAddr = NULL; };