Module: wine
Branch: master
Commit: 611911ca05e5f29f7f2bf45f8144bcd89e77136f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=611911ca05e5f29f7f2bf45f…
Author: Martin Storsjö <martin(a)martin.st>
Date: Tue Nov 9 16:05:49 2021 +0200
ntdll: Save context->Lr in the arm version of RtlRaiseException.
RtlCaptureContext doesn't set context->Lr, which is needed for
being able to unwind from the context.
This matches what is done in the arm64 version.
Signed-off-by: Martin Storsjö <martin(a)martin.st>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
dlls/ntdll/signal_arm.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c
index 27e27deabfe..3bf8e19e126 100644
--- a/dlls/ntdll/signal_arm.c
+++ b/dlls/ntdll/signal_arm.c
@@ -811,6 +811,7 @@ __ASM_STDCALL_FUNC( RtlRaiseException, 4,
"bl " __ASM_NAME("RtlCaptureContext") "\n\t"
"ldr r0, [sp, #0x1a0]\n\t" /* rec */
"ldr r1, [sp, #0x1a4]\n\t"
+ "str r1, [sp, #0x3c]\n\t" /* context->Lr */
"str r1, [sp, #0x40]\n\t" /* context->Pc */
"mrs r2, CPSR\n\t"
"bfi r2, r1, #5, #1\n\t" /* Thumb bit */
Module: wine
Branch: master
Commit: ae7979a42d418908f1f37d689a2274a71d82b215
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ae7979a42d418908f1f37d68…
Author: Martin Storsjö <martin(a)martin.st>
Date: Tue Nov 9 16:05:46 2021 +0200
winedump: Fix printing of the prologue version of the "ldr lr, [sp], #offset" opcode.
This isn't mentioned in the documentation (which only writes out the
instruction that is executed while unwinding, i.e. the mirror form of
it), but a prologue version of this instruction would look like this.
Signed-off-by: Martin Storsjö <martin(a)martin.st>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
tools/winedump/pe.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/winedump/pe.c b/tools/winedump/pe.c
index 5d325fba3da..43ba0618615 100644
--- a/tools/winedump/pe.c
+++ b/tools/winedump/pe.c
@@ -1113,7 +1113,7 @@ static void dump_armnt_unwind_info( const struct runtime_function_armnt *fnc )
if (inepilogue)
printf( "ldr lr, [sp], #%u\n", (excode & 0x0f) * 4 );
else
- printf( "unknown 32\n" );
+ printf( "str lr, [sp, #-%u]!\n", (excode & 0x0f) * 4 );
}
else
printf( "unknown 32\n" );