summaryrefslogtreecommitdiff
path: root/lib/MC/MCStreamer.cpp
diff options
context:
space:
mode:
authorCharles Davis <cdavis@mines.edu>2011-05-19 17:46:39 +0000
committerCharles Davis <cdavis@mines.edu>2011-05-19 17:46:39 +0000
commit440596ffe5bb77a202acb36d5eadd158976ff39a (patch)
treecbb72fd8800178e8645fc3cd25b91fbfdea7651e /lib/MC/MCStreamer.cpp
parent6635b04a4357caf6544cd0a7dbc4c107e7907a88 (diff)
downloadllvm-440596ffe5bb77a202acb36d5eadd158976ff39a.tar.gz
llvm-440596ffe5bb77a202acb36d5eadd158976ff39a.tar.bz2
llvm-440596ffe5bb77a202acb36d5eadd158976ff39a.tar.xz
Turns out GAS does have Win64 EH directives. (It also supports WinCE EH.) Make
ours compatible with GAS. In retrospect, I should have emailed binutils about this earlier. Thanks to Kai Tietz for pointing out that GAS already had SEH directives. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131652 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCStreamer.cpp')
-rw-r--r--lib/MC/MCStreamer.cpp44
1 files changed, 22 insertions, 22 deletions
diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp
index 4163198e39..fc09369ae2 100644
--- a/lib/MC/MCStreamer.cpp
+++ b/lib/MC/MCStreamer.cpp
@@ -321,14 +321,13 @@ void MCStreamer::EnsureValidW64UnwindInfo() {
report_fatal_error("No open Win64 EH frame function!");
}
-void MCStreamer::EmitWin64EHStartProc(MCSymbol *Symbol, MCSymbol *EHandler) {
+void MCStreamer::EmitWin64EHStartProc(MCSymbol *Symbol) {
MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
if (CurFrame && !CurFrame->End)
report_fatal_error("Starting a function before ending the previous one!");
MCWin64EHUnwindInfo Frame;
Frame.Begin = getContext().CreateTempSymbol();
Frame.Function = Symbol;
- Frame.ExceptionHandler = EHandler;
EmitLabel(Frame.Begin);
setCurrentW64UnwindInfo(&Frame);
}
@@ -342,8 +341,7 @@ void MCStreamer::EmitWin64EHEndProc() {
EmitLabel(CurFrame->End);
}
-void MCStreamer::EmitWin64EHStartChained()
-{
+void MCStreamer::EmitWin64EHStartChained() {
EnsureValidW64UnwindInfo();
MCWin64EHUnwindInfo Frame;
MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
@@ -354,8 +352,7 @@ void MCStreamer::EmitWin64EHStartChained()
setCurrentW64UnwindInfo(&Frame);
}
-void MCStreamer::EmitWin64EHEndChained()
-{
+void MCStreamer::EmitWin64EHEndChained() {
EnsureValidW64UnwindInfo();
MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
if (!CurFrame->ChainedParent)
@@ -365,50 +362,53 @@ void MCStreamer::EmitWin64EHEndChained()
CurrentW64UnwindInfo = CurFrame->ChainedParent;
}
-void MCStreamer::EmitWin64EHUnwindOnly()
-{
+void MCStreamer::EmitWin64EHHandler(const MCSymbol *Sym, bool Unwind,
+ bool Except) {
+ EnsureValidW64UnwindInfo();
+ MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
+ CurFrame->ExceptionHandler = Sym;
+ if (Unwind)
+ CurFrame->UnwindOnly = true;
+ else if (!Except)
+ report_fatal_error("Don't know what kind of handler this is!");
+}
+
+void MCStreamer::EmitWin64EHHandlerData() {
errs() << "Not implemented yet\n";
abort();
}
-void MCStreamer::EmitWin64EHLsda(const MCSymbol *Sym, int64_t Size)
-{
+void MCStreamer::EmitWin64EHPushReg(int64_t Register) {
errs() << "Not implemented yet\n";
abort();
}
-void MCStreamer::EmitWin64EHPushReg(int64_t Register)
-{
+void MCStreamer::EmitWin64EHSetFrame(int64_t Register, int64_t Offset) {
errs() << "Not implemented yet\n";
abort();
}
-void MCStreamer::EmitWin64EHSetFrame(int64_t Register, int64_t Offset)
-{
+void MCStreamer::EmitWin64EHAllocStack(int64_t Size) {
errs() << "Not implemented yet\n";
abort();
}
-void MCStreamer::EmitWin64EHAllocStack(int64_t Size)
-{
+void MCStreamer::EmitWin64EHSaveReg(int64_t Register, int64_t Offset) {
errs() << "Not implemented yet\n";
abort();
}
-void MCStreamer::EmitWin64EHSaveReg(int64_t Register, int64_t Offset)
-{
+void MCStreamer::EmitWin64EHSaveXMM(int64_t Register, int64_t Offset) {
errs() << "Not implemented yet\n";
abort();
}
-void MCStreamer::EmitWin64EHPushFrame(bool Code)
-{
+void MCStreamer::EmitWin64EHPushFrame(bool Code) {
errs() << "Not implemented yet\n";
abort();
}
-void MCStreamer::EmitWin64EHEndProlog()
-{
+void MCStreamer::EmitWin64EHEndProlog() {
errs() << "Not implemented yet\n";
abort();
}