From 6c50556e8bdbfe0dd2b5892504d47aa4208e01d8 Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Mon, 11 Oct 2004 21:00:17 +0000 Subject: [PATCH] Fix function and structure field types so we are compatible with the native dbghelp. --- dlls/dbghelp/dbghelp.spec | 10 +++--- dlls/dbghelp/source.c | 2 +- dlls/dbghelp/symbol.c | 21 ++++++----- dlls/dbghelp/type.c | 13 +++---- include/dbghelp.h | 72 +++++++++++++++++++------------------- programs/taskmgr/dbgchnl.c | 2 +- programs/winedbg/memory.c | 18 +++++----- programs/winedbg/symbol.c | 2 +- 8 files changed, 73 insertions(+), 67 deletions(-) diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec index e0622571423..f8f02bbf6fc 100644 --- a/dlls/dbghelp/dbghelp.spec +++ b/dlls/dbghelp/dbghelp.spec @@ -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 diff --git a/dlls/dbghelp/source.c b/dlls/dbghelp/source.c index e6b8e8b461d..87a6f672282 100644 --- a/dlls/dbghelp/source.c +++ b/dlls/dbghelp/source.c @@ -94,7 +94,7 @@ const char* source_get(const struct module* module, unsigned idx) * 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) { diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index 35b5cc67a66..8b22ef878a8 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -535,8 +535,9 @@ static void symt_fill_sym_info(const struct module* module, 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 process* pcs, const char* mask, * !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 hProcess, ULONG BaseOfDll, PCSTR Mask, 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 hProcess, DWORD BaseOfDll, * 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 hProcess, DWORD Address, 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; diff --git a/dlls/dbghelp/type.c b/dlls/dbghelp/type.c index 8dd2cf47b7e..9746b3c0c3a 100644 --- a/dlls/dbghelp/type.c +++ b/dlls/dbghelp/type.c @@ -359,7 +359,7 @@ struct symt_typedef* symt_new_typedef(struct module* module, struct symt* ref, * 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, unsigned long BaseOfDll, 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* type, IMAGEHLP_SYMBOL_TYPE_INFO req, * 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 hProcess, unsigned long ModBase, 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 hProcess, unsigned long ModBase, * 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); diff --git a/include/dbghelp.h b/include/dbghelp.h index 110dad34068..d883a87971d 100644 --- a/include/dbghelp.h +++ b/include/dbghelp.h @@ -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_SYMBOL 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,ULONG,PMINIDUMP_DIRECTORY*,PVOID*,ULONG *************************/ 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 DecoratedName, LPSTR UnDecoratedName, 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, diff --git a/programs/taskmgr/dbgchnl.c b/programs/taskmgr/dbgchnl.c index 71544a88598..fa168087b3f 100644 --- a/programs/taskmgr/dbgchnl.c +++ b/programs/taskmgr/dbgchnl.c @@ -173,7 +173,7 @@ void* get_symbol(HANDLE hProcess, char* name, char* lib) si->MaxNameLen = sizeof(buffer) - sizeof(IMAGEHLP_SYMBOL); if (pSymLoadModule(hProcess, NULL, lib, NULL, 0, 0) && pSymFromName(hProcess, name, si)) - ret = (void*)si->Address; + ret = (void*)(ULONG_PTR)si->Address; pSymCleanup(hProcess); } return ret; diff --git a/programs/winedbg/memory.c b/programs/winedbg/memory.c index 8199b541633..699e2ef728e 100644 --- a/programs/winedbg/memory.c +++ b/programs/winedbg/memory.c @@ -483,25 +483,25 @@ void print_address(const ADDRESS* addr, BOOLEAN with_line) 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* pc, const ADDRESS* frame) 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* pc, const ADDRESS* frame) 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; diff --git a/programs/winedbg/symbol.c b/programs/winedbg/symbol.c index 010e279d61b..3cd7c342b09 100644 --- a/programs/winedbg/symbol.c +++ b/programs/winedbg/symbol.c @@ -614,7 +614,7 @@ static BOOL CALLBACK symbols_info_cb(SYMBOL_INFO* sym, ULONG size, void* ctx) 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;