summaryrefslogtreecommitdiff
path: root/src/vm/arm64/asmhelpers.S
diff options
context:
space:
mode:
authorSteve MacLean <sdmaclea@qti.qualcomm.com>2017-03-01 17:16:23 -0500
committerJan Vorlicek <janvorli@microsoft.com>2017-03-01 23:16:23 +0100
commit7b8f9d6c8f5b196b8cf7da6f4c49bf4149f3e15a (patch)
treedb67d79c2a3496a028544fcdbdbcba72b76c5f42 /src/vm/arm64/asmhelpers.S
parentdc3626d4e6934fb02db038b527e665e310e33cd7 (diff)
downloadcoreclr-7b8f9d6c8f5b196b8cf7da6f4c49bf4149f3e15a.tar.gz
coreclr-7b8f9d6c8f5b196b8cf7da6f4c49bf4149f3e15a.tar.bz2
coreclr-7b8f9d6c8f5b196b8cf7da6f4c49bf4149f3e15a.zip
[Arm64/Unix] Fix stack unwinding (#9877)
This restore the functionality lost by #9866 w/o functional loss
Diffstat (limited to 'src/vm/arm64/asmhelpers.S')
-rw-r--r--src/vm/arm64/asmhelpers.S8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/vm/arm64/asmhelpers.S b/src/vm/arm64/asmhelpers.S
index b318ad9efa..ef6b5cfffe 100644
--- a/src/vm/arm64/asmhelpers.S
+++ b/src/vm/arm64/asmhelpers.S
@@ -909,7 +909,13 @@ NESTED_ENTRY CallEHFunclet, _TEXT, NoHandler
// X3 = address of the location where the SP of funclet's caller (i.e. this helper) should be saved.
//
- PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -96
+ // Using below prolog instead of PROLOG_SAVE_REG_PAIR_INDEXED fp,lr, -96
+ // is intentional. Above statement would also emit instruction to save
+ // sp in fp. If sp is saved in fp in prolog then it is not expected that fp can change in the body
+ // of method. However, this method needs to be able to change fp before calling funclet.
+ // This is required to access locals in funclet.
+ PROLOG_SAVE_REG_PAIR_INDEXED x29, lr, -96
+
// Spill callee saved registers
PROLOG_SAVE_REG_PAIR x19, x20, 16
PROLOG_SAVE_REG_PAIR x21, x22, 32