[PATCH 06/10] dbghelp: rewrite SymSetContext() on top of SymSetScopeFromAddr()
Eric Pouech
eric.pouech at gmail.com
Tue Oct 26 04:45:44 CDT 2021
Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
---
dlls/dbghelp/dbghelp.c | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/dlls/dbghelp/dbghelp.c b/dlls/dbghelp/dbghelp.c
index 81a43327708..eb0977dff36 100644
--- a/dlls/dbghelp/dbghelp.c
+++ b/dlls/dbghelp/dbghelp.c
@@ -607,34 +607,27 @@ BOOL WINAPI SymSetContext(HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame,
PIMAGEHLP_CONTEXT Context)
{
struct process* pcs;
- struct module_pair pair;
- struct symt_ht* sym;
+ BOOL same;
- pair.pcs = pcs = process_find_by_handle(hProcess);
- if (!pcs) return FALSE;
+ if (!(pcs = process_find_by_handle(hProcess))) return FALSE;
+ same = pcs->ctx_frame.ReturnOffset == StackFrame->ReturnOffset &&
+ pcs->ctx_frame.FrameOffset == StackFrame->FrameOffset &&
+ pcs->ctx_frame.StackOffset == StackFrame->StackOffset;
- pair.requested = module_find_by_addr(pair.pcs, StackFrame->InstructionOffset, DMT_UNKNOWN);
- if (!module_get_debug(&pair)) return FALSE;
+ if (!SymSetScopeFromAddr(hProcess, StackFrame->InstructionOffset))
return FALSE;
- if ((sym = symt_find_nearest(pair.effective, StackFrame->InstructionOffset)) == NULL) return FALSE;
- if (sym->symt.tag != SymTagFunction) return FALSE;
- pcs->localscope_pc = StackFrame->InstructionOffset;
- pcs->localscope_symt = &sym->symt;
- if (pcs->ctx_frame.ReturnOffset == StackFrame->ReturnOffset &&
- pcs->ctx_frame.FrameOffset == StackFrame->FrameOffset &&
- pcs->ctx_frame.StackOffset == StackFrame->StackOffset)
+ pcs->ctx_frame = *StackFrame;
+ if (same)
{
TRACE("Setting same frame {rtn=%I64x frm=%I64x stk=%I64x}\n",
pcs->ctx_frame.ReturnOffset,
pcs->ctx_frame.FrameOffset,
pcs->ctx_frame.StackOffset);
- pcs->ctx_frame.InstructionOffset = StackFrame->InstructionOffset;
SetLastError(ERROR_SUCCESS);
return FALSE;
}
- pcs->ctx_frame = *StackFrame;
/* Context is not (no longer?) used */
return TRUE;
}
More information about the wine-devel
mailing list