diff options
author | Lang Hames <lhames@gmail.com> | 2017-10-11 01:57:21 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2017-10-11 01:57:21 +0000 |
commit | 02d330548d07cfbbb7cd496c94a514802527dfeb (patch) | |
tree | 60e57bf4af3cfd30f61c5f4b4349aa2f0aef197f /llvm/lib/MC | |
parent | 6b394caaf1c84ecd73469eacebba9453f9772552 (diff) | |
download | bcm5719-llvm-02d330548d07cfbbb7cd496c94a514802527dfeb.tar.gz bcm5719-llvm-02d330548d07cfbbb7cd496c94a514802527dfeb.zip |
[MC] Have MCObjectStreamer take its MCAsmBackend argument via unique_ptr.
MCObjectStreamer owns its MCAsmBackend -- this fixes the types to reflect that,
and allows us to remove another instance of MCObjectStreamer's weird "holding
ownership via someone else's reference" trick.
llvm-svn: 315410
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r-- | llvm/lib/MC/MCELFStreamer.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/MC/MCMachOStreamer.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/MC/MCObjectStreamer.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/MC/MCWasmStreamer.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/MC/MCWinCOFFStreamer.cpp | 5 |
5 files changed, 28 insertions, 17 deletions
diff --git a/llvm/lib/MC/MCELFStreamer.cpp b/llvm/lib/MC/MCELFStreamer.cpp index 76976cab466..4fdbcd7511c 100644 --- a/llvm/lib/MC/MCELFStreamer.cpp +++ b/llvm/lib/MC/MCELFStreamer.cpp @@ -39,6 +39,11 @@ using namespace llvm; +MCELFStreamer::MCELFStreamer(MCContext &Context, + std::unique_ptr<MCAsmBackend> TAB, + raw_pwrite_stream &OS, MCCodeEmitter *Emitter) + : MCObjectStreamer(Context, std::move(TAB), OS, Emitter) {} + bool MCELFStreamer::isBundleLocked() const { return getCurrentSectionOnly()->isBundleLocked(); } @@ -639,10 +644,11 @@ void MCELFStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, llvm_unreachable("ELF doesn't support this directive"); } -MCStreamer *llvm::createELFStreamer(MCContext &Context, MCAsmBackend &MAB, +MCStreamer *llvm::createELFStreamer(MCContext &Context, + std::unique_ptr<MCAsmBackend> &&MAB, raw_pwrite_stream &OS, MCCodeEmitter *CE, bool RelaxAll) { - MCELFStreamer *S = new MCELFStreamer(Context, MAB, OS, CE); + MCELFStreamer *S = new MCELFStreamer(Context, std::move(MAB), OS, CE); if (RelaxAll) S->getAssembler().setRelaxAll(true); return S; diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp index 674c7b9bf61..293b87d4177 100644 --- a/llvm/lib/MC/MCMachOStreamer.cpp +++ b/llvm/lib/MC/MCMachOStreamer.cpp @@ -62,10 +62,12 @@ private: void EmitDataRegionEnd(); public: - MCMachOStreamer(MCContext &Context, MCAsmBackend &MAB, raw_pwrite_stream &OS, - MCCodeEmitter *Emitter, bool DWARFMustBeAtTheEnd, bool label) - : MCObjectStreamer(Context, MAB, OS, Emitter), LabelSections(label), - DWARFMustBeAtTheEnd(DWARFMustBeAtTheEnd), CreatedADWARFSection(false) {} + MCMachOStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB, + raw_pwrite_stream &OS, MCCodeEmitter *Emitter, + bool DWARFMustBeAtTheEnd, bool label) + : MCObjectStreamer(Context, std::move(MAB), OS, Emitter), + LabelSections(label), DWARFMustBeAtTheEnd(DWARFMustBeAtTheEnd), + CreatedADWARFSection(false) {} /// state management void reset() override { @@ -483,11 +485,12 @@ void MCMachOStreamer::FinishImpl() { this->MCObjectStreamer::FinishImpl(); } -MCStreamer *llvm::createMachOStreamer(MCContext &Context, MCAsmBackend &MAB, +MCStreamer *llvm::createMachOStreamer(MCContext &Context, + std::unique_ptr<MCAsmBackend> &&MAB, raw_pwrite_stream &OS, MCCodeEmitter *CE, bool RelaxAll, bool DWARFMustBeAtTheEnd, bool LabelSections) { - MCMachOStreamer *S = new MCMachOStreamer(Context, MAB, OS, CE, + MCMachOStreamer *S = new MCMachOStreamer(Context, std::move(MAB), OS, CE, DWARFMustBeAtTheEnd, LabelSections); const Triple &TT = Context.getObjectFileInfo()->getTargetTriple(); if (TT.isOSDarwin()) { diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index 46d57265d85..ba45d24fd08 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -25,16 +25,16 @@ #include "llvm/Support/TargetRegistry.h" using namespace llvm; -MCObjectStreamer::MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB, +MCObjectStreamer::MCObjectStreamer(MCContext &Context, + std::unique_ptr<MCAsmBackend> TAB, raw_pwrite_stream &OS, MCCodeEmitter *Emitter_) - : MCStreamer(Context), ObjectWriter(TAB.createObjectWriter(OS)), - Assembler(llvm::make_unique<MCAssembler>(Context, TAB, *Emitter_, - *ObjectWriter)), + : MCStreamer(Context), ObjectWriter(TAB->createObjectWriter(OS)), + TAB(std::move(TAB)), Assembler(llvm::make_unique<MCAssembler>( + Context, *this->TAB, *Emitter_, *ObjectWriter)), EmitEHFrame(true), EmitDebugFrame(false) {} MCObjectStreamer::~MCObjectStreamer() { - delete &Assembler->getBackend(); delete &Assembler->getEmitter(); } diff --git a/llvm/lib/MC/MCWasmStreamer.cpp b/llvm/lib/MC/MCWasmStreamer.cpp index be8a5c21610..fdf1be67e4e 100644 --- a/llvm/lib/MC/MCWasmStreamer.cpp +++ b/llvm/lib/MC/MCWasmStreamer.cpp @@ -200,10 +200,11 @@ void MCWasmStreamer::FinishImpl() { this->MCObjectStreamer::FinishImpl(); } -MCStreamer *llvm::createWasmStreamer(MCContext &Context, MCAsmBackend &MAB, +MCStreamer *llvm::createWasmStreamer(MCContext &Context, + std::unique_ptr<MCAsmBackend> &&MAB, raw_pwrite_stream &OS, MCCodeEmitter *CE, bool RelaxAll) { - MCWasmStreamer *S = new MCWasmStreamer(Context, MAB, OS, CE); + MCWasmStreamer *S = new MCWasmStreamer(Context, std::move(MAB), OS, CE); if (RelaxAll) S->getAssembler().setRelaxAll(true); return S; diff --git a/llvm/lib/MC/MCWinCOFFStreamer.cpp b/llvm/lib/MC/MCWinCOFFStreamer.cpp index dddafb9691c..c78a2e17c8d 100644 --- a/llvm/lib/MC/MCWinCOFFStreamer.cpp +++ b/llvm/lib/MC/MCWinCOFFStreamer.cpp @@ -41,9 +41,10 @@ using namespace llvm; #define DEBUG_TYPE "WinCOFFStreamer" -MCWinCOFFStreamer::MCWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB, +MCWinCOFFStreamer::MCWinCOFFStreamer(MCContext &Context, + std::unique_ptr<MCAsmBackend> MAB, MCCodeEmitter &CE, raw_pwrite_stream &OS) - : MCObjectStreamer(Context, MAB, OS, &CE), CurSymbol(nullptr) {} + : MCObjectStreamer(Context, std::move(MAB), OS, &CE), CurSymbol(nullptr) {} void MCWinCOFFStreamer::EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) { |