dbghelp: Support UWOP_EPILOG in unwind.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alistair Leslie-Hughes 2021-10-14 19:45:56 +11:00 committed by Alexandre Julliard
parent 960bb36941
commit 40f0119739
1 changed files with 14 additions and 1 deletions

View File

@ -209,6 +209,19 @@ static void dump_unwind_info(struct cpu_stack_walk* csw, ULONG64 base, RUNTIME_F
case UWOP_PUSH_MACHFRAME:
TRACE("PUSH_MACHFRAME %u\n", info->UnwindCode[i].u.OpInfo);
break;
case UWOP_EPILOG:
if (info->Version == 2)
{
unsigned int offset;
if (info->UnwindCode[i].u.OpInfo)
offset = info->UnwindCode[i].u.CodeOffset;
else
offset = (info->UnwindCode[i+1].u.OpInfo << 8) + info->UnwindCode[i+1].u.CodeOffset;
TRACE("UWOP_EPILOG %u offset %u\n", info->UnwindCode[i].u.OpInfo, offset);
i += 1;
break;
}
/* Fall through */
default:
FIXME("unknown code %u\n", info->UnwindCode[i].u.UnwindOp);
break;
@ -490,7 +503,7 @@ static BOOL interpret_function_table_entry(struct cpu_stack_walk* csw,
return FALSE;
}
if (info->Version != 1)
if (info->Version != 1 && info->Version != 2)
{
WARN("unknown unwind info version %u at %lx\n", info->Version, base + function->UnwindData);
return FALSE;