Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Commit

Permalink
core.sys.windows: Fix Unicode-correctness of dbghelp declarations
Browse files Browse the repository at this point in the history
  • Loading branch information
CyberShadow committed Jan 18, 2016
1 parent 020f172 commit 48ea15f
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 18 deletions.
6 changes: 3 additions & 3 deletions src/core/sys/windows/dbghelp.d
Expand Up @@ -31,10 +31,10 @@ extern(System)
alias BOOL function(DWORD MachineType, HANDLE hProcess, HANDLE hThread, STACKFRAME64 *StackFrame, PVOID ContextRecord,
ReadProcessMemoryProc64 ReadMemoryRoutine, FunctionTableAccessProc64 FunctoinTableAccess,
GetModuleBaseProc64 GetModuleBaseRoutine, TranslateAddressProc64 TranslateAddress) StackWalk64Func;
alias BOOL function(HANDLE hProcess, DWORD64 dwAddr, PDWORD pdwDisplacement, IMAGEHLP_LINE64 *line) SymGetLineFromAddr64Func;
alias BOOL function(HANDLE hProcess, DWORD64 dwAddr, PDWORD pdwDisplacement, IMAGEHLP_LINEA64 *line) SymGetLineFromAddr64Func;
alias DWORD64 function(HANDLE hProcess, DWORD64 dwAddr) SymGetModuleBase64Func;
alias BOOL function(HANDLE hProcess, DWORD64 dwAddr, IMAGEHLP_MODULE64 *ModuleInfo) SymGetModuleInfo64Func;
alias BOOL function(HANDLE hProcess, DWORD64 Address, DWORD64 *Displacement, IMAGEHLP_SYMBOL64 *Symbol) SymGetSymFromAddr64Func;
alias BOOL function(HANDLE hProcess, DWORD64 dwAddr, IMAGEHLP_MODULEA64 *ModuleInfo) SymGetModuleInfo64Func;
alias BOOL function(HANDLE hProcess, DWORD64 Address, DWORD64 *Displacement, IMAGEHLP_SYMBOLA64 *Symbol) SymGetSymFromAddr64Func;
alias DWORD function(PCTSTR DecoratedName, PTSTR UnDecoratedName, DWORD UndecoratedLength, DWORD Flags) UnDecorateSymbolNameFunc;
alias DWORD64 function(HANDLE hProcess, HANDLE hFile, PCSTR ImageName, PCSTR ModuleName, DWORD64 BaseOfDll, DWORD SizeOfDll) SymLoadModule64Func;
alias BOOL function(HANDLE HProcess, PTSTR SearchPath, DWORD SearchPathLength) SymGetSearchPathFunc;
Expand Down
84 changes: 74 additions & 10 deletions src/core/sys/windows/dbghelp_types.d
Expand Up @@ -81,12 +81,20 @@ struct STACKFRAME64

public import core.sys.windows.winnt : IMAGE_FILE_MACHINE_I386, IMAGE_FILE_MACHINE_IA64, IMAGE_FILE_MACHINE_AMD64;

struct IMAGEHLP_LINE64
struct IMAGEHLP_LINEA64
{
DWORD SizeOfStruct;
PVOID Key;
DWORD LineNumber;
PTSTR FileName;
PCSTR FileName;
DWORD64 Address;
}
struct IMAGEHLP_LINEW64
{
DWORD SizeOfStruct;
PVOID Key;
DWORD LineNumber;
PWSTR FileName;
DWORD64 Address;
}

Expand All @@ -104,7 +112,41 @@ enum SYM_TYPE : int
NumSymTypes,
}

