diff options
author | Lubomir Litchev <llitchev@live.com> | 2015-03-13 08:34:17 -0700 |
---|---|---|
committer | Lubomir Litchev <llitchev@live.com> | 2015-03-18 14:33:32 -0700 |
commit | 37a11baad9f51f72ef290bcb7c6d7874c26b12b8 (patch) | |
tree | ac2524c2aaf428be411ea5c712eda2390adb3cc2 /src/jit/unwindamd64.cpp | |
parent | 2570adcb8337aecf8e4bfbaf6e13dc04d2d3ae9d (diff) | |
download | coreclr-37a11baad9f51f72ef290bcb7c6d7874c26b12b8.tar.gz coreclr-37a11baad9f51f72ef290bcb7c6d7874c26b12b8.tar.bz2 coreclr-37a11baad9f51f72ef290bcb7c6d7874c26b12b8.zip |
Enable ETW_EBP_FRAMED flag on System V systems.
Enable the ETW_EBP_FRAMED flag on System V systems to allow for using
frame pointer (RBP) for mostly all functions.
The change includes:
1. Removing RBP from all the lists of registers that the RA uses to assign
to tmps/vars/etc.
2. Enable generation of unwind info for pushing of REG_FPBASE even if not included in callee-save list
of registers.
3 Fixed a conservative assert - for System V systems stack offset for reg
passed argument can be 0 or even positive.
Diffstat (limited to 'src/jit/unwindamd64.cpp')
-rw-r--r-- | src/jit/unwindamd64.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/jit/unwindamd64.cpp b/src/jit/unwindamd64.cpp index cf83ed3015..644d8749d7 100644 --- a/src/jit/unwindamd64.cpp +++ b/src/jit/unwindamd64.cpp @@ -121,7 +121,15 @@ void Compiler::unwindPush(regNumber reg) unsigned int cbProlog = unwindGetCurrentOffset(func); noway_assert((BYTE)cbProlog == cbProlog); code->CodeOffset = (BYTE)cbProlog; - if (RBM_CALLEE_SAVED & genRegMask(reg)) + if ((RBM_CALLEE_SAVED & genRegMask(reg)) +#if ETW_EBP_FRAMED + // In case of ETW_EBP_FRAMED defined the REG_FPBASE (RBP) + // is excluded from the callee-save register list. + // Make sure the register gets PUSH unwind info in this case, + // since it is pushed as a frame register. + || (reg == REG_FPBASE) +#endif // ETW_EBP_FRAMED + ) { code->UnwindOp = UWOP_PUSH_NONVOL; code->OpInfo = (BYTE)reg; |