dbgeng: Implement GetModuleByOffset().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
d337e7a656
commit
9fb20dda0f
|
@ -1053,9 +1053,30 @@ static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleName(IDebugSymbol
|
||||||
static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByOffset(IDebugSymbols3 *iface, ULONG64 offset,
|
static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByOffset(IDebugSymbols3 *iface, ULONG64 offset,
|
||||||
ULONG start_index, ULONG *index, ULONG64 *base)
|
ULONG start_index, ULONG *index, ULONG64 *base)
|
||||||
{
|
{
|
||||||
FIXME("%p, %s, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), start_index, index, base);
|
struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
|
||||||
|
static struct target_process *target;
|
||||||
|
const struct module_info *info;
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %s, %u, %p, %p.\n", iface, wine_dbgstr_longlong(offset), start_index, index, base);
|
||||||
|
|
||||||
|
if (!(target = debug_client_get_target(debug_client)))
|
||||||
|
return E_UNEXPECTED;
|
||||||
|
|
||||||
|
while ((info = debug_target_get_module_info(target, start_index)))
|
||||||
|
{
|
||||||
|
if (offset >= info->params.Base && offset < info->params.Base + info->params.Size)
|
||||||
|
{
|
||||||
|
if (index)
|
||||||
|
*index = start_index;
|
||||||
|
if (base)
|
||||||
|
*base = info->params.Base;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
start_index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNames(IDebugSymbols3 *iface, ULONG index, ULONG64 base,
|
static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNames(IDebugSymbols3 *iface, ULONG index, ULONG64 base,
|
||||||
|
|
|
@ -322,8 +322,8 @@ todo_wine
|
||||||
static void test_module_information(void)
|
static void test_module_information(void)
|
||||||
{
|
{
|
||||||
static const char *event_name = "dbgeng_test_event";
|
static const char *event_name = "dbgeng_test_event";
|
||||||
|
unsigned int loaded, unloaded, index;
|
||||||
DEBUG_MODULE_PARAMETERS params[2];
|
DEBUG_MODULE_PARAMETERS params[2];
|
||||||
unsigned int loaded, unloaded;
|
|
||||||
PROCESS_INFORMATION info;
|
PROCESS_INFORMATION info;
|
||||||
IDebugSymbols *symbols;
|
IDebugSymbols *symbols;
|
||||||
IDebugControl *control;
|
IDebugControl *control;
|
||||||
|
@ -372,7 +372,27 @@ static void test_module_information(void)
|
||||||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
ok(!!base, "Unexpected module base.\n");
|
ok(!!base, "Unexpected module base.\n");
|
||||||
|
|
||||||
|
hr = symbols->lpVtbl->GetModuleByOffset(symbols, 0, 0, &index, &base);
|
||||||
|
ok(FAILED(hr), "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = symbols->lpVtbl->GetModuleByOffset(symbols, base, 0, &index, &base);
|
||||||
|
ok(hr == S_OK, "Failed to get module, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = symbols->lpVtbl->GetModuleByOffset(symbols, base, 0, NULL, NULL);
|
||||||
|
ok(hr == S_OK, "Failed to get module, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = symbols->lpVtbl->GetModuleByOffset(symbols, base + 1, 0, NULL, NULL);
|
||||||
|
ok(hr == S_OK, "Failed to get module, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = symbols->lpVtbl->GetModuleByOffset(symbols, base, loaded, NULL, NULL);
|
||||||
|
ok(FAILED(hr), "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
/* Parameters. */
|
/* Parameters. */
|
||||||
|
base = 0;
|
||||||
|
hr = symbols->lpVtbl->GetModuleByIndex(symbols, 0, &base);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(!!base, "Unexpected module base.\n");
|
||||||
|
|
||||||
hr = symbols->lpVtbl->GetModuleParameters(symbols, 1, NULL, 0, params);
|
hr = symbols->lpVtbl->GetModuleParameters(symbols, 1, NULL, 0, params);
|
||||||
ok(hr == S_OK, "Failed to get module parameters, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to get module parameters, hr %#x.\n", hr);
|
||||||
ok(params[0].Base == base, "Unexpected module base.\n");
|
ok(params[0].Base == base, "Unexpected module base.\n");
|
||||||
|
|
Loading…
Reference in New Issue