summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCStreamer.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-06-20 20:35:47 +0000
committerReid Kleckner <reid@kleckner.net>2014-06-20 20:35:47 +0000
commit4a01230db47e979146cf5784ca78bd7d6f802ac3 (patch)
tree3ba71b8e6754800a4e71d7b653d483dc08ce0604 /llvm/lib/MC/MCStreamer.cpp
parent4a4b357c90dc459568d1003913bcb2c6e4238c19 (diff)
downloadbcm5719-llvm-4a01230db47e979146cf5784ca78bd7d6f802ac3.tar.gz
bcm5719-llvm-4a01230db47e979146cf5784ca78bd7d6f802ac3.zip
Generate native unwind info on Win64
This patch enables LLVM to emit Win64-native unwind info rather than DWARF CFI. It handles all corner cases (I hope), including stack realignment. Because the unwind info is not flexible enough to describe stack frames with a gap of unknown size in the middle, such as the one caused by stack realignment, I modified register spilling code to place all spills into the fixed frame slots, so that they can be accessed relative to the frame pointer. Patch by Vadim Chugunov! Reviewed By: rnk Differential Revision: http://reviews.llvm.org/D4081 llvm-svn: 211399
Diffstat (limited to 'llvm/lib/MC/MCStreamer.cpp')
-rw-r--r--llvm/lib/MC/MCStreamer.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 7dccf0d751d..2a6097a7b43 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -526,6 +526,8 @@ void MCStreamer::EmitWin64EHSetFrame(unsigned Register, unsigned Offset) {
report_fatal_error("Frame register and offset already specified!");
if (Offset & 0x0F)
report_fatal_error("Misaligned frame pointer offset!");
+ if (Offset > 240)
+ report_fatal_error("Frame offset must be less than or equal to 240!");
MCSymbol *Label = getContext().CreateTempSymbol();
MCWin64EHInstruction Inst(Win64EH::UOP_SetFPReg, Label, Register, Offset);
EmitLabel(Label);
OpenPOWER on IntegriCloud