summaryrefslogtreecommitdiff
path: root/src/vm/arm/asmhelpers.S
diff options
context:
space:
mode:
authorJonghyun Park <parjong@gmail.com>2016-08-30 11:36:51 +0900
committerJan Kotas <jkotas@microsoft.com>2016-08-29 19:36:51 -0700
commitf4952b4da7e87f825e49907f36f78ceb5cc46e28 (patch)
tree697ddde1ce30c98158d49dc1ced8718dce82be69 /src/vm/arm/asmhelpers.S
parent4f60a817e3ea408a176c74ec0f0ea5e9f151dd61 (diff)
downloadcoreclr-f4952b4da7e87f825e49907f36f78ceb5cc46e28.tar.gz
coreclr-f4952b4da7e87f825e49907f36f78ceb5cc46e28.tar.bz2
coreclr-f4952b4da7e87f825e49907f36f78ceb5cc46e28.zip
Revises UMThunkStub unwindable in ARM/Linux (#6788)
In ARM/Linux, UMThunkStub currently pushes r0-r3 and r12 without .pad, which results in #6787. This commit revises the prolog and epilog of UMThunkStub to fix 6787. (In addition, personality routine is addes as ARM64/AMD64 already does.)
Diffstat (limited to 'src/vm/arm/asmhelpers.S')
-rw-r--r--src/vm/arm/asmhelpers.S11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/vm/arm/asmhelpers.S b/src/vm/arm/asmhelpers.S
index 55bdd9fcba..5717f392b4 100644
--- a/src/vm/arm/asmhelpers.S
+++ b/src/vm/arm/asmhelpers.S
@@ -309,10 +309,12 @@ LOCAL_LABEL(LNullThis):
//
// r12 = UMEntryThunk*
//
- NESTED_ENTRY UMThunkStub,_TEXT,NoHandler
+ NESTED_ENTRY UMThunkStub,_TEXT,UnhandledExceptionHandlerUnix
PROLOG_PUSH "{r4,r5,r7,r11,lr}"
- push {r0-r3,r12}
- PROLOG_STACK_SAVE_OFFSET r7, #28
+ PROLOG_STACK_SAVE_OFFSET r7, #8
+
+ alloc_stack 4 * 5
+ stm sp, {r0-r3,r12}
//GBLA UMThunkStub_HiddenArgOffest // offset of saved UMEntryThunk *
//GBLA UMThunkStub_StackArgsOffest // offset of original stack args
@@ -378,8 +380,7 @@ LOCAL_LABEL(UMThunkStub_PostCall):
mov r4, 0
str r4, [r5, #Thread__m_fPreemptiveGCDisabled]
- EPILOG_STACK_RESTORE_OFFSET r7, #28
- free_stack 4 * 5
+ EPILOG_STACK_RESTORE_OFFSET r7, #8
EPILOG_POP "{r4,r5,r7,r11,pc}"
LOCAL_LABEL(UMThunkStub_DoThreadSetup):