ChangeSet ID: 21546 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/29 05:09:03
Modified files: dlls/dbghelp : dbghelp.spec symbol.c include : dbghelp.h
Log message: Eric Pouech eric.pouech@wanadoo.fr Implemented SymGet{Next|Prev}Line64.
Patch: http://cvs.winehq.org/patch.py?id=21546
Old revision New revision Changes Path 1.16 1.17 +3 -3 wine/dlls/dbghelp/dbghelp.spec 1.20 1.21 +74 -0 wine/dlls/dbghelp/symbol.c 1.21 1.22 +13 -0 wine/include/dbghelp.h
Index: wine/dlls/dbghelp/dbghelp.spec diff -u -p wine/dlls/dbghelp/dbghelp.spec:1.16 wine/dlls/dbghelp/dbghelp.spec:1.17 --- wine/dlls/dbghelp/dbghelp.spec:1.16 29 Nov 2005 11: 9: 3 -0000 +++ wine/dlls/dbghelp/dbghelp.spec 29 Nov 2005 11: 9: 3 -0000 @@ -43,13 +43,13 @@ @ stub SymFunctionTableAccess64 @ stdcall SymFunctionTableAccess(long long) @ stub SymGetFileLineOffsets64 -@ stub SymGetLineFromAddr64 +@ stdcall SymGetLineFromAddr64(long double ptr ptr) @ stdcall SymGetLineFromAddr(long long ptr ptr) @ stub SymGetLineFromName64 @ stub SymGetLineFromName -@ stub SymGetLineNext64 +@ stdcall SymGetLineNext64(long ptr) @ stdcall SymGetLineNext(long ptr) -@ stub SymGetLinePrev64 +@ stdcall SymGetLinePrev64(long ptr) @ stdcall SymGetLinePrev(long ptr) @ stub SymGetModuleBase64 @ stdcall SymGetModuleBase(long long) Index: wine/dlls/dbghelp/symbol.c diff -u -p wine/dlls/dbghelp/symbol.c:1.20 wine/dlls/dbghelp/symbol.c:1.21 --- wine/dlls/dbghelp/symbol.c:1.20 29 Nov 2005 11: 9: 3 -0000 +++ wine/dlls/dbghelp/symbol.c 29 Nov 2005 11: 9: 3 -0000 @@ -1073,6 +1073,50 @@ BOOL WINAPI SymGetLineFromAddr(HANDLE hP }
/****************************************************************** + * copy_line_64_from_32 (internal) + * + */ +static void copy_line_64_from_32(IMAGEHLP_LINE64* l64, const IMAGEHLP_LINE* l32) + +{ + l64->Key = l32->Key; + l64->LineNumber = l32->LineNumber; + l64->FileName = l32->FileName; + l64->Address = l32->Address; +} + +/****************************************************************** + * copy_line_32_from_64 (internal) + * + */ +static void copy_line_32_from_64(IMAGEHLP_LINE* l32, const IMAGEHLP_LINE64* l64) + +{ + l32->Key = l64->Key; + l32->LineNumber = l64->LineNumber; + l32->FileName = l64->FileName; + l32->Address = l64->Address; +} + +/****************************************************************** + * SymGetLineFromAddr64 (DBGHELP.@) + * + */ +BOOL WINAPI SymGetLineFromAddr64(HANDLE hProcess, DWORD64 dwAddr, + PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line) +{ + IMAGEHLP_LINE line32; + + if (Line->SizeOfStruct < sizeof(*Line)) return FALSE; + if (!validate_addr64(dwAddr)) return FALSE; + line32.SizeOfStruct = sizeof(line32); + if (!SymGetLineFromAddr(hProcess, (DWORD)dwAddr, pdwDisplacement, &line32)) + return FALSE; + copy_line_64_from_32(Line, &line32); + return TRUE; +} + +/****************************************************************** * SymGetLinePrev (DBGHELP.@) * */ @@ -1122,6 +1166,21 @@ BOOL WINAPI SymGetLinePrev(HANDLE hProce return FALSE; }
+/****************************************************************** + * SymGetLinePrev64 (DBGHELP.@) + * + */ +BOOL WINAPI SymGetLinePrev64(HANDLE hProcess, PIMAGEHLP_LINE64 Line) +{ + IMAGEHLP_LINE line32; + + line32.SizeOfStruct = sizeof(line32); + copy_line_32_from_64(&line32, Line); + if (!SymGetLinePrev(hProcess, &line32)) return FALSE; + copy_line_64_from_32(Line, &line32); + return TRUE; +} + BOOL symt_get_func_line_next(struct module* module, PIMAGEHLP_LINE line) { struct line_info* li; @@ -1164,6 +1223,21 @@ BOOL WINAPI SymGetLineNext(HANDLE hProce return FALSE; }
+/****************************************************************** + * SymGetLineNext64 (DBGHELP.@) + * + */ +BOOL WINAPI SymGetLineNext64(HANDLE hProcess, PIMAGEHLP_LINE64 Line) +{ + IMAGEHLP_LINE line32; + + line32.SizeOfStruct = sizeof(line32); + copy_line_32_from_64(&line32, Line); + if (!SymGetLineNext(hProcess, &line32)) return FALSE; + copy_line_64_from_32(Line, &line32); + return TRUE; +} + /*********************************************************************** * SymFunctionTableAccess (DBGHELP.@) */ Index: wine/include/dbghelp.h diff -u -p wine/include/dbghelp.h:1.21 wine/include/dbghelp.h:1.22 --- wine/include/dbghelp.h:1.21 29 Nov 2005 11: 9: 3 -0000 +++ wine/include/dbghelp.h 29 Nov 2005 11: 9: 3 -0000 @@ -163,6 +163,15 @@ typedef struct _IMAGEHLP_LINE DWORD Address; } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
+typedef struct _IMAGEHLP_LINE64 +{ + DWORD SizeOfStruct; + PVOID Key; + DWORD LineNumber; + PCHAR FileName; + DWORD64 Address; +} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; + typedef struct _SOURCEFILE { DWORD64 ModBase; @@ -779,8 +788,12 @@ typedef BOOL (CALLBACK *PSYM_ENUMSOURCEF BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, LPSTR, PSYM_ENUMSOURCEFILES_CALLBACK, PVOID); BOOL WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE); +BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE); +BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE); +BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64); + typedef struct _SRCCODEINFO { DWORD SizeOfStruct;