diff --git a/src/vm/arm/ehhelpers.S b/src/vm/arm/ehhelpers.S index dfe1b11e0d31..c32a06b7ee6c 100644 --- a/src/vm/arm/ehhelpers.S +++ b/src/vm/arm/ehhelpers.S @@ -47,6 +47,8 @@ OFFSET_OF_FRAME=(4 + SIZEOF__GSCookie) // // Runtime check for 8-byte alignment. PROLOG_STACK_SAVE r7 + // We lose stack unwindability here by configuring fp(r7) incorrectely + // here. and r0, r7, #4 sub sp, sp, r0 @@ -99,6 +101,7 @@ OFFSET_OF_FRAME=(4 + SIZEOF__GSCookie) NESTED_ENTRY CallEHFunclet, _TEXT, NoHandler PROLOG_PUSH "{r4-r11, lr}" + PROLOG_STACK_SAVE_OFFSET r7, #12 alloc_stack 4 // On entry: @@ -124,7 +127,8 @@ OFFSET_OF_FRAME=(4 + SIZEOF__GSCookie) // frame pointer for accessing the locals in the parent method. NESTED_ENTRY CallEHFilterFunclet, _TEXT, NoHandler - PROLOG_PUSH "{lr}" + PROLOG_PUSH "{r7, lr}" + PROLOG_STACK_SAVE r7 alloc_stack 4 // On entry: @@ -140,6 +144,6 @@ OFFSET_OF_FRAME=(4 + SIZEOF__GSCookie) blx r2 free_stack 4 - EPILOG_POP "{pc}" + EPILOG_POP "{r7, pc}" NESTED_END CallEHFilterFunclet, _TEXT