diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec index b95a9e728bf..360c6d46ee1 100644 --- a/dlls/dbghelp/dbghelp.spec +++ b/dlls/dbghelp/dbghelp.spec @@ -30,8 +30,8 @@ @ stdcall SearchTreeForFileW(wstr wstr ptr) @ stdcall StackWalk(long long long ptr ptr ptr ptr ptr ptr) @ stdcall StackWalk64(long long long ptr ptr ptr ptr ptr ptr) -@ stub SymAddSymbol -@ stub SymAddSymbolW +@ stdcall SymAddSymbol(ptr double str double long long) +@ stdcall SymAddSymbolW(ptr double wstr double long long) @ stdcall SymCleanup(long) @ stdcall SymEnumLines(ptr double str str ptr ptr) @ stub SymEnumLinesW diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index 682f37ae5d5..ca6ec61fefe 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -1716,3 +1716,37 @@ BOOL WINAPI SymSearchW(HANDLE hProcess, ULONG64 BaseOfDll, DWORD Index, return ret; } + +/****************************************************************** + * SymAddSymbol (DBGHELP.@) + * + */ +BOOL WINAPI SymAddSymbol(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR name, + DWORD64 addr, DWORD size, DWORD flags) +{ + WCHAR nameW[MAX_SYM_NAME]; + + MultiByteToWideChar(CP_ACP, 0, name, -1, nameW, sizeof(nameW) / sizeof(WCHAR)); + return SymAddSymbolW(hProcess, BaseOfDll, nameW, addr, size, flags); +} + +/****************************************************************** + * SymAddSymbolW (DBGHELP.@) + * + */ +BOOL WINAPI SymAddSymbolW(HANDLE hProcess, ULONG64 BaseOfDll, PCWSTR name, + DWORD64 addr, DWORD size, DWORD flags) +{ + struct module_pair pair; + + TRACE("(%p %s %s %u)\n", hProcess, wine_dbgstr_w(name), wine_dbgstr_longlong(addr), size); + + pair.pcs = process_find_by_handle(hProcess); + if (!pair.pcs) return FALSE; + pair.requested = module_find_by_addr(pair.pcs, BaseOfDll, DMT_UNKNOWN); + if (!module_get_debug(&pair)) return FALSE; + + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} +