[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;

More information about the wine-patches mailing list