translate: log unresolved calls, change error logging
[ia32rtools.git] / unresolved_call.h
CommitLineData
8eb12e72 1#define unresolved_call(n, p) \
2 printf("%s: unresolved_call %p %s\n", n, p, addr_to_sym(p))
3
4/* mingw is missing dbghelp stuff.. */
5static const char *addr_to_sym(void *addr)
6{
7 static HMODULE dbgh;
8 static BOOL WINAPI (*pSymFromAddr)(HANDLE hProcess, DWORD64 Address,
9 DWORD64* Displacement, void *Symbol);
10 static BOOL WINAPI (*pSymInitialize)(HANDLE hProcess,
11 PCSTR UserSearchPath, BOOL fInvadeProcess);
12 static char info[88 + 256];
13
14 if (dbgh == NULL)
15 dbgh = LoadLibraryA("dbghelp.dll");
16 if (dbgh == NULL)
17 return "(no dbghelp)";
18 if (pSymFromAddr == NULL)
19 pSymFromAddr = (void *)GetProcAddress(dbgh, "SymFromAddr");
20 if (pSymFromAddr == NULL)
21 return "(no SymFromAddr)";
22 if (pSymInitialize == NULL) {
23 pSymInitialize = (void *)GetProcAddress(dbgh, "SymInitialize");
24 if (pSymInitialize == NULL)
25 return "(no SymInitialize)";
26 pSymInitialize(GetCurrentProcess(), NULL, TRUE);
27 }
28
29 *(ULONG *)&info[0] = 88; // SizeOfStruct
30 *(ULONG *)&info[80] = 256; // MaxNameLen
31 if (!pSymFromAddr(GetCurrentProcess(), (DWORD64)(unsigned int)addr, NULL, info))
32 return "(no sym)";
33
34 return info + 84;
35}
36