diff options
author | Jan Vorlicek <janvorli@microsoft.com> | 2018-03-28 20:16:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-28 20:16:57 +0200 |
commit | e8eb5c6d22948bbf744f30f0a640dfeca3386d14 (patch) | |
tree | bd1d59ca980f9f6f18c7808143db06a84845fb65 /src/vm/arm/asmhelpers.S | |
parent | 104ec5550085d682bd969e20e1df8ae2422ba7ac (diff) | |
download | coreclr-e8eb5c6d22948bbf744f30f0a640dfeca3386d14.tar.gz coreclr-e8eb5c6d22948bbf744f30f0a640dfeca3386d14.tar.bz2 coreclr-e8eb5c6d22948bbf744f30f0a640dfeca3386d14.zip |
Fix some more unwinding in R2R ARM (#17292)
There was one more change needed to make the unwinding work properly.
Pushes in some prologs were missing the unwinder annotation.
The fix is to use PROLOG_PUSH for them.
To make things in this file consistent, I've also replaced pops in
epilogs with EPILOG_POP macro and vpush / vpop with PROLOG_VPUSH /
PROLOG_VPOP, although it is not functionally necessary.
With these changes, all the EH related issues are gone.
Diffstat (limited to 'src/vm/arm/asmhelpers.S')
-rw-r--r-- | src/vm/arm/asmhelpers.S | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/vm/arm/asmhelpers.S b/src/vm/arm/asmhelpers.S index 952f5c7eba..22ec7c1171 100644 --- a/src/vm/arm/asmhelpers.S +++ b/src/vm/arm/asmhelpers.S @@ -289,7 +289,7 @@ LOCAL_LABEL(LNullThis): PROLOG_PUSH "{r0-r4,r7,r8,lr}" // add r8 to make stack aligned by 8B PROLOG_STACK_SAVE_OFFSET r7, #20 - vpush {d0-d7} + PROLOG_VPUSH {d0-d7} CHECK_STACK_ALIGNMENT @@ -300,8 +300,8 @@ LOCAL_LABEL(LNullThis): mov r12, r0 // Epilog - vpop {d0-d7} - pop {r0-r4,r7,r8,lr} + EPILOG_VPOP {d0-d7} + EPILOG_POP "{r0-r4,r7,r8,lr}" bx r12 NESTED_END TheUMEntryPrestub,_TEXT @@ -542,7 +542,7 @@ ThePreStubPatchLabel: PROLOG_PUSH "{r0-r4,r7,r8,lr}" // Spill general argument registers, return address and PROLOG_STACK_SAVE_OFFSET r7, #20 // arbitrary register to keep stack aligned - vpush {d0-d7} // Spill floating point argument registers + PROLOG_VPUSH {d0-d7} // Spill floating point argument registers CHECK_STACK_ALIGNMENT @@ -550,8 +550,8 @@ ThePreStubPatchLabel: bl C_FUNC(NDirectImportWorker) mov r12, r0 - vpop {d0-d7} - pop {r0-r4,r7,r8,lr} + EPILOG_VPOP {d0-d7} + EPILOG_POP "{r0-r4,r7,r8,lr}" // If we got back from NDirectImportWorker, the MD has been successfully // linked. Proceed to execute the original DLL call. @@ -972,7 +972,7 @@ LOCAL_LABEL(stackProbe_loop): // pop the stack and restore original register state vldm sp, {d0-d7} free_stack SIZEOF__FloatArgumentRegisters + 4 - pop {r0-r3, r7,r8, lr} + EPILOG_POP "{r0-r3, r7,r8, lr}" PATCH_LABEL VirtualMethodFixupPatchLabel @@ -1060,13 +1060,13 @@ LOCAL_LABEL(stackProbe_loop): PROLOG_PUSH "{r0-r1, r7,r8, r11, lr}" // save integer return value PROLOG_STACK_SAVE_OFFSET r7, #8 - vpush {d0-d3} // floating point return value + PROLOG_VPUSH {d0-d3} // floating point return value CHECK_STACK_ALIGNMENT bl C_FUNC(JIT_RareDisableHelperWorker) - vpop {d0-d3} + EPILOG_VPOP {d0-d3} EPILOG_POP "{r0-r1, r7,r8, r11, pc}" NESTED_END JIT_RareDisableHelper, _TEXT @@ -1193,8 +1193,8 @@ LOCAL_LABEL(ThrowIndexOutOfRangeException): // r12 = array->GetArrayElementTypeHandle() // NESTED_ENTRY JIT_Stelem_Ref_NotExactMatch, _TEXT, NoHandler - push {lr} - push {r0-r2} + PROLOG_PUSH {lr} + PROLOG_PUSH {r0-r2} CHECK_STACK_ALIGNMENT @@ -1213,8 +1213,8 @@ LOCAL_LABEL(NeedFrame): bl C_FUNC(ArrayStoreCheck) // ArrayStoreCheck(&val, &array) LOCAL_LABEL(DoWrite): - pop {r0-r2} - pop {lr} + EPILOG_POP {r0-r2} + EPILOG_POP {lr} b C_FUNC(JIT_Stelem_DoWrite) NESTED_END JIT_Stelem_Ref_NotExactMatch, _TEXT @@ -1410,13 +1410,13 @@ g_rgWriteBarrierDescriptors: NESTED_ENTRY DelayLoad_MethodCall_FakeProlog, _TEXT, NoHandler // Match what the lazy thunk has pushed. The actual method arguments will be spilled later. - push {r1-r3} + PROLOG_PUSH {r1-r3} // This is where execution really starts. DelayLoad_MethodCall: .global DelayLoad_MethodCall - push {r0} + PROLOG_PUSH {r0} PROLOG_WITH_TRANSITION_BLOCK 0x0, 1, DoNotPushArgRegs @@ -1454,13 +1454,13 @@ DelayLoad_MethodCall: NESTED_ENTRY DelayLoad_Helper\suffix\()_FakeProlog, _TEXT, NoHandler // Match what the lazy thunk has pushed. The actual method arguments will be spilled later. - push {r1-r3} + PROLOG_PUSH {r1-r3} // This is where execution really starts. DelayLoad_Helper\suffix: .global DelayLoad_Helper\suffix - push {r0} + PROLOG_PUSH {r0} PROLOG_WITH_TRANSITION_BLOCK 0x4, 0, DoNotPushArgRegs |