Module: wine Branch: master Commit: 65109c725dbed4fa29cf90f5a8729071335c65d2 URL: https://gitlab.winehq.org/wine/wine/-/commit/65109c725dbed4fa29cf90f5a872907...
Author: Eric Pouech epouech@codeweavers.com Date: Thu Dec 14 14:15:14 2023 +0100
dbghelp: Implement SymFromIndex().
Signed-off-by: Eric Pouech epouech@codeweavers.com
---
dlls/dbghelp/symbol.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index 68ab81816cd..8ddbc0b1f24 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -2614,10 +2614,16 @@ BOOL WINAPI SymGetLineFromNameW64(HANDLE hProcess, PCWSTR ModuleName, PCWSTR Fil */ BOOL WINAPI SymFromIndex(HANDLE hProcess, ULONG64 BaseOfDll, DWORD index, PSYMBOL_INFO symbol) { - FIXME("hProcess = %p, BaseOfDll = %I64x, index = %ld, symbol = %p\n", + struct module_pair pair; + struct symt* sym; + + TRACE("hProcess = %p, BaseOfDll = %I64x, index = %ld, symbol = %p\n", hProcess, BaseOfDll, index, symbol);
- return FALSE; + if (!module_init_pair(&pair, hProcess, BaseOfDll)) return FALSE; + if ((sym = symt_index2ptr(pair.effective, index)) == NULL) return FALSE; + symt_fill_sym_info(&pair, NULL, sym, symbol); + return TRUE; }
/****************************************************************** @@ -2626,10 +2632,21 @@ BOOL WINAPI SymFromIndex(HANDLE hProcess, ULONG64 BaseOfDll, DWORD index, PSYMBO */ BOOL WINAPI SymFromIndexW(HANDLE hProcess, ULONG64 BaseOfDll, DWORD index, PSYMBOL_INFOW symbol) { - FIXME("hProcess = %p, BaseOfDll = %I64x, index = %ld, symbol = %p\n", + PSYMBOL_INFO si; + BOOL ret; + + TRACE("hProcess = %p, BaseOfDll = %I64x, index = %ld, symbol = %p\n", hProcess, BaseOfDll, index, symbol);
- return FALSE; + si = HeapAlloc(GetProcessHeap(), 0, sizeof(*si) + symbol->MaxNameLen * sizeof(WCHAR)); + if (!si) return FALSE; + + si->SizeOfStruct = sizeof(*si); + si->MaxNameLen = symbol->MaxNameLen; + if ((ret = SymFromIndex(hProcess, BaseOfDll, index, si))) + copy_symbolW(symbol, si); + HeapFree(GetProcessHeap(), 0, si); + return ret; }
/******************************************************************