struct IMAGEHLP_MODULE64
struct IMAGEHLP_MODULEA64
{
DWORD SizeOfStruct;
DWORD64 BaseOfImage;
DWORD ImageSize;
DWORD TimeDateStamp;
DWORD CheckSum;
DWORD NumSyms;
SYM_TYPE SymType;
CHAR[32] ModuleName;
CHAR[256] ImageName;
CHAR[256] LoadedImageName;
// new elements: 07-Jun-2002
version (none)
{
CHAR[256] LoadedPdbName;
DWORD CVSig;
CHAR[MAX_PATH*3] CVData;
DWORD PdbSig;
GUID PdbSig70;
DWORD PdbAge;
BOOL PdbUnmatched;
BOOL DbgUnmachted;
BOOL LineNumbers;
BOOL GlobalSymbols;
BOOL TypeInfo;
}
// new elements: 17-Dec-2003
version (none)
{
BOOL SourceIndexed;
BOOL Publics;
}
}
struct IMAGEHLP_MODULEW64
{
DWORD SizeOfStruct;
DWORD64 BaseOfImage;
Expand All @@ -113,15 +155,15 @@ struct IMAGEHLP_MODULE64
DWORD CheckSum;
DWORD NumSyms;
SYM_TYPE SymType;
TCHAR[32] ModuleName;
TCHAR[256] ImageName;
TCHAR[256] LoadedImageName;
WCHAR[32] ModuleName;
WCHAR[256] ImageName;
WCHAR[256] LoadedImageName;
// new elements: 07-Jun-2002
version (none)
{
TCHAR[256] LoadedPdbName;
WCHAR[256] LoadedPdbName;
DWORD CVSig;
TCHAR[MAX_PATH*3] CVData;
WCHAR[MAX_PATH*3] CVData;
DWORD PdbSig;
GUID PdbSig70;
DWORD PdbAge;
Expand All @@ -139,14 +181,23 @@ struct IMAGEHLP_MODULE64
}
}

struct IMAGEHLP_SYMBOL64
struct IMAGEHLP_SYMBOLA64
{
DWORD SizeOfStruct;
DWORD64 Address;
DWORD Size;
DWORD Flags;
DWORD MaxNameLength;
TCHAR[1] Name;
CHAR[1] Name;
}
struct IMAGEHLP_SYMBOLW64
{
DWORD SizeOfStruct;
DWORD64 Address;
DWORD Size;
DWORD Flags;
DWORD MaxNameLength;
WCHAR[1] Name;
}


Expand All @@ -165,3 +216,16 @@ struct API_VERSION
USHORT Revision;
USHORT Reserved;
}

version (Unicode)
{
alias IMAGEHLP_LINEW64 IMAGEHLP_LINE64;
alias IMAGEHLP_MODULEW64 IMAGEHLP_MODULE64;
alias IMAGEHLP_SYMBOLW64 IMAGEHLP_SYMBOL64;
}
else
{
alias IMAGEHLP_LINEA64 IMAGEHLP_LINE64;
alias IMAGEHLP_MODULEA64 IMAGEHLP_MODULE64;
alias IMAGEHLP_SYMBOLA64 IMAGEHLP_SYMBOL64;
}
10 changes: 5 additions & 5 deletions src/core/sys/windows/stacktrace.d
Expand Up @@ -242,12 +242,12 @@ private:
static struct BufSymbol
{
align(1):
IMAGEHLP_SYMBOL64 _base;
IMAGEHLP_SYMBOLA64 _base;
TCHAR[1024] _buf;
}
BufSymbol bufSymbol=void;
IMAGEHLP_SYMBOL64* symbol = &bufSymbol._base;
symbol.SizeOfStruct = IMAGEHLP_SYMBOL64.sizeof;
IMAGEHLP_SYMBOLA64* symbol = &bufSymbol._base;
symbol.SizeOfStruct = IMAGEHLP_SYMBOLA64.sizeof;
symbol.MaxNameLength = bufSymbol._buf.length;

char[][] trace;
Expand All @@ -260,8 +260,8 @@ private:
*symbol.Name.ptr)
{
DWORD disp;
IMAGEHLP_LINE64 line=void;
line.SizeOfStruct = IMAGEHLP_LINE64.sizeof;
IMAGEHLP_LINEA64 line=void;
line.SizeOfStruct = IMAGEHLP_LINEA64.sizeof;

if (dbghelp.SymGetLineFromAddr64(hProcess, pc, &disp, &line))
res = formatStackFrame(cast(void*)pc, symbol.Name.ptr,
Expand Down

0 comments on commit 48ea15f

Please sign in to comment.