https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f69be6c561fcf5e151e96a...
commit f69be6c561fcf5e151e96ad9729f3ec501b8393a Author: winesync ros-dev@reactos.org AuthorDate: Fri Sep 11 13:00:06 2020 +0200 Commit: Jérôme Gardou jerome.gardou@reactos.org CommitDate: Wed Sep 16 10:35:31 2020 +0200
[WINESYNC] dbghelp: Determine the wine loader name from the target process's architecture.
Signed-off-by: Zebediah Figura zfigura@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
wine commit id a981edf0bc7c828e6b55fdc73b51a2f457043c4a by Zebediah Figura zfigura@codeweavers.com --- dll/win32/dbghelp/compat.c | 22 +++++++++----- dll/win32/dbghelp/compat.h | 39 +++++++++++++----------- dll/win32/dbghelp/dbghelp.c | 7 +++++ dll/win32/dbghelp/dbghelp_private.h | 60 ++++++++++++++++++++----------------- dll/win32/dbghelp/elf_module.c | 7 ++++- dll/win32/dbghelp/macho_module.c | 4 ++- dll/win32/dbghelp/module.c | 57 +++++++++++++++++------------------ sdk/tools/winesync/dbghelp.cfg | 2 +- 8 files changed, 111 insertions(+), 87 deletions(-)
diff --git a/dll/win32/dbghelp/compat.c b/dll/win32/dbghelp/compat.c index 51a43453fa8..dfd9ec13d29 100644 --- a/dll/win32/dbghelp/compat.c +++ b/dll/win32/dbghelp/compat.c @@ -71,8 +71,8 @@ __RtlImageRvaToSection(
PVOID __RtlImageRvaToVa -(const IMAGE_NT_HEADERS* NtHeader, - PVOID BaseAddress, +(const IMAGE_NT_HEADERS* NtHeader, + PVOID BaseAddress, ULONG Rva, PIMAGE_SECTION_HEADER *SectionHeader) { @@ -160,7 +160,7 @@ HANDLE __CreateFileW( { char buf[MAX_PATH]; HANDLE res; - + WideCharToMultiByte(CP_ACP, 0, lpFileName, -1, buf, MAX_PATH, NULL, NULL); res = CreateFileA(buf, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); return res; @@ -187,7 +187,7 @@ void* __MapViewOfFile(HANDLE file,DWORD d1,DWORD d2,DWORD d3,SIZE_T s) free(result); return NULL; } - + return result; }
@@ -222,15 +222,15 @@ __WideCharToMultiByte(UINT page, DWORD flags, LPCWSTR src, INT srclen, }
if (srclen < 0) srclen = strlenW(src) + 1; - + if(!dstlen) return srclen; - + for(i=0; i<srclen && i<dstlen; i++) dst[i] = src[i] & 0xFF;
if (used) *used = FALSE; - + return i; }
@@ -247,7 +247,7 @@ __MultiByteToWideChar(UINT page, DWORD flags, LPCSTR src, INT srclen, }
if (srclen < 0) srclen = strlen(src) + 1; - + if(!dstlen) return srclen;
@@ -394,3 +394,9 @@ const char *wine_dbgstr_wn( const WCHAR *str, int n ) *dst++ = 0; return res; } + +BOOL __IsWow64Process(HANDLE Process, BOOL* is_wow64) +{ + *is_wow64 = FALSE; + return TRUE; +} diff --git a/dll/win32/dbghelp/compat.h b/dll/win32/dbghelp/compat.h index f6061c773c7..cbd90edbe81 100644 --- a/dll/win32/dbghelp/compat.h +++ b/dll/win32/dbghelp/compat.h @@ -400,7 +400,7 @@ typedef struct _EXCEPTION_REGISTRATION_RECORD #define INVALID_HANDLE_VALUE (HANDLE)(-1) #define HeapAlloc __HeapAlloc #define HeapReAlloc __HeapReAlloc -#define HeapFree(x,y,z) free(z) +#define HeapFree(x,y,z) free(z) #define GetProcessHeap() 1 #define GetProcessId(x) 8 #define lstrcpynW __lstrcpynW @@ -422,6 +422,8 @@ typedef struct _EXCEPTION_REGISTRATION_RECORD #define GetCurrentDirectoryW(x, y) 0 #define GetFileSizeEx __GetFileSizeEx #define ReadProcessMemory(a,b,c,d,e) 0 +#define GetCurrentProcess() (HANDLE)1 +#define IsWow64Process __IsWow64Process
void* __HeapAlloc(int heap, int flags, size_t size); void* __HeapReAlloc(int heap, DWORD d2, void *slab, SIZE_T newsize); @@ -432,6 +434,7 @@ void* __MapViewOfFile(HANDLE file,DWORD d1,DWORD d2,DWORD d3,SIZE_T s); BOOL __UnmapViewOfFile(const void*); LPSTR __lstrcpynA(LPSTR,LPCSTR,int); BOOL __GetFileSizeEx(HANDLE,PLARGE_INTEGER); +BOOL WINAPI __IsWow64Process(HANDLE,BOOL*); #define OPEN_EXISTING 3 #define FILE_MAP_READ SECTION_MAP_READ typedef struct _LDT_ENTRY { @@ -673,7 +676,7 @@ typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; #define SYMFLAG_PUBLIC_CODE 0x00400000 #define UNDNAME_COMPLETE (0x0000) #define UNDNAME_NAME_ONLY (0x1000) -typedef struct _TI_FINDCHILDREN_PARAMS +typedef struct _TI_FINDCHILDREN_PARAMS { ULONG Count; ULONG Start; @@ -709,7 +712,7 @@ typedef struct _SYMBOL_INFO ULONG MaxNameLen; CHAR Name[1]; } SYMBOL_INFO, *PSYMBOL_INFO; -typedef enum +typedef enum { SymNone = 0, SymCoff, @@ -791,7 +794,7 @@ typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID); #define FindExecutableImageExW __FindExecutableImageExW HANDLE __FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID); DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD); -typedef enum _THREAD_WRITE_FLAGS +typedef enum _THREAD_WRITE_FLAGS { ThreadWriteThread = 0x0001, ThreadWriteStack = 0x0002, @@ -911,7 +914,7 @@ typedef struct _IMAGEHLP_MODULE64 } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; typedef DWORD RVA; typedef ULONG64 RVA64; -typedef enum _MINIDUMP_TYPE +typedef enum _MINIDUMP_TYPE { MiniDumpNormal = 0x0000, MiniDumpWithDataSegs = 0x0001, @@ -938,7 +941,7 @@ typedef struct _MINIDUMP_THREAD_CALLBACK ULONG64 StackBase; ULONG64 StackEnd; } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; -typedef struct _MINIDUMP_THREAD_EX_CALLBACK +typedef struct _MINIDUMP_THREAD_EX_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; @@ -949,7 +952,7 @@ typedef struct _MINIDUMP_THREAD_EX_CALLBACK ULONG64 BackingStoreBase; ULONG64 BackingStoreEnd; } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK; -typedef struct _MINIDUMP_MODULE_CALLBACK +typedef struct _MINIDUMP_MODULE_CALLBACK { PWCHAR FullPath; ULONG64 BaseOfImage; @@ -966,16 +969,16 @@ typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK { ULONG ThreadId; } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; -typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK +typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { ULONG64 BaseOfImage; } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; -typedef struct _MINIDUMP_CALLBACK_INPUT +typedef struct _MINIDUMP_CALLBACK_INPUT { ULONG ProcessId; HANDLE ProcessHandle; ULONG CallbackType; - union + union { MINIDUMP_THREAD_CALLBACK Thread; MINIDUMP_THREAD_EX_CALLBACK ThreadEx; @@ -986,7 +989,7 @@ typedef struct _MINIDUMP_CALLBACK_INPUT } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT; typedef struct _MINIDUMP_CALLBACK_OUTPUT { - union + union { ULONG ModuleWriteFlags; ULONG ThreadWriteFlags; @@ -998,7 +1001,7 @@ typedef struct _MINIDUMP_CALLBACK_OUTPUT } DUMMYUNIONNAME; } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT; typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT); -typedef struct _MINIDUMP_CALLBACK_INFORMATION +typedef struct _MINIDUMP_CALLBACK_INFORMATION { MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; void* CallbackParam; @@ -1060,7 +1063,7 @@ typedef struct _STACKFRAME64 DWORD64 Reserved[3]; KDHELP64 KdHelp; } STACKFRAME64, *LPSTACKFRAME64; -typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO +typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { TI_GET_SYMTAG, TI_GET_SYMNAME, @@ -1245,13 +1248,13 @@ enum SymTagEnum SymTagPointerType, SymTagArrayType, SymTagBaseType, - SymTagTypedef, + SymTagTypedef, SymTagBaseClass, SymTagFriend, - SymTagFunctionArgType, - SymTagFuncDebugStart, + SymTagFunctionArgType, + SymTagFuncDebugStart, SymTagFuncDebugEnd, - SymTagUsingNamespace, + SymTagUsingNamespace, SymTagVTableShape, SymTagVTable, SymTagCustom, @@ -1867,7 +1870,7 @@ typedef enum THUNK_ORDINAL_ADJUSTOR, THUNK_ORDINAL_VCALL, THUNK_ORDINAL_PCODE, - THUNK_ORDINAL_LOAD + THUNK_ORDINAL_LOAD } THUNK_ORDINAL;
typedef enum CV_call_e diff --git a/dll/win32/dbghelp/dbghelp.c b/dll/win32/dbghelp/dbghelp.c index 6779e9ae98e..14eeb781637 100644 --- a/dll/win32/dbghelp/dbghelp.c +++ b/dll/win32/dbghelp/dbghelp.c @@ -309,6 +309,7 @@ static BOOL check_live_target(struct process* pcs) BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeProcess) { struct process* pcs; + BOOL wow64, child_wow64;
TRACE("(%p %s %u)\n", hProcess, debugstr_w(UserSearchPath), fInvadeProcess);
@@ -326,6 +327,12 @@ BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeP
pcs->handle = hProcess;
+ IsWow64Process(GetCurrentProcess(), &wow64); + + if (!IsWow64Process(hProcess, &child_wow64)) + return FALSE; + pcs->is_64bit = (sizeof(void *) == 8 || wow64) && !child_wow64; + if (UserSearchPath) { pcs->search_path = lstrcpyW(HeapAlloc(GetProcessHeap(), 0, diff --git a/dll/win32/dbghelp/dbghelp_private.h b/dll/win32/dbghelp/dbghelp_private.h index 0d1e8e4274d..a78bd156673 100644 --- a/dll/win32/dbghelp/dbghelp_private.h +++ b/dll/win32/dbghelp/dbghelp_private.h @@ -415,7 +415,7 @@ struct module struct wine_rb_tree sources_offsets_tree; };
-struct process +struct process { struct process* next; HANDLE handle; @@ -433,6 +433,8 @@ struct process
unsigned buffer_size; void* buffer; + + BOOL is_64bit; };
struct line_info @@ -639,11 +641,13 @@ extern void module_reset_debug_info(struct module* module) DECLSPEC_HIDD extern BOOL module_remove(struct process* pcs, struct module* module) DECLSPEC_HIDDEN; extern void module_set_module(struct module* module, const WCHAR* name) DECLSPEC_HIDDEN; -extern const WCHAR *get_wine_loader_name(void) DECLSPEC_HIDDEN; +#ifndef __REACTOS__ +extern WCHAR * get_wine_loader_name(struct process *pcs) DECLSPEC_HIDDEN; +#endif
/* msc.c */ extern BOOL pe_load_debug_directory(const struct process* pcs, - struct module* module, + struct module* module, const BYTE* mapping, const IMAGE_SECTION_HEADER* sectp, DWORD nsect, const IMAGE_DEBUG_DIRECTORY* dbg, int nDbg) DECLSPEC_HIDDEN; @@ -657,7 +661,7 @@ extern BOOL pdb_virtual_unwind(struct cpu_stack_walk* csw, DWORD_PTR ip,
/* path.c */ extern BOOL path_find_symbol_file(const struct process* pcs, const struct module* module, - PCSTR full_path, const GUID* guid, DWORD dw1, DWORD dw2, + PCSTR full_path, const GUID* guid, DWORD dw1, DWORD dw2, PSTR buffer, BOOL* is_unmatched) DECLSPEC_HIDDEN;
/* pe_module.c */ @@ -720,14 +724,14 @@ extern struct symt_compiland* symt_new_compiland(struct module* module, unsigned long address, unsigned src_idx) DECLSPEC_HIDDEN; extern struct symt_public* - symt_new_public(struct module* module, - struct symt_compiland* parent, + symt_new_public(struct module* module, + struct symt_compiland* parent, const char* typename, BOOL is_function, unsigned long address, unsigned size) DECLSPEC_HIDDEN; extern struct symt_data* - symt_new_global_variable(struct module* module, + symt_new_global_variable(struct module* module, struct symt_compiland* parent, const char* name, unsigned is_static, struct location loc, unsigned long size, @@ -738,31 +742,31 @@ extern struct symt_function* const char* name, unsigned long addr, unsigned long size, struct symt* type) DECLSPEC_HIDDEN; -extern BOOL symt_normalize_function(struct module* module, +extern BOOL symt_normalize_function(struct module* module, const struct symt_function* func) DECLSPEC_HIDDEN; extern void symt_add_func_line(struct module* module, - struct symt_function* func, - unsigned source_idx, int line_num, + struct symt_function* func, + unsigned source_idx, int line_num, unsigned long offset) DECLSPEC_HIDDEN; extern struct symt_data* - symt_add_func_local(struct module* module, - struct symt_function* func, + symt_add_func_local(struct module* module, + struct symt_function* func, enum DataKind dt, const struct location* loc, struct symt_block* block, struct symt* type, const char* name) DECLSPEC_HIDDEN; extern struct symt_block* - symt_open_func_block(struct module* module, + symt_open_func_block(struct module* module, struct symt_function* func, - struct symt_block* block, + struct symt_block* block, unsigned pc, unsigned len) DECLSPEC_HIDDEN; extern struct symt_block* - symt_close_func_block(struct module* module, + symt_close_func_block(struct module* module, const struct symt_function* func, struct symt_block* block, unsigned pc) DECLSPEC_HIDDEN; extern struct symt_hierarchy_point* - symt_add_function_point(struct module* module, + symt_add_function_point(struct module* module, struct symt_function* func, - enum SymTagEnum point, + enum SymTagEnum point, const struct location* loc, const char* name) DECLSPEC_HIDDEN; extern BOOL symt_fill_func_line_info(const struct module* module, @@ -770,7 +774,7 @@ extern BOOL symt_fill_func_line_info(const struct module* module, DWORD64 addr, IMAGEHLP_LINE64* line) DECLSPEC_HIDDEN; extern BOOL symt_get_func_line_next(const struct module* module, PIMAGEHLP_LINE64 line) DECLSPEC_HIDDEN; extern struct symt_thunk* - symt_new_thunk(struct module* module, + symt_new_thunk(struct module* module, struct symt_compiland* parent, const char* name, THUNK_ORDINAL ord, unsigned long addr, unsigned long size) DECLSPEC_HIDDEN; @@ -791,38 +795,38 @@ extern void symt_init_basic(struct module* module) DECLSPEC_HIDDEN; extern BOOL symt_get_info(struct module* module, const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, void* pInfo) DECLSPEC_HIDDEN; extern struct symt_basic* - symt_new_basic(struct module* module, enum BasicType, + symt_new_basic(struct module* module, enum BasicType, const char* typename, unsigned size) DECLSPEC_HIDDEN; extern struct symt_udt* symt_new_udt(struct module* module, const char* typename, unsigned size, enum UdtKind kind) DECLSPEC_HIDDEN; extern BOOL symt_set_udt_size(struct module* module, struct symt_udt* type, unsigned size) DECLSPEC_HIDDEN; -extern BOOL symt_add_udt_element(struct module* module, - struct symt_udt* udt_type, +extern BOOL symt_add_udt_element(struct module* module, + struct symt_udt* udt_type, const char* name, - struct symt* elt_type, unsigned offset, + struct symt* elt_type, unsigned offset, unsigned size) DECLSPEC_HIDDEN; extern struct symt_enum* symt_new_enum(struct module* module, const char* typename, struct symt* basetype) DECLSPEC_HIDDEN; -extern BOOL symt_add_enum_element(struct module* module, - struct symt_enum* enum_type, +extern BOOL symt_add_enum_element(struct module* module, + struct symt_enum* enum_type, const char* name, int value) DECLSPEC_HIDDEN; extern struct symt_array* - symt_new_array(struct module* module, int min, int max, + symt_new_array(struct module* module, int min, int max, struct symt* base, struct symt* index) DECLSPEC_HIDDEN; extern struct symt_function_signature* - symt_new_function_signature(struct module* module, + symt_new_function_signature(struct module* module, struct symt* ret_type, enum CV_call_e call_conv) DECLSPEC_HIDDEN; extern BOOL symt_add_function_signature_parameter(struct module* module, struct symt_function_signature* sig, struct symt* param) DECLSPEC_HIDDEN; extern struct symt_pointer* - symt_new_pointer(struct module* module, + symt_new_pointer(struct module* module, struct symt* ref_type, unsigned long size) DECLSPEC_HIDDEN; extern struct symt_typedef* - symt_new_typedef(struct module* module, struct symt* ref, + symt_new_typedef(struct module* module, struct symt* ref, const char* name) DECLSPEC_HIDDEN; diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index e841b1b707a..4d877b44214 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -50,6 +50,7 @@
#include "wine/library.h" #include "wine/debug.h" +#include "wine/heap.h"
#ifdef __ELF__
@@ -1568,13 +1569,17 @@ static BOOL elf_enum_modules_internal(const struct process* pcs, */ static BOOL elf_search_loader(struct process* pcs, struct elf_info* elf_info) { + WCHAR *loader = get_wine_loader_name(pcs); PROCESS_BASIC_INFORMATION pbi; ULONG_PTR base = 0; + BOOL ret;
if (!NtQueryInformationProcess( pcs->handle, ProcessBasicInformation, &pbi, sizeof(pbi), NULL )) ReadProcessMemory( pcs->handle, &pbi.PebBaseAddress->Reserved[0], &base, sizeof(base), NULL );
- return elf_search_and_load_file(pcs, get_wine_loader_name(), base, 0, elf_info); + ret = elf_search_and_load_file(pcs, loader, base, 0, elf_info); + heap_free(loader); + return ret; }
/****************************************************************** diff --git a/dll/win32/dbghelp/macho_module.c b/dll/win32/dbghelp/macho_module.c index 01fa300eff7..4018c9dbf2d 100644 --- a/dll/win32/dbghelp/macho_module.c +++ b/dll/win32/dbghelp/macho_module.c @@ -1703,6 +1703,7 @@ BOOL macho_synchronize_module_list(struct process* pcs) */ static BOOL macho_search_loader(struct process* pcs, struct macho_info* macho_info) { + WCHAR *loader = get_wine_loader_name(pcs); BOOL ret = FALSE; ULONG_PTR dyld_image_info_address; struct dyld_all_image_infos image_infos; @@ -1757,7 +1758,8 @@ static BOOL macho_search_loader(struct process* pcs, struct macho_info* macho_in }
if (!ret) - ret = macho_search_and_load_file(pcs, get_wine_loader_name(), 0, macho_info); + ret = macho_search_and_load_file(pcs, loader, 0, macho_info); + heap_free(loader); return ret; }
diff --git a/dll/win32/dbghelp/module.c b/dll/win32/dbghelp/module.c index 2ddf3f50644..8f7150460be 100644 --- a/dll/win32/dbghelp/module.c +++ b/dll/win32/dbghelp/module.c @@ -149,44 +149,41 @@ void module_set_module(struct module* module, const WCHAR* name) module_fill_module(name, module->modulename, sizeof(module->modulename) / sizeof(module->modulename[0])); }
-const WCHAR *get_wine_loader_name(void) +#ifndef __REACTOS__ +/* Returned string must be freed by caller */ +WCHAR *get_wine_loader_name(struct process *pcs) { - static const BOOL is_win64 = sizeof(void *) > sizeof(int); /* FIXME: should depend on target process */ static const WCHAR wineW[] = {'w','i','n','e',0}; static const WCHAR suffixW[] = {'6','4',0}; - static const WCHAR *loader; + WCHAR *buffer, *p; + const char *env;
- if (!loader) + /* All binaries are loaded with WINELOADER (if run from tree) or by the + * main executable + */ + if ((env = getenv("WINELOADER"))) + { + DWORD len = 2 + MultiByteToWideChar( CP_UNIXCP, 0, env, -1, NULL, 0 ); + buffer = heap_alloc( len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_UNIXCP, 0, env, -1, buffer, len ); + } + else { - WCHAR *p, *buffer; - const char *ptr; + buffer = heap_alloc( sizeof(wineW) + 2 * sizeof(WCHAR) ); + strcpyW( buffer, wineW ); + }
- /* All binaries are loaded with WINELOADER (if run from tree) or by the - * main executable - */ - if ((ptr = getenv("WINELOADER"))) - { - DWORD len = 2 + MultiByteToWideChar( CP_UNIXCP, 0, ptr, -1, NULL, 0 ); - buffer = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - MultiByteToWideChar( CP_UNIXCP, 0, ptr, -1, buffer, len ); - } - else - { - buffer = HeapAlloc( GetProcessHeap(), 0, sizeof(wineW) + 2 * sizeof(WCHAR) ); - strcpyW( buffer, wineW ); - } - p = buffer + strlenW( buffer ) - strlenW( suffixW ); - if (p > buffer && !strcmpW( p, suffixW )) - { - if (!is_win64) *p = 0; - } - else if (is_win64) strcatW( buffer, suffixW ); + p = buffer + strlenW( buffer ) - strlenW( suffixW ); + if (p > buffer && !strcmpW( p, suffixW )) + *p = 0;
- TRACE( "returning %s\n", debugstr_w(buffer) ); - loader = buffer; - } - return loader; + if (pcs->is_64bit) + strcatW(buffer, suffixW); + + TRACE( "returning %s\n", debugstr_w(buffer) ); + return buffer; } +#endif
static const char* get_module_type(enum module_type type, BOOL virtual) { diff --git a/sdk/tools/winesync/dbghelp.cfg b/sdk/tools/winesync/dbghelp.cfg index 55c41591d34..db9fd318575 100644 --- a/sdk/tools/winesync/dbghelp.cfg +++ b/sdk/tools/winesync/dbghelp.cfg @@ -3,4 +3,4 @@ directories: files: include/dbghelp.h: sdk/include/psdk/dbghelp.h tags: - wine: 9b973eee9e06a3dca7a6c5739741446bf46e27f5 + wine: a981edf0bc7c828e6b55fdc73b51a2f457043c4a