aboutsummaryrefslogtreecommitdiffstats
path: root/util/system/backtrace.cpp
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.ru>2022-02-10 16:46:37 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:46:37 +0300
commita693106aae8a3a3c7236a4ae953058a9611d7a92 (patch)
tree49e222ea1c5804306084bb3ae065bb702625360f /util/system/backtrace.cpp
parentad94e93a059747f4fc3d7add88d1a83daf40b733 (diff)
downloadydb-a693106aae8a3a3c7236a4ae953058a9611d7a92.tar.gz
Restoring authorship annotation for <vvvv@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'util/system/backtrace.cpp')
-rw-r--r--util/system/backtrace.cpp74
1 files changed, 37 insertions, 37 deletions
diff --git a/util/system/backtrace.cpp b/util/system/backtrace.cpp
index 220a89e8b4..b77fe58fb1 100644
--- a/util/system/backtrace.cpp
+++ b/util/system/backtrace.cpp
@@ -8,15 +8,15 @@
#include <util/generic/array_ref.h>
#include <util/generic/string.h>
-#ifdef _win_
+#ifdef _win_
#include "mutex.h"
-
+
#ifndef OPTIONAL
#define OPTIONAL
#endif
#include <dbghelp.h>
-#endif
-
+#endif
+
#if defined(_bionic_)
//TODO
#else
@@ -48,7 +48,7 @@ extern "C" __stdcall unsigned short CaptureStackBackTrace(unsigned long FramesTo
#define HAVE_BACKTRACE
#endif
#endif
-
+
#if defined(USE_GLIBC_BACKTRACE)
#include <execinfo.h>
@@ -104,12 +104,12 @@ size_t BackTrace(void** p, size_t len) {
}
#endif
-#if defined(USE_WIN_BACKTRACE)
-size_t BackTrace(void** p, size_t len) {
- return CaptureStackBackTrace(0, len, p, nullptr);
-}
-#endif
-
+#if defined(USE_WIN_BACKTRACE)
+size_t BackTrace(void** p, size_t len) {
+ return CaptureStackBackTrace(0, len, p, nullptr);
+}
+#endif
+
#if !defined(HAVE_BACKTRACE)
size_t BackTrace(void**, size_t) {
return 0;
@@ -148,15 +148,15 @@ TResolvedSymbol ResolveSymbol(void* sym, char* buf, size_t len) {
return ret;
}
-#elif defined(_win_)
+#elif defined(_win_)
#include <util/generic/singleton.h>
-namespace {
+namespace {
struct TWinSymbolResolverImpl {
typedef BOOL(WINAPI* TSymInitializeFunc)(HANDLE, PCSTR, BOOL);
typedef BOOL(WINAPI* TSymCleanupFunc)(HANDLE);
typedef BOOL(WINAPI* TSymFromAddrFunc)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO);
-
+
TWinSymbolResolverImpl()
: InitOk(FALSE)
{
@@ -164,52 +164,52 @@ namespace {
if (!Library) {
return;
}
-
+
SymInitializeFunc = (TSymInitializeFunc)GetProcAddress(Library, "SymInitialize");
SymCleanupFunc = (TSymCleanupFunc)GetProcAddress(Library, "SymCleanup");
SymFromAddrFunc = (TSymFromAddrFunc)GetProcAddress(Library, "SymFromAddr");
if (SymInitializeFunc && SymCleanupFunc && SymFromAddrFunc) {
InitOk = SymInitializeFunc(GetCurrentProcess(), nullptr, TRUE);
}
- }
-
+ }
+
~TWinSymbolResolverImpl() {
if (InitOk) {
SymCleanupFunc(GetCurrentProcess());
}
-
+
if (Library) {
FreeLibrary(Library);
}
- }
-
+ }
+
TResolvedSymbol Resolve(void* sym, char* buf, size_t len) {
TGuard<TMutex> guard(Mutex);
-
+
TResolvedSymbol ret = {
"??",
sym};
-
+
if (!InitOk || (len <= 1 + sizeof(SYMBOL_INFO))) {
return ret;
}
-
+
SYMBOL_INFO* symbol = (SYMBOL_INFO*)buf;
Zero(*symbol);
-
+
symbol->MaxNameLen = len - sizeof(SYMBOL_INFO) - 1;
symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
-
+
DWORD64 displacement = 0;
BOOL res = SymFromAddrFunc(GetCurrentProcess(), (DWORD64)sym, &displacement, symbol);
if (res) {
ret.NearestSymbol = (void*)symbol->Address;
ret.Name = symbol->Name;
}
-
+
return ret;
- }
-
+ }
+
TMutex Mutex;
HMODULE Library;
TSymInitializeFunc SymInitializeFunc;
@@ -217,11 +217,11 @@ namespace {
TSymFromAddrFunc SymFromAddrFunc;
BOOL InitOk;
};
-}
-
-TResolvedSymbol ResolveSymbol(void* sym, char* buf, size_t len) {
- return Singleton<TWinSymbolResolverImpl>()->Resolve(sym, buf, len);
-}
+}
+
+TResolvedSymbol ResolveSymbol(void* sym, char* buf, size_t len) {
+ return Singleton<TWinSymbolResolverImpl>()->Resolve(sym, buf, len);
+}
#else
TResolvedSymbol ResolveSymbol(void* sym, char*, size_t) {
TResolvedSymbol ret = {
@@ -257,10 +257,10 @@ void FormatBackTrace(IOutputStream* out) {
FormatBackTraceFn(out, array, s);
}
-TFormatBackTraceFn GetFormatBackTraceFn() {
- return FormatBackTraceFn;
-}
-
+TFormatBackTraceFn GetFormatBackTraceFn() {
+ return FormatBackTraceFn;
+}
+
void PrintBackTrace() {
FormatBackTrace(&Cerr);
}