Module: wine Branch: master Commit: a97b3f640cc4d0564774c7c6911d02c87fb5975f URL: https://gitlab.winehq.org/wine/wine/-/commit/a97b3f640cc4d0564774c7c6911d02c...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Feb 1 12:28:47 2024 +0100
winedump: Handle ARM64 exception unwind info with flag==3.
---
tools/winedump/pe.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/tools/winedump/pe.c b/tools/winedump/pe.c index 4d60c130a4d..f405acb2710 100644 --- a/tools/winedump/pe.c +++ b/tools/winedump/pe.c @@ -1645,11 +1645,14 @@ static void dump_arm64_unwind_info( const struct runtime_function_arm64 *func ) const struct unwind_info_arm64 *info; const struct unwind_info_ext_arm64 *infoex; const struct unwind_info_epilog_arm64 *infoepi; + const struct runtime_function_arm64 *parent_func; const BYTE *ptr; unsigned int i, rva, codes, epilogs;
- if (func->Flag) + switch (func->Flag) { + case 1: + case 2: printf( "\nFunction %08x-%08x:\n", func->BeginAddress, func->BeginAddress + func->FunctionLength * 4 ); printf( " len=%#x flag=%x regF=%u regI=%u H=%u CR=%u frame=%x\n", @@ -1657,6 +1660,13 @@ static void dump_arm64_unwind_info( const struct runtime_function_arm64 *func ) func->H, func->CR, func->FrameSize ); dump_arm64_packed_info( func ); return; + case 3: + rva = func->UnwindData & ~3; + parent_func = RVA( rva, sizeof(*parent_func) ); + printf( "\nFunction %08x-%08x:\n", func->BeginAddress, + func->BeginAddress + 12 /* adrl x16, <dest>; br x16 */ ); + printf( " forward to parent %08x\n", parent_func->BeginAddress ); + return; }
rva = func->UnwindData;