Index: clang/tools/driver/cc1as_main.cpp =================================================================== --- clang/tools/driver/cc1as_main.cpp +++ clang/tools/driver/cc1as_main.cpp @@ -29,6 +29,7 @@ #include "llvm/MC/MCContext.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCObjectFileInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCParser/MCAsmParser.h" #include "llvm/MC/MCParser/MCTargetAsmParser.h" #include "llvm/MC/MCRegisterInfo.h" @@ -426,11 +427,12 @@ MCTargetOptions MCOptions; std::unique_ptr MAB( TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions)); + std::unique_ptr OW = MAB->createObjectWriter(*Out); Triple T(Opts.Triple); Str.reset(TheTarget->createMCObjectStreamer( - T, Ctx, std::move(MAB), *Out, std::move(CE), *STI, Opts.RelaxAll, - Opts.IncrementalLinkerCompatible, + T, Ctx, std::move(MAB), std::move(OW), std::move(CE), *STI, + Opts.RelaxAll, Opts.IncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ true)); Str.get()->InitSections(Opts.NoExecStack); } Index: llvm/include/llvm/MC/MCELFStreamer.h =================================================================== --- llvm/include/llvm/MC/MCELFStreamer.h +++ llvm/include/llvm/MC/MCELFStreamer.h @@ -24,7 +24,8 @@ class MCELFStreamer : public MCObjectStreamer { public: MCELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter); + std::unique_ptr OW, + std::unique_ptr Emitter); ~MCELFStreamer() override = default; @@ -93,7 +94,7 @@ MCELFStreamer *createARMELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll, bool IsThumb); Index: llvm/include/llvm/MC/MCObjectStreamer.h =================================================================== --- llvm/include/llvm/MC/MCObjectStreamer.h +++ llvm/include/llvm/MC/MCObjectStreamer.h @@ -48,7 +48,7 @@ protected: MCObjectStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter); ~MCObjectStreamer(); Index: llvm/include/llvm/MC/MCWasmStreamer.h =================================================================== --- llvm/include/llvm/MC/MCWasmStreamer.h +++ llvm/include/llvm/MC/MCWasmStreamer.h @@ -15,6 +15,7 @@ #include "llvm/ADT/SmallPtrSet.h" #include "llvm/MC/MCDirectives.h" #include "llvm/MC/MCObjectStreamer.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/SectionKind.h" #include "llvm/Support/DataTypes.h" @@ -27,8 +28,10 @@ class MCWasmStreamer : public MCObjectStreamer { public: MCWasmStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter) - : MCObjectStreamer(Context, std::move(TAB), OS, std::move(Emitter)), + std::unique_ptr OW, + std::unique_ptr Emitter) + : MCObjectStreamer(Context, std::move(TAB), std::move(OW), + std::move(Emitter)), SeenIdent(false) {} ~MCWasmStreamer() override; Index: llvm/include/llvm/MC/MCWinCOFFStreamer.h =================================================================== --- llvm/include/llvm/MC/MCWinCOFFStreamer.h +++ llvm/include/llvm/MC/MCWinCOFFStreamer.h @@ -28,7 +28,8 @@ class MCWinCOFFStreamer : public MCObjectStreamer { public: MCWinCOFFStreamer(MCContext &Context, std::unique_ptr MAB, - std::unique_ptr CE, raw_pwrite_stream &OS); + std::unique_ptr CE, + std::unique_ptr OW); /// state management void reset() override { Index: llvm/include/llvm/Support/TargetRegistry.h =================================================================== --- llvm/include/llvm/Support/TargetRegistry.h +++ llvm/include/llvm/Support/TargetRegistry.h @@ -46,6 +46,7 @@ class MCInstPrinter; class MCInstrAnalysis; class MCInstrInfo; +class MCObjectWriter; class MCRegisterInfo; class MCRelocationInfo; class MCStreamer; @@ -86,18 +87,18 @@ MCStreamer *createELFStreamer(MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll); MCStreamer *createMachOStreamer(MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll, bool DWARFMustBeAtTheEnd, bool LabelSections = false); MCStreamer *createWasmStreamer(MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll); @@ -160,22 +161,22 @@ using ELFStreamerCtorTy = MCStreamer *(*)(const Triple &T, MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll); using MachOStreamerCtorTy = MCStreamer *(*)(MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll, bool DWARFMustBeAtTheEnd); using COFFStreamerCtorTy = MCStreamer *(*)(MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll, bool IncrementalLinkerCompatible); using WasmStreamerCtorTy = MCStreamer *(*)(const Triple &T, MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll); using NullTargetStreamerCtorTy = MCTargetStreamer *(*)(MCStreamer &S); using AsmTargetStreamerCtorTy = MCTargetStreamer *(*)( @@ -463,7 +464,7 @@ /// \param RelaxAll Relax all fixups? MCStreamer *createMCObjectStreamer(const Triple &T, MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, const MCSubtargetInfo &STI, bool RelaxAll, bool IncrementalLinkerCompatible, @@ -474,32 +475,35 @@ llvm_unreachable("Unknown object format"); case Triple::COFF: assert(T.isOSWindows() && "only Windows COFF is supported"); - S = COFFStreamerCtorFn(Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll, IncrementalLinkerCompatible); + S = COFFStreamerCtorFn(Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll, + IncrementalLinkerCompatible); break; case Triple::MachO: if (MachOStreamerCtorFn) - S = MachOStreamerCtorFn(Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll, DWARFMustBeAtTheEnd); + S = MachOStreamerCtorFn(Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll, + DWARFMustBeAtTheEnd); else - S = createMachOStreamer(Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll, DWARFMustBeAtTheEnd); + S = createMachOStreamer(Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll, + DWARFMustBeAtTheEnd); break; case Triple::ELF: if (ELFStreamerCtorFn) - S = ELFStreamerCtorFn(T, Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll); + S = ELFStreamerCtorFn(T, Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll); else - S = createELFStreamer(Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll); + S = createELFStreamer(Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll); break; case Triple::Wasm: if (WasmStreamerCtorFn) - S = WasmStreamerCtorFn(T, Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll); + S = WasmStreamerCtorFn(T, Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll); else - S = createWasmStreamer(Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll); + S = createWasmStreamer(Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll); break; } if (ObjectTargetStreamerCtorFn) Index: llvm/lib/CodeGen/LLVMTargetMachine.cpp =================================================================== --- llvm/lib/CodeGen/LLVMTargetMachine.cpp +++ llvm/lib/CodeGen/LLVMTargetMachine.cpp @@ -23,6 +23,7 @@ #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" #include "llvm/Support/CommandLine.h" @@ -166,8 +167,9 @@ Triple T(getTargetTriple().str()); AsmStreamer.reset(getTarget().createMCObjectStreamer( - T, Context, std::unique_ptr(MAB), Out, - std::unique_ptr(MCE), STI, Options.MCOptions.MCRelaxAll, + T, Context, std::unique_ptr(MAB), + MAB->createObjectWriter(Out), std::unique_ptr(MCE), STI, + Options.MCOptions.MCRelaxAll, Options.MCOptions.MCIncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ true)); break; @@ -241,7 +243,7 @@ const Triple &T = getTargetTriple(); std::unique_ptr AsmStreamer(getTarget().createMCObjectStreamer( - T, *Ctx, std::unique_ptr(MAB), Out, + T, *Ctx, std::unique_ptr(MAB), MAB->createObjectWriter(Out), std::unique_ptr(MCE), STI, Options.MCOptions.MCRelaxAll, Options.MCOptions.MCIncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ true)); Index: llvm/lib/MC/MCELFStreamer.cpp =================================================================== --- llvm/lib/MC/MCELFStreamer.cpp +++ llvm/lib/MC/MCELFStreamer.cpp @@ -41,9 +41,10 @@ MCELFStreamer::MCELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter) - : MCObjectStreamer(Context, std::move(TAB), OS, std::move(Emitter)) {} + : MCObjectStreamer(Context, std::move(TAB), std::move(OW), + std::move(Emitter)) {} bool MCELFStreamer::isBundleLocked() const { return getCurrentSectionOnly()->isBundleLocked(); @@ -647,11 +648,11 @@ MCStreamer *llvm::createELFStreamer(MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll) { MCELFStreamer *S = - new MCELFStreamer(Context, std::move(MAB), OS, std::move(CE)); + new MCELFStreamer(Context, std::move(MAB), std::move(OW), std::move(CE)); if (RelaxAll) S->getAssembler().setRelaxAll(true); return S; Index: llvm/lib/MC/MCMachOStreamer.cpp =================================================================== --- llvm/lib/MC/MCMachOStreamer.cpp +++ llvm/lib/MC/MCMachOStreamer.cpp @@ -24,6 +24,7 @@ #include "llvm/MC/MCLinkerOptimizationHint.h" #include "llvm/MC/MCObjectFileInfo.h" #include "llvm/MC/MCObjectStreamer.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCSectionMachO.h" #include "llvm/MC/MCStreamer.h" @@ -63,9 +64,11 @@ public: MCMachOStreamer(MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter, + std::unique_ptr OW, + std::unique_ptr Emitter, bool DWARFMustBeAtTheEnd, bool label) - : MCObjectStreamer(Context, std::move(MAB), OS, std::move(Emitter)), + : MCObjectStreamer(Context, std::move(MAB), std::move(OW), + std::move(Emitter)), LabelSections(label), DWARFMustBeAtTheEnd(DWARFMustBeAtTheEnd), CreatedADWARFSection(false) {} @@ -462,12 +465,12 @@ MCStreamer *llvm::createMachOStreamer(MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll, bool DWARFMustBeAtTheEnd, bool LabelSections) { MCMachOStreamer *S = - new MCMachOStreamer(Context, std::move(MAB), OS, std::move(CE), + new MCMachOStreamer(Context, std::move(MAB), std::move(OW), std::move(CE), DWARFMustBeAtTheEnd, LabelSections); const Triple &Target = Context.getObjectFileInfo()->getTargetTriple(); S->EmitVersionForTarget(Target); Index: llvm/lib/MC/MCObjectStreamer.cpp =================================================================== --- llvm/lib/MC/MCObjectStreamer.cpp +++ llvm/lib/MC/MCObjectStreamer.cpp @@ -25,12 +25,11 @@ MCObjectStreamer::MCObjectStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter) : MCStreamer(Context), - Assembler(llvm::make_unique(Context, std::move(TAB), - std::move(Emitter), - TAB->createObjectWriter(OS))), + Assembler(llvm::make_unique( + Context, std::move(TAB), std::move(Emitter), std::move(OW))), EmitEHFrame(true), EmitDebugFrame(false) {} MCObjectStreamer::~MCObjectStreamer() {} Index: llvm/lib/MC/MCWasmStreamer.cpp =================================================================== --- llvm/lib/MC/MCWasmStreamer.cpp +++ llvm/lib/MC/MCWasmStreamer.cpp @@ -198,11 +198,11 @@ MCStreamer *llvm::createWasmStreamer(MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll) { MCWasmStreamer *S = - new MCWasmStreamer(Context, std::move(MAB), OS, std::move(CE)); + new MCWasmStreamer(Context, std::move(MAB), std::move(OW), std::move(CE)); if (RelaxAll) S->getAssembler().setRelaxAll(true); return S; Index: llvm/lib/MC/MCWinCOFFStreamer.cpp =================================================================== --- llvm/lib/MC/MCWinCOFFStreamer.cpp +++ llvm/lib/MC/MCWinCOFFStreamer.cpp @@ -25,6 +25,7 @@ #include "llvm/MC/MCFragment.h" #include "llvm/MC/MCObjectFileInfo.h" #include "llvm/MC/MCObjectStreamer.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCSymbolCOFF.h" #include "llvm/MC/MCWinCOFFStreamer.h" @@ -44,8 +45,8 @@ MCWinCOFFStreamer::MCWinCOFFStreamer(MCContext &Context, std::unique_ptr MAB, std::unique_ptr CE, - raw_pwrite_stream &OS) - : MCObjectStreamer(Context, std::move(MAB), OS, std::move(CE)), + std::unique_ptr OW) + : MCObjectStreamer(Context, std::move(MAB), std::move(OW), std::move(CE)), CurSymbol(nullptr) {} void MCWinCOFFStreamer::EmitInstToData(const MCInst &Inst, Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.h =================================================================== --- llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.h +++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.h @@ -20,7 +20,7 @@ MCELFStreamer *createAArch64ELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll); } Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp =================================================================== --- llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp +++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp @@ -27,6 +27,7 @@ #include "llvm/MC/MCELFStreamer.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInst.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" @@ -87,9 +88,10 @@ friend class AArch64TargetELFStreamer; AArch64ELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter) - : MCELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)), + : MCELFStreamer(Context, std::move(TAB), std::move(OW), + std::move(Emitter)), MappingSymbolCounter(0), LastEMS(EMS_None) {} void ChangeSection(MCSection *Section, const MCExpr *Subsection) override { @@ -209,11 +211,11 @@ MCELFStreamer *createAArch64ELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll) { - AArch64ELFStreamer *S = - new AArch64ELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)); + AArch64ELFStreamer *S = new AArch64ELFStreamer( + Context, std::move(TAB), std::move(OW), std::move(Emitter)); if (RelaxAll) S->getAssembler().setRelaxAll(true); return S; Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp =================================================================== --- llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp +++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp @@ -20,6 +20,7 @@ #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCInstrAnalysis.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" @@ -103,30 +104,30 @@ static MCStreamer *createELFStreamer(const Triple &T, MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { - return createAArch64ELFStreamer(Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll); + return createAArch64ELFStreamer(Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll); } static MCStreamer *createMachOStreamer(MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll, bool DWARFMustBeAtTheEnd) { - return createMachOStreamer(Ctx, std::move(TAB), OS, std::move(Emitter), - RelaxAll, DWARFMustBeAtTheEnd, + return createMachOStreamer(Ctx, std::move(TAB), std::move(OW), + std::move(Emitter), RelaxAll, DWARFMustBeAtTheEnd, /*LabelSections*/ true); } static MCStreamer * createWinCOFFStreamer(MCContext &Ctx, std::unique_ptr &&TAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll, bool IncrementalLinkerCompatible) { - return createAArch64WinCOFFStreamer(Ctx, std::move(TAB), OS, + return createAArch64WinCOFFStreamer(Ctx, std::move(TAB), std::move(OW), std::move(Emitter), RelaxAll, IncrementalLinkerCompatible); } Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.h =================================================================== --- llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.h +++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.h @@ -35,7 +35,7 @@ MCWinCOFFStreamer *createAArch64WinCOFFStreamer( MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll, bool IncrementalLinkerCompatible); } // end llvm namespace Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp =================================================================== --- llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp +++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp @@ -10,6 +10,7 @@ #include "AArch64WinCOFFStreamer.h" #include "llvm/MC/MCAsmBackend.h" #include "llvm/MC/MCCodeEmitter.h" +#include "llvm/MC/MCObjectWriter.h" using namespace llvm; @@ -21,8 +22,8 @@ AArch64WinCOFFStreamer(MCContext &C, std::unique_ptr AB, std::unique_ptr CE, - raw_pwrite_stream &OS) - : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), OS) {} + std::unique_ptr OW) + : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), std::move(OW)) {} void FinishImpl() override; }; @@ -37,10 +38,10 @@ namespace llvm { MCWinCOFFStreamer *createAArch64WinCOFFStreamer( MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll, bool IncrementalLinkerCompatible) { auto *S = new AArch64WinCOFFStreamer(Context, std::move(MAB), - std::move(Emitter), OS); + std::move(Emitter), std::move(OW)); S->getAssembler().setIncrementalLinkerCompatible(IncrementalLinkerCompatible); return S; } Index: llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h =================================================================== --- llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h +++ llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.h @@ -23,17 +23,9 @@ class MCContext; class MCSubtargetInfo; -class AMDGPUELFStreamer : public MCELFStreamer { -public: - AMDGPUELFStreamer(const Triple &T, MCContext &Context, - std::unique_ptr MAB, raw_pwrite_stream &OS, - std::unique_ptr Emitter) - : MCELFStreamer(Context, std::move(MAB), OS, std::move(Emitter)) {} -}; - MCELFStreamer *createAMDGPUELFStreamer(const Triple &T, MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll); } // namespace llvm. Index: llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp =================================================================== --- llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp +++ llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFStreamer.cpp @@ -12,13 +12,28 @@ #include "llvm/BinaryFormat/ELF.h" #include "llvm/MC/MCAsmBackend.h" #include "llvm/MC/MCCodeEmitter.h" +#include "llvm/MC/MCObjectWriter.h" using namespace llvm; +namespace { + +class AMDGPUELFStreamer : public MCELFStreamer { +public: + AMDGPUELFStreamer(const Triple &T, MCContext &Context, + std::unique_ptr MAB, + std::unique_ptr OW, + std::unique_ptr Emitter) + : MCELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(Emitter)) {} +}; + +} + MCELFStreamer *llvm::createAMDGPUELFStreamer( const Triple &T, MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll) { - return new AMDGPUELFStreamer(T, Context, std::move(MAB), OS, + return new AMDGPUELFStreamer(T, Context, std::move(MAB), std::move(OW), std::move(Emitter)); } Index: llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp =================================================================== --- llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp +++ llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.cpp @@ -22,6 +22,7 @@ #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" @@ -81,10 +82,10 @@ static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { - return createAMDGPUELFStreamer(T, Context, std::move(MAB), OS, + return createAMDGPUELFStreamer(T, Context, std::move(MAB), std::move(OW), std::move(Emitter), RelaxAll); } Index: llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp =================================================================== --- llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp +++ llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp @@ -33,6 +33,7 @@ #include "llvm/MC/MCFragment.h" #include "llvm/MC/MCInst.h" #include "llvm/MC/MCInstPrinter.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCSectionELF.h" @@ -441,9 +442,9 @@ friend class ARMTargetELFStreamer; ARMELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter, + std::unique_ptr OW, std::unique_ptr Emitter, bool IsThumb) - : MCELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)), + : MCELFStreamer(Context, std::move(TAB), std::move(OW), std::move(Emitter)), IsThumb(IsThumb) { EHReset(); } @@ -1494,10 +1495,10 @@ MCELFStreamer *createARMELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll, bool IsThumb) { - ARMELFStreamer *S = new ARMELFStreamer(Context, std::move(TAB), OS, + ARMELFStreamer *S = new ARMELFStreamer(Context, std::move(TAB), std::move(OW), std::move(Emitter), IsThumb); // FIXME: This should eventually end up somewhere else where more // intelligent flag decisions can be made. For now we are just maintaining Index: llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h =================================================================== --- llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h +++ llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h @@ -81,7 +81,7 @@ // object file. MCStreamer *createARMWinCOFFStreamer(MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll, bool IncrementalLinkerCompatible); Index: llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp =================================================================== --- llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp +++ llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp @@ -21,6 +21,7 @@ #include "llvm/MC/MCELFStreamer.h" #include "llvm/MC/MCInstrAnalysis.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" @@ -205,21 +206,21 @@ static MCStreamer *createELFStreamer(const Triple &T, MCContext &Ctx, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { return createARMELFStreamer( - Ctx, std::move(MAB), OS, std::move(Emitter), false, + Ctx, std::move(MAB), std::move(OW), std::move(Emitter), false, (T.getArch() == Triple::thumb || T.getArch() == Triple::thumbeb)); } static MCStreamer * createARMMachOStreamer(MCContext &Ctx, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll, bool DWARFMustBeAtTheEnd) { - return createMachOStreamer(Ctx, std::move(MAB), OS, std::move(Emitter), false, - DWARFMustBeAtTheEnd); + return createMachOStreamer(Ctx, std::move(MAB), std::move(OW), + std::move(Emitter), false, DWARFMustBeAtTheEnd); } static MCInstPrinter *createARMMCInstPrinter(const Triple &T, Index: llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFStreamer.cpp =================================================================== --- llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFStreamer.cpp +++ llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFStreamer.cpp @@ -10,6 +10,7 @@ #include "ARMMCTargetDesc.h" #include "llvm/MC/MCAsmBackend.h" #include "llvm/MC/MCCodeEmitter.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCWinCOFFStreamer.h" using namespace llvm; @@ -18,8 +19,9 @@ class ARMWinCOFFStreamer : public MCWinCOFFStreamer { public: ARMWinCOFFStreamer(MCContext &C, std::unique_ptr AB, - std::unique_ptr CE, raw_pwrite_stream &OS) - : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), OS) {} + std::unique_ptr CE, + std::unique_ptr OW) + : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), std::move(OW)) {} void EmitAssemblerFlag(MCAssemblerFlag Flag) override; void EmitThumbFunc(MCSymbol *Symbol) override; @@ -48,10 +50,11 @@ MCStreamer *llvm::createARMWinCOFFStreamer( MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, std::unique_ptr &&Emitter, - bool RelaxAll, bool IncrementalLinkerCompatible) { - auto *S = - new ARMWinCOFFStreamer(Context, std::move(MAB), std::move(Emitter), OS); + std::unique_ptr &&OW, + std::unique_ptr &&Emitter, bool RelaxAll, + bool IncrementalLinkerCompatible) { + auto *S = new ARMWinCOFFStreamer(Context, std::move(MAB), std::move(Emitter), + std::move(OW)); S->getAssembler().setIncrementalLinkerCompatible(IncrementalLinkerCompatible); return S; } Index: llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.h =================================================================== --- llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.h +++ llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.h @@ -16,6 +16,7 @@ #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCELFStreamer.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectWriter.h" namespace llvm { @@ -27,16 +28,18 @@ public: AVRMCELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter) - : MCELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)), + : MCELFStreamer(Context, std::move(TAB), std::move(OW), + std::move(Emitter)), MCII(createAVRMCInstrInfo()) {} AVRMCELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, MCAssembler *Assembler) - : MCELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)), + : MCELFStreamer(Context, std::move(TAB), std::move(OW), + std::move(Emitter)), MCII(createAVRMCInstrInfo()) {} void EmitValueForModiferKind( @@ -46,7 +49,7 @@ MCStreamer *createAVRELFStreamer(Triple const &TT, MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr CE); } // end namespace llvm Index: llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.cpp =================================================================== --- llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.cpp +++ llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.cpp @@ -17,6 +17,7 @@ #include "llvm/MC/MCContext.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCSymbol.h" +#include "llvm/MC/MCObjectWriter.h" using namespace llvm; @@ -43,9 +44,10 @@ namespace llvm { MCStreamer *createAVRELFStreamer(Triple const &TT, MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr CE) { - return new AVRMCELFStreamer(Context, std::move(MAB), OS, std::move(CE)); + return new AVRMCELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(CE)); } } // end namespace llvm Index: llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp =================================================================== --- llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp +++ llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp @@ -70,11 +70,11 @@ static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { - return createELFStreamer(Context, std::move(MAB), OS, - std::move(Emitter), RelaxAll); + return createELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(Emitter), RelaxAll); } static MCTargetStreamer * Index: llvm/lib/Target/BPF/MCTargetDesc/BPFMCTargetDesc.cpp =================================================================== --- llvm/lib/Target/BPF/MCTargetDesc/BPFMCTargetDesc.cpp +++ llvm/lib/Target/BPF/MCTargetDesc/BPFMCTargetDesc.cpp @@ -52,10 +52,10 @@ static MCStreamer *createBPFMCStreamer(const Triple &T, MCContext &Ctx, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { - return createELFStreamer(Ctx, std::move(MAB), OS, std::move(Emitter), + return createELFStreamer(Ctx, std::move(MAB), std::move(OW), std::move(Emitter), RelaxAll); } Index: llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h =================================================================== --- llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h +++ llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h @@ -23,11 +23,11 @@ public: HexagonMCELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter); HexagonMCELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, MCAssembler *Assembler); @@ -43,7 +43,7 @@ MCStreamer *createHexagonELFStreamer(Triple const &TT, MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr CE); } // end namespace llvm Index: llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp =================================================================== --- llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp +++ llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp @@ -25,6 +25,7 @@ #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInst.h" #include "llvm/MC/MCObjectStreamer.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCSectionELF.h" #include "llvm/MC/MCStreamer.h" @@ -47,15 +48,15 @@ HexagonMCELFStreamer::HexagonMCELFStreamer( MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter) - : MCELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)), + std::unique_ptr OW, std::unique_ptr Emitter) + : MCELFStreamer(Context, std::move(TAB), std::move(OW), std::move(Emitter)), MCII(createHexagonMCInstrInfo()) {} HexagonMCELFStreamer::HexagonMCELFStreamer( MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter, + std::unique_ptr OW, std::unique_ptr Emitter, MCAssembler *Assembler) - : MCELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)), + : MCELFStreamer(Context, std::move(TAB), std::move(OW), std::move(Emitter)), MCII(createHexagonMCInstrInfo()) {} void HexagonMCELFStreamer::EmitInstruction(const MCInst &MCB, @@ -151,9 +152,10 @@ namespace llvm { MCStreamer *createHexagonELFStreamer(Triple const &TT, MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr CE) { - return new HexagonMCELFStreamer(Context, std::move(MAB), OS, std::move(CE)); + return new HexagonMCELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(CE)); } } // end namespace llvm Index: llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp =================================================================== --- llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp +++ llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp @@ -29,6 +29,7 @@ #include "llvm/MC/MCELFStreamer.h" #include "llvm/MC/MCInstrAnalysis.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" @@ -248,10 +249,10 @@ static MCStreamer *createMCStreamer(Triple const &T, MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { - return createHexagonELFStreamer(T, Context, std::move(MAB), OS, + return createHexagonELFStreamer(T, Context, std::move(MAB), std::move(OW), std::move(Emitter)); } Index: llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp =================================================================== --- llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp +++ llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp @@ -61,14 +61,14 @@ static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { if (!T.isOSBinFormatELF()) llvm_unreachable("OS not supported"); - return createELFStreamer(Context, std::move(MAB), OS, std::move(Emitter), - RelaxAll); + return createELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(Emitter), RelaxAll); } static MCInstPrinter *createLanaiMCInstPrinter(const Triple & /*T*/, Index: llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.h =================================================================== --- llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.h +++ llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.h @@ -34,7 +34,7 @@ public: MipsELFStreamer(MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter); /// Overriding this function allows us to add arbitrary behaviour before the @@ -67,7 +67,7 @@ MCELFStreamer *createMipsELFStreamer(MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll); } // end namespace llvm Index: llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.cpp =================================================================== --- llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.cpp +++ llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.cpp @@ -16,6 +16,7 @@ #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCInst.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCSymbolELF.h" #include "llvm/Support/Casting.h" @@ -23,9 +24,10 @@ MipsELFStreamer::MipsELFStreamer(MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter) - : MCELFStreamer(Context, std::move(MAB), OS, std::move(Emitter)) { + : MCELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(Emitter)) { RegInfoRecord = new MipsRegInfoRecord(this, Context); MipsOptionRecords.push_back( std::unique_ptr(RegInfoRecord)); @@ -91,7 +93,8 @@ MCELFStreamer *llvm::createMipsELFStreamer( MCContext &Context, std::unique_ptr MAB, - raw_pwrite_stream &OS, std::unique_ptr Emitter, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll) { - return new MipsELFStreamer(Context, std::move(MAB), OS, std::move(Emitter)); + return new MipsELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(Emitter)); } Index: llvm/lib/Target/Mips/MCTargetDesc/MipsMCNaCl.h =================================================================== --- llvm/lib/Target/Mips/MCTargetDesc/MipsMCNaCl.h +++ llvm/lib/Target/Mips/MCTargetDesc/MipsMCNaCl.h @@ -24,7 +24,7 @@ // This function creates an MCELFStreamer for Mips NaCl. MCELFStreamer *createMipsNaClELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll); } Index: llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp =================================================================== --- llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp +++ llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp @@ -23,6 +23,7 @@ #include "llvm/MC/MCELFStreamer.h" #include "llvm/MC/MCInstrAnalysis.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" #include "llvm/MC/MCSymbol.h" @@ -93,15 +94,15 @@ static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context, std::unique_ptr &&MAB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&Emitter, bool RelaxAll) { MCStreamer *S; if (!T.isOSNaCl()) - S = createMipsELFStreamer(Context, std::move(MAB), OS, std::move(Emitter), - RelaxAll); + S = createMipsELFStreamer(Context, std::move(MAB), std::move(OW), + std::move(Emitter), RelaxAll); else - S = createMipsNaClELFStreamer(Context, std::move(MAB), OS, + S = createMipsNaClELFStreamer(Context, std::move(MAB), std::move(OW), std::move(Emitter), RelaxAll); return S; } Index: llvm/lib/Target/Mips/MCTargetDesc/MipsNaClELFStreamer.cpp =================================================================== --- llvm/lib/Target/Mips/MCTargetDesc/MipsNaClELFStreamer.cpp +++ llvm/lib/Target/Mips/MCTargetDesc/MipsNaClELFStreamer.cpp @@ -25,6 +25,7 @@ #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCELFStreamer.h" #include "llvm/MC/MCInst.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/Support/ErrorHandling.h" #include @@ -43,9 +44,10 @@ class MipsNaClELFStreamer : public MipsELFStreamer { public: MipsNaClELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter) - : MipsELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)) {} + : MipsELFStreamer(Context, std::move(TAB), std::move(OW), + std::move(Emitter)) {} ~MipsNaClELFStreamer() override = default; @@ -260,11 +262,11 @@ MCELFStreamer *createMipsNaClELFStreamer(MCContext &Context, std::unique_ptr TAB, - raw_pwrite_stream &OS, + std::unique_ptr OW, std::unique_ptr Emitter, bool RelaxAll) { - MipsNaClELFStreamer *S = - new MipsNaClELFStreamer(Context, std::move(TAB), OS, std::move(Emitter)); + MipsNaClELFStreamer *S = new MipsNaClELFStreamer( + Context, std::move(TAB), std::move(OW), std::move(Emitter)); if (RelaxAll) S->getAssembler().setRelaxAll(true); Index: llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h =================================================================== --- llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h +++ llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h @@ -96,7 +96,7 @@ /// Takes ownership of \p AB and \p CE. MCStreamer *createX86WinCOFFStreamer(MCContext &C, std::unique_ptr &&AB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll, bool IncrementalLinkerCompatible); Index: llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp =================================================================== --- llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp +++ llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp @@ -11,6 +11,7 @@ #include "X86TargetStreamer.h" #include "llvm/MC/MCAsmBackend.h" #include "llvm/MC/MCCodeEmitter.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCWin64EH.h" #include "llvm/MC/MCWinCOFFStreamer.h" @@ -21,8 +22,9 @@ Win64EH::UnwindEmitter EHStreamer; public: X86WinCOFFStreamer(MCContext &C, std::unique_ptr AB, - std::unique_ptr CE, raw_pwrite_stream &OS) - : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), OS) {} + std::unique_ptr CE, + std::unique_ptr OW) + : MCWinCOFFStreamer(C, std::move(AB), std::move(CE), std::move(OW)) {} void EmitWinEHHandlerData(SMLoc Loc) override; void EmitWindowsUnwindTables() override; @@ -60,12 +62,12 @@ MCStreamer *llvm::createX86WinCOFFStreamer(MCContext &C, std::unique_ptr &&AB, - raw_pwrite_stream &OS, + std::unique_ptr &&OW, std::unique_ptr &&CE, bool RelaxAll, bool IncrementalLinkerCompatible) { X86WinCOFFStreamer *S = - new X86WinCOFFStreamer(C, std::move(AB), std::move(CE), OS); + new X86WinCOFFStreamer(C, std::move(AB), std::move(CE), std::move(OW)); S->getAssembler().setRelaxAll(RelaxAll); S->getAssembler().setIncrementalLinkerCompatible(IncrementalLinkerCompatible); return S; Index: llvm/tools/dsymutil/DwarfLinker.cpp =================================================================== --- llvm/tools/dsymutil/DwarfLinker.cpp +++ llvm/tools/dsymutil/DwarfLinker.cpp @@ -52,6 +52,7 @@ #include "llvm/MC/MCDwarf.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCObjectFileInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCStreamer.h" @@ -882,9 +883,9 @@ MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); MS = TheTarget->createMCObjectStreamer( - TheTriple, *MC, std::unique_ptr(MAB), OutFile, - std::unique_ptr(MCE), *MSTI, MCOptions.MCRelaxAll, - MCOptions.MCIncrementalLinkerCompatible, + TheTriple, *MC, std::unique_ptr(MAB), + MAB->createObjectWriter(OutFile), std::unique_ptr(MCE), + *MSTI, MCOptions.MCRelaxAll, MCOptions.MCIncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ false); if (!MS) return error("no object streamer for target " + TripleName, Context); Index: llvm/tools/llvm-dwp/llvm-dwp.cpp =================================================================== --- llvm/tools/llvm-dwp/llvm-dwp.cpp +++ llvm/tools/llvm-dwp/llvm-dwp.cpp @@ -24,6 +24,7 @@ #include "llvm/MC/MCContext.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCObjectFileInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCTargetOptionsCommandFlags.inc" @@ -701,9 +702,9 @@ MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); std::unique_ptr MS(TheTarget->createMCObjectStreamer( - TheTriple, MC, std::unique_ptr(MAB), OutFile, - std::unique_ptr(MCE), *MSTI, MCOptions.MCRelaxAll, - MCOptions.MCIncrementalLinkerCompatible, + TheTriple, MC, std::unique_ptr(MAB), + MAB->createObjectWriter(OutFile), std::unique_ptr(MCE), + *MSTI, MCOptions.MCRelaxAll, MCOptions.MCIncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ false)); if (!MS) return error("no object streamer for target " + TripleName, Context); Index: llvm/tools/llvm-mc/llvm-mc.cpp =================================================================== --- llvm/tools/llvm-mc/llvm-mc.cpp +++ llvm/tools/llvm-mc/llvm-mc.cpp @@ -20,6 +20,7 @@ #include "llvm/MC/MCInstPrinter.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCObjectFileInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCParser/AsmLexer.h" #include "llvm/MC/MCParser/MCTargetAsmParser.h" #include "llvm/MC/MCRegisterInfo.h" @@ -467,9 +468,9 @@ MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions); Str.reset(TheTarget->createMCObjectStreamer( - TheTriple, Ctx, std::unique_ptr(MAB), *OS, - std::unique_ptr(CE), *STI, MCOptions.MCRelaxAll, - MCOptions.MCIncrementalLinkerCompatible, + TheTriple, Ctx, std::unique_ptr(MAB), + MAB->createObjectWriter(*OS), std::unique_ptr(CE), *STI, + MCOptions.MCRelaxAll, MCOptions.MCIncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ false)); if (NoExecStack) Str->InitSections(true); Index: llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp =================================================================== --- llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp +++ llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp @@ -22,6 +22,7 @@ #include "llvm/MC/MCDwarf.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCObjectFileInfo.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" @@ -400,9 +401,9 @@ Stream = make_unique(FileBytes); MS = TheTarget->createMCObjectStreamer( - TheTriple, *MC, std::unique_ptr(MAB), *Stream, - std::unique_ptr(MCE), *MSTI, MCOptions.MCRelaxAll, - MCOptions.MCIncrementalLinkerCompatible, + TheTriple, *MC, std::unique_ptr(MAB), + MAB->createObjectWriter(*Stream), std::unique_ptr(MCE), + *MSTI, MCOptions.MCRelaxAll, MCOptions.MCIncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ false); if (!MS) return make_error("no object streamer for target " +