DbgHelp: Fix Header Types
Robert Shearman
rob at codeweavers.com
Sun Oct 10 20:56:05 CDT 2004
Hi,
Without this patch we are not binary compatible with the native dbghelp.
I haven't checked imagehlp, but it probably has problems too.
Rob
Changelog:
Fix function and structure field types so we are compatible with the
native dbghelp.
-------------- next part --------------
Index: wine/include/dbghelp.h
===================================================================
RCS file: /home/wine/wine/include/dbghelp.h,v
retrieving revision 1.7
diff -u -p -r1.7 dbghelp.h
--- wine/include/dbghelp.h 14 Jun 2004 17:58:31 -0000 1.7
+++ wine/include/dbghelp.h 11 Oct 2004 01:29:11 -0000
@@ -154,7 +154,7 @@ typedef struct _SOURCEFILE
typedef struct _IMAGEHLP_CBA_READ_MEMORY
{
- DWORD addr;
+ DWORD64 addr;
PVOID buf;
DWORD bytes;
DWORD *bytesread;
@@ -219,14 +219,14 @@ typedef struct _IMAGEHLP_DUPLICATE_SYMBO
typedef struct _IMAGEHLP_STACK_FRAME
{
- ULONG InstructionOffset;
- ULONG ReturnOffset;
- ULONG FrameOffset;
- ULONG StackOffset;
- ULONG BackingStoreOffset;
- ULONG FuncTableEntry;
- ULONG Params[4];
- ULONG Reserved[5];
+ ULONG64 InstructionOffset;
+ ULONG64 ReturnOffset;
+ ULONG64 FrameOffset;
+ ULONG64 StackOffset;
+ ULONG64 BackingStoreOffset;
+ ULONG64 FuncTableEntry;
+ ULONG64 Params[4];
+ ULONG64 Reserved[5];
BOOL Virtual;
ULONG Reserved2;
} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
@@ -542,25 +542,25 @@ BOOL WINAPI MiniDumpReadDumpStream(PVOID
*************************/
typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR ModuleName, DWORD ModuleBase,
ULONG ModuleSize, PVOID UserContext);
-extern BOOL WINAPI EnumerateLoadedModules(HANDLE hProcess,
- PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
- PVOID UserContext);
+BOOL WINAPI EnumerateLoadedModules(HANDLE hProcess,
+ PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
+ PVOID UserContext);
typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR ModuleName, DWORD BaseOfDll,
PVOID UserContext);
-extern BOOL WINAPI SymEnumerateModules(HANDLE hProcess,
- PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
- PVOID UserContext);
-extern BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr,
- PIMAGEHLP_MODULE ModuleInfo);
-extern BOOL WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr,
- PIMAGEHLP_MODULEW ModuleInfo);
-extern DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr);
-extern DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
- PSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll);
-extern DWORD WINAPI SymLoadModuleEx(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
- PSTR ModuleName, DWORD BaseOfDll, DWORD DllSize,
- PMODLOAD_DATA Data, DWORD Flags);
-extern BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll);
+BOOL WINAPI SymEnumerateModules(HANDLE hProcess,
+ PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
+ PVOID UserContext);
+BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr,
+ PIMAGEHLP_MODULE ModuleInfo);
+BOOL WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr,
+ PIMAGEHLP_MODULEW ModuleInfo);
+DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr);
+DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
+ PSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll);
+DWORD64 WINAPI SymLoadModuleEx(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
+ PSTR ModuleName, DWORD64 BaseOfDll, DWORD DllSize,
+ PMODLOAD_DATA Data, DWORD Flags);
+BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll);
/*************************
* Symbol Handling *
@@ -593,13 +593,13 @@ typedef struct _SYMBOL_INFO
{
ULONG SizeOfStruct;
ULONG TypeIndex;
- ULONG Reserved[2];
+ ULONG64 Reserved[2];
ULONG info; /* sdk states info, while MSDN says it's Index... */
ULONG Size;
- ULONG ModBase;
+ ULONG64 ModBase;
ULONG Flags;
- ULONG Value;
- ULONG Address;
+ ULONG64 Value;
+ ULONG64 Address;
ULONG Register;
ULONG Scope;
ULONG Tag;
@@ -664,23 +664,23 @@ typedef struct _TI_FINDCHILDREN_PARAMS
#define UNDNAME_NO_ARGUMENTS (0x2000)
#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
-BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD ModBase, ULONG TypeId,
+BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD64 ModBase, ULONG TypeId,
IMAGEHLP_SYMBOL_TYPE_INFO GetType, PVOID);
typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,
ULONG SymbolSize, PVOID UserContext);
-BOOL WINAPI SymEnumTypes(HANDLE hProcess, DWORD BaseOfDll,
+BOOL WINAPI SymEnumTypes(HANDLE hProcess, ULONG64 BaseOfDll,
PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
PVOID UserContext);
-BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD addr, DWORD* displacement,
+BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD64 addr, DWORD64* displacement,
SYMBOL_INFO* sym_info);
BOOL WINAPI SymFromName(HANDLE hProcess, LPSTR Name, PSYMBOL_INFO Symbol);
BOOL WINAPI SymGetSymFromAddr(HANDLE,DWORD,PDWORD,PIMAGEHLP_SYMBOL);
BOOL WINAPI SymGetSymFromName(HANDLE,PSTR,PIMAGEHLP_SYMBOL);
-BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, DWORD BaseOfDll, LPSTR Name,
+BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, ULONG64 BaseOfDll, LPSTR Name,
PSYMBOL_INFO Symbol);
BOOL WINAPI SymGetSymNext(HANDLE,PIMAGEHLP_SYMBOL);
BOOL WINAPI SymGetSymPrev(HANDLE,PIMAGEHLP_SYMBOL);
-BOOL WINAPI SymEnumSymbols(HANDLE hProcess, ULONG BaseOfDll, PCSTR Mask,
+BOOL WINAPI SymEnumSymbols(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR Mask,
PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
PVOID UserContext);
typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PSTR SymbolName, DWORD SymbolAddress,
@@ -703,7 +703,7 @@ DWORD WINAPI UnDecorateSymbolName(LPCSTR
typedef BOOL (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(PSOURCEFILE pSourceFile,
PVOID UserContext);
-BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG ModBase, LPSTR Mask,
+BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG64 ModBase, LPSTR Mask,
PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,
PVOID UserContext);
BOOL WINAPI SymGetLineFromAddr(HANDLE hProcess, DWORD dwAddr,
Index: wine/dlls/dbghelp/source.c
===================================================================
RCS file: /home/wine/wine/dlls/dbghelp/source.c,v
retrieving revision 1.1
diff -u -p -r1.1 source.c
--- wine/dlls/dbghelp/source.c 5 Apr 2004 22:21:27 -0000 1.1
+++ wine/dlls/dbghelp/source.c 11 Oct 2004 01:29:13 -0000
@@ -94,7 +94,7 @@ const char* source_get(const struct modu
* SymEnumSourceFiles (DBGHELP.@)
*
*/
-BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG ModBase, LPSTR Mask,
+BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG64 ModBase, LPSTR Mask,
PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,
void* UserContext)
{
Index: wine/dlls/dbghelp/symbol.c
===================================================================
RCS file: /home/wine/wine/dlls/dbghelp/symbol.c,v
retrieving revision 1.10
diff -u -p -r1.10 symbol.c
--- wine/dlls/dbghelp/symbol.c 27 Sep 2004 20:31:42 -0000 1.10
+++ wine/dlls/dbghelp/symbol.c 11 Oct 2004 01:29:14 -0000
@@ -535,8 +535,9 @@ static void symt_fill_sym_info(const str
strncpy(sym_info->Name, name, min(sym_info->NameLen, sym_info->MaxNameLen));
sym_info->Name[sym_info->MaxNameLen - 1] = '\0';
}
- TRACE_(dbghelp_symt)("%p => %s %lu %lx\n",
- sym, sym_info->Name, sym_info->Size, sym_info->Address);
+ TRACE_(dbghelp_symt)("%p => %s %lu %s\n",
+ sym, sym_info->Name, sym_info->Size,
+ wine_dbgstr_longlong(sym_info->Address));
}
static BOOL symt_enum_module(struct module* module, regex_t* regex,
@@ -759,7 +760,7 @@ static BOOL symt_enum_locals(struct proc
* !foo fails always (despite what MSDN states)
* RE1!RE2 gets RE2 from BaseOfDll (whatever RE1 is)
*/
-BOOL WINAPI SymEnumSymbols(HANDLE hProcess, ULONG BaseOfDll, PCSTR Mask,
+BOOL WINAPI SymEnumSymbols(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR Mask,
PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
PVOID UserContext)
{
@@ -769,8 +770,9 @@ BOOL WINAPI SymEnumSymbols(HANDLE hProce
const char* bang;
regex_t mod_regex, sym_regex;
- TRACE("(%p %08lx %s %p %p)\n",
- hProcess, BaseOfDll, debugstr_a(Mask), EnumSymbolsCallback, UserContext);
+ TRACE("(%p %s %s %p %p)\n",
+ hProcess, wine_dbgstr_longlong(BaseOfDll), debugstr_a(Mask),
+ EnumSymbolsCallback, UserContext);
if (!pcs) return FALSE;
@@ -864,8 +866,8 @@ BOOL WINAPI SymEnumerateSymbols(HANDLE h
* SymFromAddr (DBGHELP.@)
*
*/
-BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD Address,
- DWORD* Displacement, PSYMBOL_INFO Symbol)
+BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD64 Address,
+ DWORD64* Displacement, PSYMBOL_INFO Symbol)
{
struct process* pcs = process_find_by_handle(hProcess);
struct module* module;
@@ -894,13 +896,16 @@ BOOL WINAPI SymGetSymFromAddr(HANDLE hPr
char buffer[sizeof(SYMBOL_INFO) + 256];
SYMBOL_INFO*si = (SYMBOL_INFO*)buffer;
size_t len;
+ DWORD64 Displacement64;
if (Symbol->SizeOfStruct < sizeof(*Symbol)) return FALSE;
si->SizeOfStruct = sizeof(*si);
si->MaxNameLen = 256;
- if (!SymFromAddr(hProcess, Address, Displacement, si))
+ if (!SymFromAddr(hProcess, Address, &Displacement64, si))
return FALSE;
+ if (Displacement)
+ *Displacement = Displacement64;
Symbol->Address = si->Address;
Symbol->Size = si->Size;
Symbol->Flags = si->Flags;
Index: wine/dlls/dbghelp/type.c
===================================================================
RCS file: /home/wine/wine/dlls/dbghelp/type.c,v
retrieving revision 1.7
diff -u -p -r1.7 type.c
--- wine/dlls/dbghelp/type.c 27 Sep 2004 20:31:42 -0000 1.7
+++ wine/dlls/dbghelp/type.c 11 Oct 2004 01:29:15 -0000
@@ -359,7 +359,7 @@ struct symt_typedef* symt_new_typedef(st
* SymEnumTypes (DBGHELP.@)
*
*/
-BOOL WINAPI SymEnumTypes(HANDLE hProcess, unsigned long BaseOfDll,
+BOOL WINAPI SymEnumTypes(HANDLE hProcess, ULONG64 BaseOfDll,
PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
void* UserContext)
{
@@ -371,8 +371,9 @@ BOOL WINAPI SymEnumTypes(HANDLE hProcess
struct symt* type;
void* pos = NULL;
- TRACE("(%p %08lx %p %p)\n",
- hProcess, BaseOfDll, EnumSymbolsCallback, UserContext);
+ TRACE("(%p %s %p %p)\n",
+ hProcess, wine_dbgstr_longlong(BaseOfDll), EnumSymbolsCallback,
+ UserContext);
if (!(pcs = process_find_by_handle(hProcess))) return FALSE;
module = module_find_by_addr(pcs, BaseOfDll, DMT_UNKNOWN);
@@ -742,7 +743,7 @@ BOOL symt_get_info(const struct symt* ty
* SymGetTypeInfo (DBGHELP.@)
*
*/
-BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, unsigned long ModBase,
+BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD64 ModBase,
ULONG TypeId, IMAGEHLP_SYMBOL_TYPE_INFO GetType,
PVOID pInfo)
{
@@ -754,7 +755,7 @@ BOOL WINAPI SymGetTypeInfo(HANDLE hProce
module = module_find_by_addr(pcs, ModBase, DMT_UNKNOWN);
if (!(module = module_get_debug(pcs, module)))
{
- FIXME("Someone didn't properly set ModBase (0x%08lx)\n", ModBase);
+ FIXME("Someone didn't properly set ModBase (%s)\n", wine_dbgstr_longlong(ModBase));
return FALSE;
}
@@ -765,7 +766,7 @@ BOOL WINAPI SymGetTypeInfo(HANDLE hProce
* SymGetTypeFromName (DBGHELP.@)
*
*/
-BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, unsigned long BaseOfDll,
+BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, ULONG64 BaseOfDll,
LPSTR Name, PSYMBOL_INFO Symbol)
{
struct process* pcs = process_find_by_handle(hProcess);
Index: wine/programs/winedbg/memory.c
===================================================================
RCS file: /home/wine/wine/programs/winedbg/memory.c,v
retrieving revision 1.11
diff -u -p -r1.11 memory.c
--- wine/programs/winedbg/memory.c 28 Sep 2004 02:13:27 -0000 1.11
+++ wine/programs/winedbg/memory.c 11 Oct 2004 01:29:16 -0000
@@ -483,25 +483,25 @@ void print_address(const ADDRESS* addr,
char buffer[sizeof(SYMBOL_INFO) + 256];
SYMBOL_INFO* si = (SYMBOL_INFO*)buffer;
void* lin = memory_to_linear_addr(addr);
- DWORD disp;
+ DWORD64 disp;
print_bare_address(addr);
si->SizeOfStruct = sizeof(*si);
si->MaxNameLen = 256;
- if (!SymFromAddr(dbg_curr_process->handle, (unsigned long)lin, &disp, si)) return;
+ if (!SymFromAddr(dbg_curr_process->handle, (DWORD_PTR)lin, &disp, si)) return;
dbg_printf(" %s", si->Name);
- if (disp) dbg_printf("+0x%lx", disp);
+ if (disp) dbg_printf("+0x%lx", (DWORD_PTR)disp);
if (with_line)
{
IMAGEHLP_LINE il;
IMAGEHLP_MODULE im;
il.SizeOfStruct = sizeof(il);
- if (SymGetLineFromAddr(dbg_curr_process->handle, (unsigned long)lin, NULL, &il))
+ if (SymGetLineFromAddr(dbg_curr_process->handle, (DWORD_PTR)lin, NULL, &il))
dbg_printf(" [%s:%lu]", il.FileName, il.LineNumber);
im.SizeOfStruct = sizeof(im);
- if (SymGetModuleInfo(dbg_curr_process->handle, (unsigned long)lin, &im))
+ if (SymGetModuleInfo(dbg_curr_process->handle, (DWORD_PTR)lin, &im))
dbg_printf(" in %s", im.ModuleName);
}
}
@@ -544,15 +544,15 @@ void print_addr_and_args(const ADDRESS*
IMAGEHLP_MODULE im;
struct sym_enum se;
char tmp[1024];
- DWORD disp;
+ DWORD64 disp;
if (pc->Mode != AddrModeFlat)
dbg_printf("0x%04x:0x%04lx", pc->Segment, pc->Offset);
else
dbg_printf("0x%08lx", pc->Offset);
- isf.InstructionOffset = (unsigned long)memory_to_linear_addr(pc);
- isf.FrameOffset = (unsigned long)memory_to_linear_addr(frame);
+ isf.InstructionOffset = (DWORD_PTR)memory_to_linear_addr(pc);
+ isf.FrameOffset = (DWORD_PTR)memory_to_linear_addr(frame);
si->SizeOfStruct = sizeof(*si);
si->MaxNameLen = 256;
@@ -560,7 +560,7 @@ void print_addr_and_args(const ADDRESS*
return;
dbg_printf(" %s", si->Name);
- if (disp) dbg_printf("+0x%lx", disp);
+ if (disp) dbg_printf("+0x%lx", (DWORD_PTR)disp);
SymSetContext(dbg_curr_process->handle, &isf, NULL);
se.tmp = tmp;
Index: wine/programs/winedbg/symbol.c
===================================================================
RCS file: /home/wine/wine/programs/winedbg/symbol.c,v
retrieving revision 1.4
diff -u -p -r1.4 symbol.c
--- wine/programs/winedbg/symbol.c 28 Sep 2004 02:13:27 -0000 1.4
+++ wine/programs/winedbg/symbol.c 11 Oct 2004 01:29:16 -0000
@@ -614,7 +614,7 @@ static BOOL CALLBACK symbols_info_cb(SYM
mi.ModuleName[len - 5] = '\0';
}
- dbg_printf("%08lx: %s!%s", sym->Address, mi.ModuleName, sym->Name);
+ dbg_printf("%08lx: %s!%s", (ULONG_PTR)sym->Address, mi.ModuleName, sym->Name);
type.id = sym->TypeIndex;
type.module = sym->ModBase;
Index: wine/dlls/dbghelp/dbghelp.spec
===================================================================
RCS file: /home/wine/wine/dlls/dbghelp/dbghelp.spec,v
retrieving revision 1.3
diff -u -p -r1.3 dbghelp.spec
--- wine/dlls/dbghelp/dbghelp.spec 10 Sep 2004 19:34:29 -0000 1.3
+++ wine/dlls/dbghelp/dbghelp.spec 11 Oct 2004 01:35:43 -0000
@@ -26,10 +26,10 @@
@ stdcall StackWalk(long long long ptr ptr ptr ptr ptr ptr)
@ stub StackWalk64
@ stdcall SymCleanup(long)
-@ stdcall SymEnumSourceFiles(long long str ptr ptr)
+@ stdcall SymEnumSourceFiles(ptr long long str ptr ptr)
@ stub SymEnumSym
@ stdcall SymEnumSymbols(long long str ptr ptr)
-@ stdcall SymEnumTypes(long long ptr ptr)
+@ stdcall SymEnumTypes(ptr long long ptr ptr)
@ stdcall SymEnumerateModules(long ptr ptr)
@ stub SymEnumerateModules64
@ stdcall SymEnumerateSymbols(long long ptr ptr)
@@ -37,7 +37,7 @@
@ stub SymEnumerateSymbolsW
@ stub SymEnumerateSymbolsW64
@ stdcall SymFindFileInPath(long str str ptr long long long ptr ptr ptr)
-@ stdcall SymFromAddr(long long ptr ptr)
+@ stdcall SymFromAddr(ptr long long ptr ptr)
@ stdcall SymFromName(long str ptr)
@ stdcall SymFunctionTableAccess(long long)
@ stub SymFunctionTableAccess64
@@ -66,8 +66,8 @@
@ stub SymGetSymNext64
@ stdcall SymGetSymPrev(long ptr)
@ stub SymGetSymPrev64
-@ stdcall SymGetTypeFromName(long long str ptr)
-@ stdcall SymGetTypeInfo(long long long long ptr)
+@ stdcall SymGetTypeFromName(ptr long long str ptr)
+@ stdcall SymGetTypeInfo(ptr long long long long ptr)
@ stdcall SymInitialize(long str long)
@ stdcall SymLoadModule(long long str str long long)
@ stub SymLoadModule64
More information about the wine-patches
mailing list