6#if defined(DART_HOST_OS_WINDOWS)
17static bool running_ =
false;
18static Mutex* lock_ =
nullptr;
22 if (lock_ ==
nullptr) {
29#ifndef DART_TARGET_OS_WINDOWS_UWP
30 SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);
31 HANDLE hProcess = GetCurrentProcess();
32 if (!SymInitialize(hProcess,
nullptr,
TRUE)) {
43 MutexLocker lock(lock_);
48#ifndef DART_TARGET_OS_WINDOWS_UWP
49 HANDLE hProcess = GetCurrentProcess();
50 if (!SymCleanup(hProcess)) {
60#ifdef DART_TARGET_OS_WINDOWS_UWP
63 const intptr_t kMaxNameLength = 2048;
64 const intptr_t kSymbolInfoSize =
sizeof(SYMBOL_INFO);
65 static char buffer[kSymbolInfoSize + kMaxNameLength];
66 static char name_buffer[kMaxNameLength];
67 MutexLocker lock(lock_);
71 if (
start !=
nullptr) {
75 HANDLE hProcess = GetCurrentProcess();
76 DWORD64 address =
static_cast<DWORD64
>(pc);
77 PSYMBOL_INFO pSymbol =
reinterpret_cast<PSYMBOL_INFO
>(&
buffer[0]);
78 pSymbol->SizeOfStruct = kSymbolInfoSize;
79 pSymbol->MaxNameLen = kMaxNameLength;
81 BOOL r = SymFromAddr(hProcess, address, &displacement, pSymbol);
85 if (
start !=
nullptr) {
86 *
start = pc - displacement;
105 OS::PrintErr(
"warning: Dart_AddSymbols has no effect on Windows\n");
static void AddSymbols(const char *dso_name, void *buffer, size_t size)
static void FreeSymbolName(char *name)
static bool LookupSharedObject(uword pc, uword *dso_base=nullptr, char **dso_name=nullptr)
static char * LookupSymbolName(uword pc, uword *start)
static void static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
static char * StrDup(const char *s)
static const uint8_t buffer[]
const uint8_t uint32_t uint32_t GError ** error
WINBASEAPI _Check_return_ _Post_equals_last_error_ DWORD WINAPI GetLastError(VOID)