From: Martin Storsjö <martin(a)martin.st> See https://github.com/llvm/llvm-project/issues/169588 for discussion around this case. As there is no unwind opcode that can describe "stp x19,lr,[sp,-#N]!", this case is handled with two separate instructions, "sub sp, sp, #N" and "stp x19,lr,[sp]". --- tools/winedump/pe.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/winedump/pe.c b/tools/winedump/pe.c index 745982390fd..2b738a2f7c3 100644 --- a/tools/winedump/pe.c +++ b/tools/winedump/pe.c @@ -2176,9 +2176,10 @@ static void dump_arm64_packed_info( const struct runtime_function_arm64 *func ) printf( " %04x: str lr,[sp,-#%#x]!\n", pos++, savesz ); break; case 1: - if (func->CR == 1) - printf( " %04x: stp x19,lr,[sp,-#%#x]!\n", pos++, savesz ); - else + if (func->CR == 1) { + printf( " %04x: sub sp, sp, %#x\n", pos++, savesz ); + printf( " %04x: stp x19,lr,[sp]\n", pos++ ); + } else printf( " %04x: str x19,[sp,-#%#x]!\n", pos++, savesz ); break; default: -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9638