diff options
author | Steve MacLean <sdmaclea@qti.qualcomm.com> | 2017-03-01 17:16:23 -0500 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2017-03-01 23:16:23 +0100 |
commit | 7b8f9d6c8f5b196b8cf7da6f4c49bf4149f3e15a (patch) | |
tree | db67d79c2a3496a028544fcdbdbcba72b76c5f42 /src/vm/arm64/asmhelpers.S | |
parent | dc3626d4e6934fb02db038b527e665e310e33cd7 (diff) | |
download | coreclr-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.S | 8 |
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 |