summaryrefslogtreecommitdiff
path: root/src/jit/unwindamd64.cpp
diff options
context:
space:
mode:
authorLubomir Litchev <llitchev@live.com>2015-03-13 08:34:17 -0700
committerLubomir Litchev <llitchev@live.com>2015-03-18 14:33:32 -0700
commit37a11baad9f51f72ef290bcb7c6d7874c26b12b8 (patch)
treeac2524c2aaf428be411ea5c712eda2390adb3cc2 /src/jit/unwindamd64.cpp
parent2570adcb8337aecf8e4bfbaf6e13dc04d2d3ae9d (diff)
downloadcoreclr-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.cpp10
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;