summaryrefslogtreecommitdiff
path: root/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp')
-rw-r--r--lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp31
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp b/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp
index d04511873b46..5b1357ae4a7b 100644
--- a/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp
+++ b/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp
@@ -8,6 +8,9 @@
//===----------------------------------------------------------------------===//
#include "X86MCTargetDesc.h"
+#include "X86TargetStreamer.h"
+#include "llvm/MC/MCAsmBackend.h"
+#include "llvm/MC/MCCodeEmitter.h"
#include "llvm/MC/MCWin64EH.h"
#include "llvm/MC/MCWinCOFFStreamer.h"
@@ -17,17 +20,18 @@ namespace {
class X86WinCOFFStreamer : public MCWinCOFFStreamer {
Win64EH::UnwindEmitter EHStreamer;
public:
- X86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB, MCCodeEmitter *CE,
- raw_pwrite_stream &OS)
- : MCWinCOFFStreamer(C, AB, *CE, OS) {}
+ X86WinCOFFStreamer(MCContext &C, std::unique_ptr<MCAsmBackend> AB,
+ std::unique_ptr<MCCodeEmitter> CE, raw_pwrite_stream &OS)
+ : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), OS) {}
- void EmitWinEHHandlerData() override;
+ void EmitWinEHHandlerData(SMLoc Loc) override;
void EmitWindowsUnwindTables() override;
+ void EmitCVFPOData(const MCSymbol *ProcSym, SMLoc Loc) override;
void FinishImpl() override;
};
-void X86WinCOFFStreamer::EmitWinEHHandlerData() {
- MCStreamer::EmitWinEHHandlerData();
+void X86WinCOFFStreamer::EmitWinEHHandlerData(SMLoc Loc) {
+ MCStreamer::EmitWinEHHandlerData(Loc);
// We have to emit the unwind info now, because this directive
// actually switches to the .xdata section!
@@ -40,6 +44,12 @@ void X86WinCOFFStreamer::EmitWindowsUnwindTables() {
EHStreamer.Emit(*this);
}
+void X86WinCOFFStreamer::EmitCVFPOData(const MCSymbol *ProcSym, SMLoc Loc) {
+ X86TargetStreamer *XTS =
+ static_cast<X86TargetStreamer *>(getTargetStreamer());
+ XTS->emitFPOData(ProcSym, Loc);
+}
+
void X86WinCOFFStreamer::FinishImpl() {
EmitFrames(nullptr);
EmitWindowsUnwindTables();
@@ -48,11 +58,14 @@ void X86WinCOFFStreamer::FinishImpl() {
}
}
-MCStreamer *llvm::createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB,
+MCStreamer *llvm::createX86WinCOFFStreamer(MCContext &C,
+ std::unique_ptr<MCAsmBackend> &&AB,
raw_pwrite_stream &OS,
- MCCodeEmitter *CE, bool RelaxAll,
+ std::unique_ptr<MCCodeEmitter> &&CE,
+ bool RelaxAll,
bool IncrementalLinkerCompatible) {
- X86WinCOFFStreamer *S = new X86WinCOFFStreamer(C, AB, CE, OS);
+ X86WinCOFFStreamer *S =
+ new X86WinCOFFStreamer(C, std::move(AB), std::move(CE), OS);
S->getAssembler().setRelaxAll(RelaxAll);
S->getAssembler().setIncrementalLinkerCompatible(IncrementalLinkerCompatible);
return S;