mirror of
https://github.com/reactos/reactos.git
synced 2025-01-03 21:09:19 +00:00
[WINESYNC] dbghelp: Search for debug files in module path too.
Signed-off-by: Andreas Maier <andy1.m@gmx.de> Signed-off-by: Alexandre Julliard <julliard@winehq.org> wine commit id 6030ee5f6f64a2ebe6df2e505e2588eb300222c2 by Andreas Maier <andy1.m@gmx.de>
This commit is contained in:
parent
8d3d1febad
commit
989a748f81
5 changed files with 36 additions and 10 deletions
|
@ -688,9 +688,9 @@ extern BOOL pdb_virtual_unwind(struct cpu_stack_walk *csw, DWORD_PTR ip,
|
||||||
union ctx *context, struct pdb_cmd_pair *cpair) DECLSPEC_HIDDEN;
|
union ctx *context, struct pdb_cmd_pair *cpair) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* path.c */
|
/* path.c */
|
||||||
extern BOOL path_find_symbol_file(const struct process* pcs, PCSTR full_path,
|
extern BOOL path_find_symbol_file(const struct process* pcs, const struct module* module,
|
||||||
const GUID* guid, DWORD dw1, DWORD dw2, PSTR buffer,
|
PCSTR full_path, const GUID* guid, DWORD dw1, DWORD dw2,
|
||||||
BOOL* is_unmatched) DECLSPEC_HIDDEN;
|
PSTR buffer, BOOL* is_unmatched) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* pe_module.c */
|
/* pe_module.c */
|
||||||
extern BOOL pe_load_nt_header(HANDLE hProc, DWORD64 base, IMAGE_NT_HEADERS* nth) DECLSPEC_HIDDEN;
|
extern BOOL pe_load_nt_header(HANDLE hProc, DWORD64 base, IMAGE_NT_HEADERS* nth) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -2450,11 +2450,11 @@ static HANDLE map_pdb_file(const struct process* pcs,
|
||||||
switch (lookup->kind)
|
switch (lookup->kind)
|
||||||
{
|
{
|
||||||
case PDB_JG:
|
case PDB_JG:
|
||||||
ret = path_find_symbol_file(pcs, lookup->filename, NULL, lookup->timestamp,
|
ret = path_find_symbol_file(pcs, module, lookup->filename, NULL, lookup->timestamp,
|
||||||
lookup->age, dbg_file_path, &module->module.PdbUnmatched);
|
lookup->age, dbg_file_path, &module->module.PdbUnmatched);
|
||||||
break;
|
break;
|
||||||
case PDB_DS:
|
case PDB_DS:
|
||||||
ret = path_find_symbol_file(pcs, lookup->filename, &lookup->guid, 0,
|
ret = path_find_symbol_file(pcs, module, lookup->filename, &lookup->guid, 0,
|
||||||
lookup->age, dbg_file_path, &module->module.PdbUnmatched);
|
lookup->age, dbg_file_path, &module->module.PdbUnmatched);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,15 @@ static inline const WCHAR* file_nameW(const WCHAR* str)
|
||||||
return p + 1;
|
return p + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void file_pathW(const WCHAR *src, WCHAR *dst)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
for (len = strlenW(src) - 1; (len > 0) && (!is_sepW(src[len])); len--);
|
||||||
|
memcpy( dst, src, len * sizeof(WCHAR) );
|
||||||
|
dst[len] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* FindDebugInfoFile (DBGHELP.@)
|
* FindDebugInfoFile (DBGHELP.@)
|
||||||
*
|
*
|
||||||
|
@ -612,9 +621,9 @@ static BOOL CALLBACK module_find_cb(PCWSTR buffer, PVOID user)
|
||||||
return mf->matched == 2;
|
return mf->matched == 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL path_find_symbol_file(const struct process* pcs, PCSTR full_path,
|
BOOL path_find_symbol_file(const struct process* pcs, const struct module* module,
|
||||||
const GUID* guid, DWORD dw1, DWORD dw2, PSTR buffer,
|
PCSTR full_path, const GUID* guid, DWORD dw1, DWORD dw2,
|
||||||
BOOL* is_unmatched)
|
PSTR buffer, BOOL* is_unmatched)
|
||||||
{
|
{
|
||||||
struct module_find mf;
|
struct module_find mf;
|
||||||
WCHAR full_pathW[MAX_PATH];
|
WCHAR full_pathW[MAX_PATH];
|
||||||
|
@ -643,6 +652,23 @@ BOOL path_find_symbol_file(const struct process* pcs, PCSTR full_path,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: Use Environment-Variables (see MS docs)
|
||||||
|
_NT_SYMBOL_PATH and _NT_ALT_SYMBOL_PATH
|
||||||
|
FIXME: Implement "Standard Path Elements" (Path) ... (see MS docs)
|
||||||
|
do a search for (every?) path-element like this ...
|
||||||
|
<path>
|
||||||
|
<path>\dll
|
||||||
|
<path>\symbols\dll
|
||||||
|
(dll may be exe, or sys depending on the file extension) */
|
||||||
|
|
||||||
|
/* 2. check module-path */
|
||||||
|
file_pathW(module->module.LoadedImageName, tmp);
|
||||||
|
if (do_searchW(filename, tmp, FALSE, module_find_cb, &mf))
|
||||||
|
{
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, tmp, -1, buffer, MAX_PATH, NULL, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
while (searchPath)
|
while (searchPath)
|
||||||
{
|
{
|
||||||
ptr = strchrW(searchPath, ';');
|
ptr = strchrW(searchPath, ';');
|
||||||
|
|
|
@ -560,7 +560,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module,
|
||||||
|
|
||||||
TRACE("Processing DBG file %s\n", debugstr_a(dbg_name));
|
TRACE("Processing DBG file %s\n", debugstr_a(dbg_name));
|
||||||
|
|
||||||
if (path_find_symbol_file(pcs, dbg_name, NULL, timestamp, 0, tmp, &module->module.DbgUnmatched) &&
|
if (path_find_symbol_file(pcs, module, dbg_name, NULL, timestamp, 0, tmp, &module->module.DbgUnmatched) &&
|
||||||
(hFile = CreateFileA(tmp, GENERIC_READ, FILE_SHARE_READ, NULL,
|
(hFile = CreateFileA(tmp, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE &&
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE &&
|
||||||
((hMap = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0, NULL)) != 0) &&
|
((hMap = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0, NULL)) != 0) &&
|
||||||
|
|
|
@ -4,4 +4,4 @@ files:
|
||||||
include/dbghelp.h: sdk/include/psdk/dbghelp.h
|
include/dbghelp.h: sdk/include/psdk/dbghelp.h
|
||||||
include/wine/mscvpdb.h: sdk/include/reactos/wine/mscvpdb.h
|
include/wine/mscvpdb.h: sdk/include/reactos/wine/mscvpdb.h
|
||||||
tags:
|
tags:
|
||||||
wine: f333c4a210e25bbb8af2adeeae0dbe006354519b
|
wine: 6030ee5f6f64a2ebe6df2e505e2588eb300222c2
|
||||||
|
|
Loading…
Reference in a new issue