[PATCH] dbghelp: Detect if return address information is missing.
Grazvydas Ignotas
notasas at gmail.com
Mon Apr 6 12:39:35 CDT 2015
For binaries built with gcc version 4.2.1-sjlj (mingw32-2), wine
currently prints a "stacktrace" consisting of the same function
200 times. It seems there is valid dwarf information, but return
address information is missing, so detect this and use default
unwinder instead.
---
dlls/dbghelp/dwarf.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index c54bfd3..fa9e559 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -3271,6 +3271,10 @@ BOOL dwarf2_virtual_unwind(struct cpu_stack_walk* csw, ULONG_PTR ip, CONTEXT* co
if (end) fde_ctx.data = end;
execute_cfa_instructions(&fde_ctx, ip, &info);
+
+ /* if there is no information about retaddr, use default unwinder */
+ if (info.state.rules[info.retaddr_reg] == RULE_UNSET) return FALSE;
+
apply_frame_state(pair.effective, csw, context, &info.state, cfa);
return TRUE;
--
1.9.1
More information about the wine-patches
mailing list