diff options
author | Charles Davis <cdavis@mines.edu> | 2011-05-19 17:46:39 +0000 |
---|---|---|
committer | Charles Davis <cdavis@mines.edu> | 2011-05-19 17:46:39 +0000 |
commit | 440596ffe5bb77a202acb36d5eadd158976ff39a (patch) | |
tree | cbb72fd8800178e8645fc3cd25b91fbfdea7651e /lib/MC/MCStreamer.cpp | |
parent | 6635b04a4357caf6544cd0a7dbc4c107e7907a88 (diff) | |
download | llvm-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.cpp | 44 |
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(); } |