diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2021-10-12 10:14:54 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2021-10-12 15:15:45 +0300 |
commit | ed7058837e4b92cd8078b3c9ad198e6546efe3fd (patch) | |
tree | 341267ccacdeab156f78e769ade8fe8003217426 /extra | |
parent | 4ecc67a999dec9f6c0a279c7f3241caa3b5aceaf (diff) | |
download | bdwgc-ed7058837e4b92cd8078b3c9ad198e6546efe3fd.tar.gz |
Make all functions static in msvc_dbg.c except for backtrace[_symbols]
(refactoring)
* extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER]
(MAX_SYM_NAME): Move from msvc_dbg.h.
* extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER]
(GetStackFramesFromContext): Declare before use.
* extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER]
(GetStackFrames, GetStackFramesFromContext, GetModuleNameFromAddress,
GetSymbolNameFromAddress, GetFileLineFromAddress,
GetDescriptionFromAddress, GetDescriptionFromStack): Define as static.
* extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER]
(GetModuleNameFromAddress, GetFileLineFromAddress): Declare local
variables at top level.
* extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER]
(GetModuleNameFromStack, GetSymbolNameFromStack, GetFileLineFromStack):
Remove.
* include/private/msvc_dbg.h (MSVC_DBG_EXPORT): Always define as empty.
* include/private/msvc_dbg.h (HANDLE, CONTEXT, GetStackFrames,
GetStackFramesFromContext, GetModuleNameFromAddress,
GetModuleNameFromStack, GetSymbolNameFromAddress,
GetSymbolNameFromStack, GetFileLineFromAddress, GetFileLineFromStack,
GetDescriptionFromAddress, GetDescriptionFromStack): Do not declare.
* tests/test.c [!PCR && !GC_WIN32_THREADS && !GC_PTHREADS && CPPCHECK
&& _MSC_VER && !_M_ARM && !_M_ARM64 && !_M_X64]: Remove include of
msvc_dbg.h.
* tests/test.c [!PCR && !GC_WIN32_THREADS && !GC_PTHREADS && CPPCHECK
&& !_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER] (WinMain): Do not pass
GetFileLineFromStack, GetModuleNameFromStack and GetSymbolNameFromStack
to UNTESTED().
Diffstat (limited to 'extra')
-rw-r--r-- | extra/msvc_dbg.c | 138 |
1 files changed, 56 insertions, 82 deletions
diff --git a/extra/msvc_dbg.c b/extra/msvc_dbg.c index 9679cca3..b181e713 100644 --- a/extra/msvc_dbg.c +++ b/extra/msvc_dbg.c @@ -52,6 +52,10 @@ typedef GC_word word; typedef ULONG ULONG_ADDR; #endif +#ifndef MAX_SYM_NAME +#define MAX_SYM_NAME 2000 +#endif + static HANDLE GetSymHandle(void) { static HANDLE symHandle = NULL; @@ -115,7 +119,11 @@ static ULONG_ADDR CheckAddress(void* address) return dwAddress; } -size_t GetStackFrames(size_t skip, void* frames[], size_t maxFrames) +static size_t GetStackFramesFromContext(HANDLE hProcess, HANDLE hThread, + CONTEXT* context, size_t skip, + void* frames[], size_t maxFrames); + +static size_t GetStackFrames(size_t skip, void* frames[], size_t maxFrames) { HANDLE hProcess = GetSymHandle(); HANDLE hThread = GetCurrentThread(); @@ -132,9 +140,9 @@ size_t GetStackFrames(size_t skip, void* frames[], size_t maxFrames) frames, maxFrames); } -size_t GetStackFramesFromContext(HANDLE hProcess, HANDLE hThread, - CONTEXT* context, size_t skip, - void* frames[], size_t maxFrames) +static size_t GetStackFramesFromContext(HANDLE hProcess, HANDLE hThread, + CONTEXT* context, size_t skip, + void* frames[], size_t maxFrames) { size_t frameIndex; DWORD machineType; @@ -180,37 +188,26 @@ size_t GetStackFramesFromContext(HANDLE hProcess, HANDLE hThread, return frameIndex; } -size_t GetModuleNameFromAddress(void* address, char* moduleName, size_t size) +static size_t GetModuleNameFromAddress(void* address, char* moduleName, + size_t size) { + const char* sourceName; + IMAGEHLP_MODULE moduleInfo = { sizeof(moduleInfo) }; + if (size) *moduleName = 0; - { - const char* sourceName; - IMAGEHLP_MODULE moduleInfo = { sizeof (moduleInfo) }; - if (!SymGetModuleInfo(GetSymHandle(), CheckAddress(address), - &moduleInfo)) { - return 0; - } - sourceName = strrchr(moduleInfo.ImageName, '\\'); - if (sourceName) { - sourceName++; - } else { - sourceName = moduleInfo.ImageName; - } - if (size) { - strncpy(moduleName, sourceName, size)[size - 1] = 0; - } - return strlen(sourceName); + if (!SymGetModuleInfo(GetSymHandle(), CheckAddress(address), &moduleInfo)) { + return 0; } -} - -size_t GetModuleNameFromStack(size_t skip, char* moduleName, size_t size) -{ - void* address = NULL; - GetStackFrames(skip + 1, &address, 1); - if (address) { - return GetModuleNameFromAddress(address, moduleName, size); + sourceName = strrchr(moduleInfo.ImageName, '\\'); + if (sourceName) { + sourceName++; + } else { + sourceName = moduleInfo.ImageName; } - return 0; + if (size) { + strncpy(moduleName, sourceName, size)[size - 1] = 0; + } + return strlen(sourceName); } union sym_namebuf_u { @@ -218,8 +215,8 @@ union sym_namebuf_u { char symNameBuffer[sizeof(IMAGEHLP_SYMBOL) + MAX_SYM_NAME]; }; -size_t GetSymbolNameFromAddress(void* address, char* symbolName, size_t size, - size_t* offsetBytes) +static size_t GetSymbolNameFromAddress(void* address, char* symbolName, + size_t size, size_t* offsetBytes) { if (size) *symbolName = 0; if (offsetBytes) *offsetBytes = 0; @@ -256,61 +253,38 @@ size_t GetSymbolNameFromAddress(void* address, char* symbolName, size_t size, return 0; } -size_t GetSymbolNameFromStack(size_t skip, char* symbolName, size_t size, - size_t* offsetBytes) +static size_t GetFileLineFromAddress(void* address, char* fileName, + size_t size, size_t* lineNumber, + size_t* offsetBytes) { - void* address = NULL; - GetStackFrames(skip + 1, &address, 1); - if (address) { - return GetSymbolNameFromAddress(address, symbolName, size, offsetBytes); - } - return 0; -} + char* sourceName; + IMAGEHLP_LINE line = { sizeof (line) }; + GC_ULONG_PTR dwOffset = 0; -size_t GetFileLineFromAddress(void* address, char* fileName, size_t size, - size_t* lineNumber, size_t* offsetBytes) -{ if (size) *fileName = 0; if (lineNumber) *lineNumber = 0; if (offsetBytes) *offsetBytes = 0; - { - char* sourceName; - IMAGEHLP_LINE line = { sizeof (line) }; - GC_ULONG_PTR dwOffset = 0; - if (!SymGetLineFromAddr(GetSymHandle(), CheckAddress(address), &dwOffset, - &line)) { - return 0; - } - if (lineNumber) { - *lineNumber = line.LineNumber; - } - if (offsetBytes) { - *offsetBytes = dwOffset; - } - sourceName = line.FileName; - /* TODO: resolve relative filenames, found in 'source directories' */ - /* registered with MSVC IDE. */ - if (size) { - strncpy(fileName, sourceName, size)[size - 1] = 0; - } - return strlen(sourceName); + if (!SymGetLineFromAddr(GetSymHandle(), CheckAddress(address), &dwOffset, + &line)) { + return 0; } -} - -size_t GetFileLineFromStack(size_t skip, char* fileName, size_t size, - size_t* lineNumber, size_t* offsetBytes) -{ - void* address = NULL; - GetStackFrames(skip + 1, &address, 1); - if (address) { - return GetFileLineFromAddress(address, fileName, size, lineNumber, - offsetBytes); + if (lineNumber) { + *lineNumber = line.LineNumber; } - return 0; + if (offsetBytes) { + *offsetBytes = dwOffset; + } + sourceName = line.FileName; + /* TODO: resolve relative filenames, found in "source directories" */ + /* registered with MSVC IDE. */ + if (size) { + strncpy(fileName, sourceName, size)[size - 1] = 0; + } + return strlen(sourceName); } -size_t GetDescriptionFromAddress(void* address, const char* format, - char* buffer, size_t size) +static size_t GetDescriptionFromAddress(void* address, const char* format, + char* buffer, size_t size) { char*const begin = buffer; char*const end = buffer + size; @@ -353,9 +327,9 @@ size_t GetDescriptionFromAddress(void* address, const char* format, return buffer - begin; } -size_t GetDescriptionFromStack(void* const frames[], size_t count, - const char* format, char* description[], - size_t size) +static size_t GetDescriptionFromStack(void* const frames[], size_t count, + const char* format, char* description[], + size_t size) { const GC_ULONG_PTR begin = (GC_ULONG_PTR)description; const GC_ULONG_PTR end = begin + size; |