]> granicus.if.org Git - llvm/commitdiff
[MC] Thread unique_ptr<MCObjectWriter> through the create.*ObjectWriter
authorLang Hames <lhames@gmail.com>
Tue, 10 Oct 2017 16:28:07 +0000 (16:28 +0000)
committerLang Hames <lhames@gmail.com>
Tue, 10 Oct 2017 16:28:07 +0000 (16:28 +0000)
functions.

This makes the ownership of the resulting MCObjectWriter clear, and allows us
to remove one instance of MCObjectStreamer's bizarre "holding ownership via
someone else's reference" trick.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315327 91177308-0d34-0410-b5e6-96231b3b80d8

55 files changed:
include/llvm/MC/MCAsmBackend.h
include/llvm/MC/MCELFObjectWriter.h
include/llvm/MC/MCMachObjectWriter.h
include/llvm/MC/MCObjectStreamer.h
include/llvm/MC/MCWasmObjectWriter.h
include/llvm/MC/MCWinCOFFObjectWriter.h
lib/MC/ELFObjectWriter.cpp
lib/MC/MCELFStreamer.cpp
lib/MC/MCObjectStreamer.cpp
lib/MC/MachObjectWriter.cpp
lib/MC/WasmObjectWriter.cpp
lib/MC/WinCOFFObjectWriter.cpp
lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp
lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.h
lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp
lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.h
lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h
lib/Target/ARM/MCTargetDesc/ARMAsmBackendELF.h
lib/Target/ARM/MCTargetDesc/ARMAsmBackendWinCOFF.h
lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h
lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp
lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp
lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp
lib/Target/BPF/MCTargetDesc/BPFMCTargetDesc.h
lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp
lib/Target/Hexagon/MCTargetDesc/HexagonELFObjectWriter.cpp
lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.h
lib/Target/Lanai/MCTargetDesc/LanaiAsmBackend.cpp
lib/Target/Lanai/MCTargetDesc/LanaiELFObjectWriter.cpp
lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.h
lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
lib/Target/Mips/MCTargetDesc/MipsAsmBackend.h
lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h
lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h
lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp
lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp
lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.h
lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp
lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp
lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.h
lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h
lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp

index 5a8e29d08ad236ffad154967cf7d8d542cf873dd..e756399720bd6606ed919c97fb6a712e35bb0955 100644 (file)
@@ -46,7 +46,8 @@ public:
 
   /// Create a new MCObjectWriter instance for use by the assembler backend to
   /// emit the final object file.
-  virtual MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const = 0;
+  virtual std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const = 0;
 
   /// \name Target Fixup Interfaces
   /// @{
index c0f21840cd1383337c47ed217c3db4a88ee1345f..fd8d118ccdc5ede397ca02436a91712756fed15f 100644 (file)
@@ -137,7 +137,7 @@ public:
 /// \param MOTW - The target specific ELF writer subclass.
 /// \param OS - The stream to write to.
 /// \returns The constructed object writer.
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
                       raw_pwrite_stream &OS, bool IsLittleEndian);
 
index 6e7b9bcc03acadb11dfa4f63e5b198ada3b6e8c3..594869f74632d7d9f368429e7c76f9bb354520d8 100644 (file)
@@ -270,7 +270,7 @@ public:
 /// \param MOTW - The target specific Mach-O writer subclass.
 /// \param OS - The stream to write to.
 /// \returns The constructed object writer.
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 createMachObjectWriter(std::unique_ptr<MCMachObjectTargetWriter> MOTW,
                        raw_pwrite_stream &OS, bool IsLittleEndian);
 
index efe44d1f010cbc25e7abbf28bedb269ada94e159..f194f03eb7f9140a901f77e084af91c012a6d446 100644 (file)
@@ -34,6 +34,7 @@ class raw_pwrite_stream;
 /// to that file format or custom semantics expected by the object writer
 /// implementation.
 class MCObjectStreamer : public MCStreamer {
+  std::unique_ptr<MCObjectWriter> ObjectWriter;
   std::unique_ptr<MCAssembler> Assembler;
   MCSection::iterator CurInsertionPoint;
   bool EmitEHFrame;
index 5ddb18b8e3889594a9f38b98bac7a1a7420aa530..a4d5eb857b393ad77558c7a84fbb662ce351e63d 100644 (file)
@@ -44,7 +44,7 @@ public:
 /// \param MOTW - The target specific Wasm writer subclass.
 /// \param OS - The stream to write to.
 /// \returns The constructed object writer.
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 createWasmObjectWriter(std::unique_ptr<MCWasmObjectTargetWriter> MOTW,
                        raw_pwrite_stream &OS);
 
index ed017fff57b79503b6c633541f5db348306ae0b0..3234bd93cad0ad6bf7de3f8539a3a39bc565aa75 100644 (file)
@@ -44,7 +44,7 @@ class raw_pwrite_stream;
   /// \param MOTW - The target specific WinCOFF writer subclass.
   /// \param OS - The stream to write to.
   /// \returns The constructed object writer.
-  MCObjectWriter *
+  std::unique_ptr<MCObjectWriter>
   createWinCOFFObjectWriter(std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW,
                             raw_pwrite_stream &OS);
 } // end namespace llvm
index 795c21f08b9968a34ec5363369242ced1045a955..e11eaaa30603c401b8dcac534f39ecf127654185 100644 (file)
@@ -1387,8 +1387,9 @@ bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
                                                                 InSet, IsPCRel);
 }
 
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 llvm::createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
                             raw_pwrite_stream &OS, bool IsLittleEndian) {
-  return new ELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
+  return llvm::make_unique<ELFObjectWriter>(std::move(MOTW), OS,
+                                            IsLittleEndian);
 }
index 50c1f6e79f8a27f936391175e8c08229e107098b..76976cab4660224177dc692319d593fb4c9d4773 100644 (file)
@@ -62,12 +62,13 @@ void MCELFStreamer::mergeFragment(MCDataFragment *DF,
     if (RequiredBundlePadding > 0) {
       SmallString<256> Code;
       raw_svector_ostream VecOS(Code);
-      MCObjectWriter *OW = Assembler.getBackend().createObjectWriter(VecOS);
+      {
+        auto OW = Assembler.getBackend().createObjectWriter(VecOS);
 
-      EF->setBundlePadding(static_cast<uint8_t>(RequiredBundlePadding));
+        EF->setBundlePadding(static_cast<uint8_t>(RequiredBundlePadding));
 
-      Assembler.writeFragmentPadding(*EF, FSize, OW);
-      delete OW;
+        Assembler.writeFragmentPadding(*EF, FSize, OW.get());
+      }
 
       DF->getContents().append(Code.begin(), Code.end());
     }
index 65e5b839caecc7e9b9dbf019e315ef76cb655fd2..46d57265d85b9e37e40bdeaa1a7edfcb274cfc84 100644 (file)
@@ -28,15 +28,14 @@ using namespace llvm;
 MCObjectStreamer::MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB,
                                    raw_pwrite_stream &OS,
                                    MCCodeEmitter *Emitter_)
-    : MCStreamer(Context),
+    : MCStreamer(Context), ObjectWriter(TAB.createObjectWriter(OS)),
       Assembler(llvm::make_unique<MCAssembler>(Context, TAB, *Emitter_,
-                                               *TAB.createObjectWriter(OS))),
+                                               *ObjectWriter)),
       EmitEHFrame(true), EmitDebugFrame(false) {}
 
 MCObjectStreamer::~MCObjectStreamer() {
   delete &Assembler->getBackend();
   delete &Assembler->getEmitter();
-  delete &Assembler->getWriter();
 }
 
 void MCObjectStreamer::flushPendingLabels(MCFragment *F, uint64_t FOffset) {
index c2196a77e18f80d7a8bc76fb6169a1443392c565..7dbb84e166f22d7d34e7a4ce1cc60bf68bf5d441 100644 (file)
@@ -994,8 +994,9 @@ void MachObjectWriter::writeObject(MCAssembler &Asm,
   }
 }
 
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 llvm::createMachObjectWriter(std::unique_ptr<MCMachObjectTargetWriter> MOTW,
                              raw_pwrite_stream &OS, bool IsLittleEndian) {
-  return new MachObjectWriter(std::move(MOTW), OS, IsLittleEndian);
+  return llvm::make_unique<MachObjectWriter>(std::move(MOTW), OS,
+                                             IsLittleEndian);
 }
index 02d8bfbe1de716ab3c98f4024c01c842d8b0a2e4..55e7c93c87ea92bde59b69690ec2c28a46966147 100644 (file)
@@ -1317,8 +1317,11 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
   // TODO: Translate debug sections to the output.
 }
 
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 llvm::createWasmObjectWriter(std::unique_ptr<MCWasmObjectTargetWriter> MOTW,
                              raw_pwrite_stream &OS) {
-  return new WasmObjectWriter(std::move(MOTW), OS);
+  // FIXME: Can't use make_unique<WasmObjectWriter>(...) as WasmObjectWriter's
+  //        destructor is private. Is that necessary?
+  return std::unique_ptr<MCObjectWriter>(
+      new WasmObjectWriter(std::move(MOTW), OS));
 }
index 64f7317cf490dafbd60c919e5053bd5b1ad0b6dd..9f1db46939c79bfa489d475ab319e0cc9b528cf2 100644 (file)
@@ -1085,7 +1085,7 @@ void MCWinCOFFObjectTargetWriter::anchor() {}
 //------------------------------------------------------------------------------
 // WinCOFFObjectWriter factory function
 
-MCObjectWriter *llvm::createWinCOFFObjectWriter(
+std::unique_ptr<MCObjectWriter> llvm::createWinCOFFObjectWriter(
     std::unique_ptr<MCWinCOFFObjectTargetWriter> MOTW, raw_pwrite_stream &OS) {
-  return new WinCOFFObjectWriter(std::move(MOTW), OS);
+  return llvm::make_unique<WinCOFFObjectWriter>(std::move(MOTW), OS);
 }
index 0e42cf422bd5f7cab9848d5152fb3a58efa4c987..7b33b4b5b5427ce97ffd1cbace094216796134ed 100644 (file)
@@ -432,7 +432,8 @@ public:
                           const MCRegisterInfo &MRI)
       : AArch64AsmBackend(T, TT, /*IsLittleEndian*/ true), MRI(MRI) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createAArch64MachObjectWriter(OS, MachO::CPU_TYPE_ARM64,
                                          MachO::CPU_SUBTYPE_ARM64_ALL);
   }
@@ -582,7 +583,8 @@ public:
       : AArch64AsmBackend(T, TT, IsLittleEndian), OSABI(OSABI),
         IsILP32(IsILP32) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createAArch64ELFObjectWriter(OS, OSABI, IsLittleEndian, IsILP32);
   }
 };
@@ -595,7 +597,8 @@ public:
   COFFAArch64AsmBackend(const Target &T, const Triple &TheTriple)
       : AArch64AsmBackend(T, TheTriple, /*IsLittleEndian*/ true) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createAArch64WinCOFFObjectWriter(OS);
   }
 };
index b7b987e6266f4f93a3a069ff27e75790debc87dc..2d90e67960f8e7d96e6eff07ebbafb4f34d1ee5f 100644 (file)
@@ -19,6 +19,7 @@
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cassert>
@@ -428,10 +429,9 @@ unsigned AArch64ELFObjectWriter::getRelocType(MCContext &Ctx,
   llvm_unreachable("Unimplemented fixup -> relocation");
 }
 
-MCObjectWriter *llvm::createAArch64ELFObjectWriter(raw_pwrite_stream &OS,
-                                                   uint8_t OSABI,
-                                                   bool IsLittleEndian,
-                                                   bool IsILP32) {
+std::unique_ptr<MCObjectWriter>
+llvm::createAArch64ELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
+                                   bool IsLittleEndian, bool IsILP32) {
   auto MOTW =
       llvm::make_unique<AArch64ELFObjectWriter>(OSABI, IsLittleEndian, IsILP32);
   return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
index f7248faa5d0fc6decec1124547ec980ec16d54fe..b9e1673b9317d994590cfeda8449c0f8439f2acb 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "llvm/Support/DataTypes.h"
 
+#include <memory>
+
 namespace llvm {
 class formatted_raw_ostream;
 class MCAsmBackend;
@@ -51,16 +53,16 @@ MCAsmBackend *createAArch64beAsmBackend(const Target &T,
                                         const Triple &TT, StringRef CPU,
                                         const MCTargetOptions &Options);
 
-MCObjectWriter *createAArch64ELFObjectWriter(raw_pwrite_stream &OS,
-                                             uint8_t OSABI,
-                                             bool IsLittleEndian,
-                                             bool IsILP32);
+std::unique_ptr<MCObjectWriter>
+createAArch64ELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
+                             bool IsLittleEndian, bool IsILP32);
 
-MCObjectWriter *createAArch64MachObjectWriter(raw_pwrite_stream &OS,
-                                              uint32_t CPUType,
-                                              uint32_t CPUSubtype);
+std::unique_ptr<MCObjectWriter>
+createAArch64MachObjectWriter(raw_pwrite_stream &OS, uint32_t CPUType,
+                              uint32_t CPUSubtype);
 
-MCObjectWriter *createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS);
+std::unique_ptr<MCObjectWriter>
+createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS);
 
 MCTargetStreamer *createAArch64AsmTargetStreamer(MCStreamer &S,
                                                  formatted_raw_ostream &OS,
index a06b038d090b92605aa3553b5325511b5f554e69..55151c2b8d21319c399b4f9e6788189790101ac1 100644 (file)
@@ -430,9 +430,9 @@ void AArch64MachObjectWriter::recordRelocation(
   Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
 }
 
-MCObjectWriter *llvm::createAArch64MachObjectWriter(raw_pwrite_stream &OS,
-                                                    uint32_t CPUType,
-                                                    uint32_t CPUSubtype) {
+std::unique_ptr<MCObjectWriter>
+llvm::createAArch64MachObjectWriter(raw_pwrite_stream &OS, uint32_t CPUType,
+                                    uint32_t CPUSubtype) {
   return createMachObjectWriter(
       llvm::make_unique<AArch64MachObjectWriter>(CPUType, CPUSubtype), OS,
       /*IsLittleEndian=*/true);
index b4db36fa29c4a5fa23daf8a806c3fb762b5eef7f..d06c5e8862aec6bec9e5c84c6363fbcc69aadcff 100644 (file)
@@ -14,6 +14,7 @@
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFixup.h"
 #include "llvm/MC/MCFixupKindInfo.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/MC/MCWinCOFFObjectWriter.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -96,7 +97,8 @@ bool AArch64WinCOFFObjectWriter::recordRelocation(const MCFixup &Fixup) const {
 
 namespace llvm {
 
-MCObjectWriter *createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS) {
+std::unique_ptr<MCObjectWriter>
+createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS) {
   auto MOTW = llvm::make_unique<AArch64WinCOFFObjectWriter>();
   return createWinCOFFObjectWriter(std::move(MOTW), OS);
 }
index 7689101f0c3e2b0fdfdce02f6906bc29302d94c1..778d4a7ba9d017c53aa52364764342767cb518fd 100644 (file)
@@ -189,7 +189,8 @@ public:
     }
   }
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createAMDGPUELFObjectWriter(Is64Bit, OSABI, HasRelocationAddend, OS);
   }
 };
index a2fe02e936e02ffffbfc488ac0994844acc97c9b..e443b0729606a6f525edffab12a7dac55a92a824 100644 (file)
@@ -12,6 +12,7 @@
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCSymbol.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -81,10 +82,10 @@ unsigned AMDGPUELFObjectWriter::getRelocType(MCContext &Ctx,
   llvm_unreachable("unhandled relocation type");
 }
 
-MCObjectWriter *llvm::createAMDGPUELFObjectWriter(bool Is64Bit,
-                                                  uint8_t OSABI,
-                                                  bool HasRelocationAddend,
-                                                  raw_pwrite_stream &OS) {
+std::unique_ptr<MCObjectWriter>
+llvm::createAMDGPUELFObjectWriter(bool Is64Bit, uint8_t OSABI,
+                                  bool HasRelocationAddend,
+                                  raw_pwrite_stream &OS) {
   auto MOTW = llvm::make_unique<AMDGPUELFObjectWriter>(Is64Bit, OSABI,
                                                        HasRelocationAddend);
   return createELFObjectWriter(std::move(MOTW), OS, true);
index 352ed75f821cd5e1697fbbf81fc40e6df179f08d..56bcff487174faa4f15e051d11392e114d411079 100644 (file)
@@ -18,6 +18,8 @@
 
 #include "llvm/Support/DataTypes.h"
 
+#include <memory>
+
 namespace llvm {
 class MCAsmBackend;
 class MCCodeEmitter;
@@ -47,10 +49,9 @@ MCAsmBackend *createAMDGPUAsmBackend(const Target &T, const MCRegisterInfo &MRI,
                                      const Triple &TT, StringRef CPU,
                                      const MCTargetOptions &Options);
 
-MCObjectWriter *createAMDGPUELFObjectWriter(bool Is64Bit,
-                                            uint8_t OSABI,
-                                            bool HasRelocationAddend,
-                                            raw_pwrite_stream &OS);
+std::unique_ptr<MCObjectWriter>
+createAMDGPUELFObjectWriter(bool Is64Bit, uint8_t OSABI,
+                            bool HasRelocationAddend, raw_pwrite_stream &OS);
 } // End llvm namespace
 
 #define GET_REGINFO_ENUM
index bd729fabedf5ac1e6a33c4db9e92b110d3d04bcd..989bd552a3764990f11dd1818827cf2d8d6c9efe 100644 (file)
@@ -23,7 +23,8 @@ public:
       : ARMAsmBackend(T, TT, /* IsLittleEndian */ true), MRI(MRI), Subtype(st) {
   }
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createARMMachObjectWriter(OS, /*Is64Bit=*/false, MachO::CPU_TYPE_ARM,
                                      Subtype);
   }
index 748f915be17bbbaa0f615f2ba0142637ded5d0e6..703567d6006f5cc8501ae64dc91f74cdff5b7585 100644 (file)
@@ -22,7 +22,8 @@ public:
                    bool IsLittle)
       : ARMAsmBackend(T, TT, IsLittle), OSABI(OSABI) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createARMELFObjectWriter(OS, OSABI, isLittle());
   }
 };
index 2a375be49a83055d3d9bf676c796c718b9b88af2..2c48dcccab1b4d470d576542d2489f25410f64e9 100644 (file)
@@ -18,7 +18,8 @@ class ARMAsmBackendWinCOFF : public ARMAsmBackend {
 public:
   ARMAsmBackendWinCOFF(const Target &T, const Triple &TheTriple)
       : ARMAsmBackend(T, TheTriple, true) {}
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createARMWinCOFFObjectWriter(OS, /*Is64Bit=*/false);
   }
 };
index 6f825a3d0a60fd687d25821245cea5d62621d0f3..3cd52fe1e7eb1c421b2dfc3a80b1cdf3f12175bb 100644 (file)
@@ -14,6 +14,7 @@
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/raw_ostream.h"
@@ -235,9 +236,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
   }
 }
 
-MCObjectWriter *llvm::createARMELFObjectWriter(raw_pwrite_stream &OS,
-                                               uint8_t OSABI,
-                                               bool IsLittleEndian) {
+std::unique_ptr<MCObjectWriter>
+llvm::createARMELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
+                               bool IsLittleEndian) {
   return createELFObjectWriter(llvm::make_unique<ARMELFObjectWriter>(OSABI), OS,
                                IsLittleEndian);
 }
index ba834201e585a1b36304c53f493d8af1c037505f..644cfa62df9f02ab97b112bb78f82c3274d8ca32 100644 (file)
@@ -98,17 +98,19 @@ MCStreamer *createARMWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB,
                                      bool IncrementalLinkerCompatible);
 
 /// Construct an ELF Mach-O object writer.
-MCObjectWriter *createARMELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
-                                         bool IsLittleEndian);
+std::unique_ptr<MCObjectWriter> createARMELFObjectWriter(raw_pwrite_stream &OS,
+                                                         uint8_t OSABI,
+                                                         bool IsLittleEndian);
 
 /// Construct an ARM Mach-O object writer.
-MCObjectWriter *createARMMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
-                                          uint32_t CPUType,
-                                          uint32_t CPUSubtype);
+std::unique_ptr<MCObjectWriter> createARMMachObjectWriter(raw_pwrite_stream &OS,
+                                                          bool Is64Bit,
+                                                          uint32_t CPUType,
+                                                          uint32_t CPUSubtype);
 
 /// Construct an ARM PE/COFF object writer.
-MCObjectWriter *createARMWinCOFFObjectWriter(raw_pwrite_stream &OS,
-                                             bool Is64Bit);
+std::unique_ptr<MCObjectWriter>
+createARMWinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit);
 
 /// Construct ARM Mach-O relocation info.
 MCRelocationInfo *createARMMachORelocationInfo(MCContext &Ctx);
index d375b640c94348aad508be2f57c13c388a036258..521ae5337e7aceca20f01e5175bc8e5419bb7d9b 100644 (file)
@@ -484,9 +484,9 @@ void ARMMachObjectWriter::recordRelocation(MachObjectWriter *Writer,
   Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
 }
 
-MCObjectWriter *llvm::createARMMachObjectWriter(raw_pwrite_stream &OS,
-                                                bool Is64Bit, uint32_t CPUType,
-                                                uint32_t CPUSubtype) {
+std::unique_ptr<MCObjectWriter>
+llvm::createARMMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
+                                uint32_t CPUType, uint32_t CPUSubtype) {
   return createMachObjectWriter(
       llvm::make_unique<ARMMachObjectWriter>(Is64Bit, CPUType, CPUSubtype), OS,
       /*IsLittleEndian=*/true);
index 0438020ce8195d02b60edfe4e1f288d53889c3ea..5e09b126f43fc8a8890db811807fe55799b6751d 100644 (file)
@@ -14,6 +14,7 @@
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFixup.h"
 #include "llvm/MC/MCFixupKindInfo.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/MC/MCWinCOFFObjectWriter.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -90,8 +91,8 @@ bool ARMWinCOFFObjectWriter::recordRelocation(const MCFixup &Fixup) const {
 
 namespace llvm {
 
-MCObjectWriter *createARMWinCOFFObjectWriter(raw_pwrite_stream &OS,
-                                             bool Is64Bit) {
+std::unique_ptr<MCObjectWriter>
+createARMWinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit) {
   auto MOTW = llvm::make_unique<ARMWinCOFFObjectWriter>(Is64Bit);
   return createWinCOFFObjectWriter(std::move(MOTW), OS);
 }
index 9fc812cdef14fbc5b939e80c68b53de7569751f0..800700d3dad21472fa2cf4ac70d42ab567189490 100644 (file)
@@ -31,7 +31,8 @@ public:
                   const MCValue &Target, MutableArrayRef<char> Data,
                   uint64_t Value, bool IsResolved) const override;
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override;
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override;
 
   // No instruction requires relaxation
   bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
@@ -88,7 +89,8 @@ void BPFAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
   }
 }
 
-MCObjectWriter *BPFAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
+std::unique_ptr<MCObjectWriter>
+BPFAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
   return createBPFELFObjectWriter(OS, 0, IsLittleEndian);
 }
 
index 22ab156b94030008b0a647d1b673761bae6dbcf3..144ea2b697dd55e22be8a8b0dff99eadc10a7c92 100644 (file)
@@ -11,6 +11,7 @@
 #include "llvm/BinaryFormat/ELF.h"
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cstdint>
 
@@ -52,8 +53,9 @@ unsigned BPFELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
   }
 }
 
-MCObjectWriter *llvm::createBPFELFObjectWriter(raw_pwrite_stream &OS,
-                                               uint8_t OSABI, bool IsLittleEndian) {
+std::unique_ptr<MCObjectWriter>
+llvm::createBPFELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
+                               bool IsLittleEndian) {
   return createELFObjectWriter(llvm::make_unique<BPFELFObjectWriter>(OSABI), OS,
                                IsLittleEndian);
 }
index d1c97c9987e1bac1f9cff9ebd8dfc73b01e8a32c..6466042f6929ac022f0b8922e07b1ccc51298596 100644 (file)
@@ -17,6 +17,8 @@
 #include "llvm/Config/config.h"
 #include "llvm/Support/DataTypes.h"
 
+#include <memory>
+
 namespace llvm {
 class MCAsmBackend;
 class MCCodeEmitter;
@@ -50,8 +52,9 @@ MCAsmBackend *createBPFbeAsmBackend(const Target &T, const MCRegisterInfo &MRI,
                                     const Triple &TT, StringRef CPU,
                                     const MCTargetOptions &Options);
 
-MCObjectWriter *createBPFELFObjectWriter(raw_pwrite_stream &OS,
-                                         uint8_t OSABI, bool IsLittleEndian);
+std::unique_ptr<MCObjectWriter> createBPFELFObjectWriter(raw_pwrite_stream &OS,
+                                                         uint8_t OSABI,
+                                                         bool IsLittleEndian);
 }
 
 // Defines symbolic names for BPF registers.  This defines a mapping from
index 2a0edda8dcee8d94f6be24547e2d14f8269053fb..31da9fa06d0006f31a37e88aedfc99d7e0b977bf 100644 (file)
@@ -65,7 +65,8 @@ public:
       OSABI(OSABI), CPU(CPU), MCII(T.createMCInstrInfo()),
       RelaxTarget(new MCInst *), Extender(nullptr) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createHexagonELFObjectWriter(OS, OSABI, CPU);
   }
 
index b0239a724db2406031d3dd1898f9b3f25ec767db..12aa1bd9b2a0d3fd0cc6ddaf937a638ad8063e13 100644 (file)
@@ -11,6 +11,7 @@
 #include "MCTargetDesc/HexagonFixupKinds.h"
 #include "llvm/MC/MCAssembler.h"
 #include "llvm/MC/MCELFObjectWriter.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
@@ -297,9 +298,9 @@ unsigned HexagonELFObjectWriter::getRelocType(MCContext &Ctx,
   }
 }
 
-MCObjectWriter *llvm::createHexagonELFObjectWriter(raw_pwrite_stream &OS,
-                                                   uint8_t OSABI,
-                                                   StringRef CPU) {
+std::unique_ptr<MCObjectWriter>
+llvm::createHexagonELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
+                                   StringRef CPU) {
   auto MOTW = llvm::make_unique<HexagonELFObjectWriter>(OSABI, CPU);
   return createELFObjectWriter(std::move(MOTW), OS, /*IsLittleEndian*/ true);
 }
index 6bb69be6142e5989e269a2dd94b3ea39a66d0062..30d75dbc84e2c52f5dd32972ee0d7af5e8fbf115 100644 (file)
@@ -63,8 +63,9 @@ MCAsmBackend *createHexagonAsmBackend(const Target &T,
                                       const Triple &TT, StringRef CPU,
                                       const MCTargetOptions &Options);
 
-MCObjectWriter *createHexagonELFObjectWriter(raw_pwrite_stream &OS,
-                                             uint8_t OSABI, StringRef CPU);
+std::unique_ptr<MCObjectWriter>
+createHexagonELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI,
+                             StringRef CPU);
 
 unsigned HexagonGetLastSlot();
 
index bbce5f670c99ea41855d6ee7e69a3564dad6ea1b..c4935746f5ad14181530831d2f8da25916566815 100644 (file)
@@ -53,7 +53,8 @@ public:
                   const MCValue &Target, MutableArrayRef<char> Data,
                   uint64_t Value, bool IsResolved) const override;
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override;
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override;
 
   // No instruction requires relaxation
   bool fixupNeedsRelaxation(const MCFixup & /*Fixup*/, uint64_t /*Value*/,
@@ -126,7 +127,7 @@ void LanaiAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
   }
 }
 
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 LanaiAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
   return createLanaiELFObjectWriter(OS,
                                     MCELFObjectTargetWriter::getOSABI(OSType));
index fec6a3919b6f777e1e8033863136f3fe99d92ea6..3c40176d2f60c94ca9182928d03929bdffec639d 100644 (file)
@@ -11,6 +11,7 @@
 #include "MCTargetDesc/LanaiFixupKinds.h"
 #include "llvm/BinaryFormat/ELF.h"
 #include "llvm/MC/MCELFObjectWriter.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/Support/ErrorHandling.h"
 
 using namespace llvm;
@@ -86,8 +87,8 @@ bool LanaiELFObjectWriter::needsRelocateWithSymbol(const MCSymbol & /*SD*/,
   }
 }
 
-MCObjectWriter *llvm::createLanaiELFObjectWriter(raw_pwrite_stream &OS,
-                                                 uint8_t OSABI) {
+std::unique_ptr<MCObjectWriter>
+llvm::createLanaiELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI) {
   return createELFObjectWriter(llvm::make_unique<LanaiELFObjectWriter>(OSABI),
                                OS, /*IsLittleEndian=*/false);
 }
index 8adaf4cea420218d157d3fb9838bf1dce42b5c82..5bc84ad83870f2c0f2d6f3d95d6675f0c9c1c3bc 100644 (file)
@@ -42,8 +42,8 @@ MCAsmBackend *createLanaiAsmBackend(const Target &T, const MCRegisterInfo &MRI,
                                     const Triple &TheTriple, StringRef CPU,
                                     const MCTargetOptions &Options);
 
-MCObjectWriter *createLanaiELFObjectWriter(raw_pwrite_stream &OS,
-                                           uint8_t OSABI);
+std::unique_ptr<MCObjectWriter>
+createLanaiELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI);
 } // namespace llvm
 
 // Defines symbolic names for Lanai registers.  This defines a mapping from
index 512267320c118020b894bd9f10f4c5a9fa59baa7..1ad524c0696964347935012b887da78a105eb800 100644 (file)
@@ -210,7 +210,7 @@ static unsigned adjustFixupValue(const MCFixup &Fixup, uint64_t Value,
   return Value;
 }
 
-MCObjectWriter *
+std::unique_ptr<MCObjectWriter>
 MipsAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
   return createMipsELFObjectWriter(OS, TheTriple, IsN32);
 }
index 409d4e2bf92d19ebc85414e47ee712c8ce34510e..406b820edae57c6db35345ff634b25a4cdea06e8 100644 (file)
@@ -37,7 +37,8 @@ public:
                  StringRef CPU, bool N32)
       : TheTriple(TT), IsLittle(TT.isLittleEndian()), IsN32(N32) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override;
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override;
 
   void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
                   const MCValue &Target, MutableArrayRef<char> Data,
index 7ea3505fcdb8c5cb7af035eef86da33085a1f0d3..6d2f098a6b32a36390ba81f3ce9be8b39e29f00a 100644 (file)
@@ -13,6 +13,7 @@
 #include "llvm/BinaryFormat/ELF.h"
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCSymbolELF.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
@@ -655,8 +656,9 @@ bool MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
   }
 }
 
-MCObjectWriter *llvm::createMipsELFObjectWriter(raw_pwrite_stream &OS,
-                                                const Triple &TT, bool IsN32) {
+std::unique_ptr<MCObjectWriter>
+llvm::createMipsELFObjectWriter(raw_pwrite_stream &OS, const Triple &TT,
+                                bool IsN32) {
   uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());
   bool IsN64 = TT.isArch64Bit() && !IsN32;
   bool HasRelocationAddend = TT.isArch64Bit();
index 3b46c5c494986e1aeca26a7924e0148fdf3148f4..abbf08ed212ff5a89829817ee003ca8140286484 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "llvm/Support/DataTypes.h"
 
+#include <memory>
+
 namespace llvm {
 class MCAsmBackend;
 class MCCodeEmitter;
@@ -47,8 +49,8 @@ MCAsmBackend *createMipsAsmBackend(const Target &T, const MCRegisterInfo &MRI,
                                    const Triple &TT, StringRef CPU,
                                    const MCTargetOptions &Options);
 
-MCObjectWriter *createMipsELFObjectWriter(raw_pwrite_stream &OS,
-                                          const Triple &TT, bool IsN32);
+std::unique_ptr<MCObjectWriter>
+createMipsELFObjectWriter(raw_pwrite_stream &OS, const Triple &TT, bool IsN32);
 
 namespace MIPS_MC {
 StringRef selectMipsCPU(const Triple &TT, StringRef CPU);
index bdad2fe8714fddd3c0019547c51f69a0f5c2d17c..2a1de244da9233cd4e79a5490f2556ce6c0d7b3c 100644 (file)
@@ -204,7 +204,8 @@ namespace {
   public:
     DarwinPPCAsmBackend(const Target &T) : PPCAsmBackend(T, false) { }
 
-    MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+    std::unique_ptr<MCObjectWriter>
+    createObjectWriter(raw_pwrite_stream &OS) const override {
       bool is64 = getPointerSize() == 8;
       return createPPCMachObjectWriter(
           OS,
@@ -220,7 +221,8 @@ namespace {
     ELFPPCAsmBackend(const Target &T, bool IsLittleEndian, uint8_t OSABI) :
       PPCAsmBackend(T, IsLittleEndian), OSABI(OSABI) { }
 
-    MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+    std::unique_ptr<MCObjectWriter>
+    createObjectWriter(raw_pwrite_stream &OS) const override {
       bool is64 = getPointerSize() == 8;
       return createPPCELFObjectWriter(OS, is64, isLittleEndian(), OSABI);
     }
index 06d84628374e5870a61de114123c9183b5a7d586..44ee9733b16e16d383603609117d46b2c16b808e 100644 (file)
@@ -13,6 +13,7 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCExpr.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCSymbolELF.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -416,10 +417,9 @@ bool PPCELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
   }
 }
 
-MCObjectWriter *llvm::createPPCELFObjectWriter(raw_pwrite_stream &OS,
-                                               bool Is64Bit,
-                                               bool IsLittleEndian,
-                                               uint8_t OSABI) {
+std::unique_ptr<MCObjectWriter>
+llvm::createPPCELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
+                               bool IsLittleEndian, uint8_t OSABI) {
   auto MOTW = llvm::make_unique<PPCELFObjectWriter>(Is64Bit, OSABI);
   return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
 }
index 893233ee2300fe7e21b0c97cca51b56f7acc2903..960a576e704b92b6762d26b627dcfd5e39201c26 100644 (file)
@@ -47,12 +47,15 @@ MCAsmBackend *createPPCAsmBackend(const Target &T, const MCRegisterInfo &MRI,
                                   const MCTargetOptions &Options);
 
 /// Construct an PPC ELF object writer.
-MCObjectWriter *createPPCELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
-                                         bool IsLittleEndian, uint8_t OSABI);
+std::unique_ptr<MCObjectWriter> createPPCELFObjectWriter(raw_pwrite_stream &OS,
+                                                         bool Is64Bit,
+                                                         bool IsLittleEndian,
+                                                         uint8_t OSABI);
 /// Construct a PPC Mach-O object writer.
-MCObjectWriter *createPPCMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
-                                          uint32_t CPUType,
-                                          uint32_t CPUSubtype);
+std::unique_ptr<MCObjectWriter> createPPCMachObjectWriter(raw_pwrite_stream &OS,
+                                                          bool Is64Bit,
+                                                          uint32_t CPUType,
+                                                          uint32_t CPUSubtype);
 
 /// Returns true iff Val consists of one contiguous run of 1s with any number of
 /// 0s on either side.  The 1s are allowed to wrap from LSB to MSB, so
index baa6707e1923144ac346440a0eebe1dce405a543..4b9055ec70419065845126a7edbfbdbaecc80c7b 100644 (file)
@@ -374,9 +374,9 @@ void PPCMachObjectWriter::RecordPPCRelocation(
   Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
 }
 
-MCObjectWriter *llvm::createPPCMachObjectWriter(raw_pwrite_stream &OS,
-                                                bool Is64Bit, uint32_t CPUType,
-                                                uint32_t CPUSubtype) {
+std::unique_ptr<MCObjectWriter>
+llvm::createPPCMachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
+                                uint32_t CPUType, uint32_t CPUSubtype) {
   return createMachObjectWriter(
       llvm::make_unique<PPCMachObjectWriter>(Is64Bit, CPUType, CPUSubtype), OS,
       /*IsLittleEndian=*/false);
index 0a72a4438218dd720e0875052c49953b9be118a3..a38545ecf4303856e05a5816c75c4a2efeecc123 100644 (file)
@@ -291,7 +291,8 @@ namespace {
       }
     }
 
-    MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+    std::unique_ptr<MCObjectWriter>
+    createObjectWriter(raw_pwrite_stream &OS) const override {
       uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(OSType);
       return createSparcELFObjectWriter(OS, Is64Bit, IsLittleEndian, OSABI);
     }
index 508d191aa1ca9f43baca7e0df8f12d7128eb47d9..a204036a0975d018fccb65fcc3e07cacc2c60b58 100644 (file)
@@ -13,6 +13,7 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCExpr.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/ErrorHandling.h"
 
@@ -131,10 +132,9 @@ bool SparcELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
   }
 }
 
-MCObjectWriter *llvm::createSparcELFObjectWriter(raw_pwrite_stream &OS,
-                                                 bool Is64Bit,
-                                                 bool IsLittleEndian,
-                                                 uint8_t OSABI) {
+std::unique_ptr<MCObjectWriter>
+llvm::createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
+                                 bool IsLittleEndian, uint8_t OSABI) {
   auto MOTW = llvm::make_unique<SparcELFObjectWriter>(Is64Bit, OSABI);
   return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
 }
index 4e754c132d11a029d559b9560d048d7a88dd9769..563e6f4efbe6e7964d45065c89c49bfa13d2c7d0 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "llvm/Support/DataTypes.h"
 
+#include <memory>
+
 namespace llvm {
 class MCAsmBackend;
 class MCCodeEmitter;
@@ -41,8 +43,9 @@ MCCodeEmitter *createSparcMCCodeEmitter(const MCInstrInfo &MCII,
 MCAsmBackend *createSparcAsmBackend(const Target &T, const MCRegisterInfo &MRI,
                                     const Triple &TT, StringRef CPU,
                                     const MCTargetOptions &Options);
-MCObjectWriter *createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
-                                           bool IsLIttleEndian, uint8_t OSABI);
+std::unique_ptr<MCObjectWriter>
+createSparcELFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
+                           bool IsLIttleEndian, uint8_t OSABI);
 } // End llvm namespace
 
 // Defines symbolic names for Sparc registers.  This defines a mapping from
index 51ac410a9c819c33b15edcf7cc503dd227945b83..e035c3b87a408d91c59eff72c1fdc11a99d11503 100644 (file)
@@ -66,7 +66,8 @@ public:
     llvm_unreachable("SystemZ does do not have assembler relaxation");
   }
   bool writeNopData(uint64_t Count, MCObjectWriter *OW) const override;
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createSystemZObjectWriter(OS, OSABI);
   }
 };
index 166a3f0e1aaec4b893a81ba7f548f0b4e2d771b1..238926d6c8e01851ce67f96aaf9cd3a9ff11e233 100644 (file)
@@ -13,6 +13,7 @@
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cassert>
@@ -160,8 +161,8 @@ unsigned SystemZObjectWriter::getRelocType(MCContext &Ctx,
   }
 }
 
-MCObjectWriter *llvm::createSystemZObjectWriter(raw_pwrite_stream &OS,
-                                                uint8_t OSABI) {
+std::unique_ptr<MCObjectWriter>
+llvm::createSystemZObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI) {
   return createELFObjectWriter(llvm::make_unique<SystemZObjectWriter>(OSABI),
                                OS, /*IsLittleEndian=*/false);
 }
index dbca3485290aae64d66057f8897a5823762f80c4..99b157e37275d8ce1a86ccbb0692849fb274d319 100644 (file)
@@ -12,6 +12,8 @@
 
 #include "llvm/Support/DataTypes.h"
 
+#include <memory>
+
 namespace llvm {
 
 class MCAsmBackend;
@@ -91,7 +93,8 @@ MCAsmBackend *createSystemZMCAsmBackend(const Target &T,
                                         const Triple &TT, StringRef CPU,
                                         const MCTargetOptions &Options);
 
-MCObjectWriter *createSystemZObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI);
+std::unique_ptr<MCObjectWriter> createSystemZObjectWriter(raw_pwrite_stream &OS,
+                                                          uint8_t OSABI);
 } // end namespace llvm
 
 // Defines symbolic names for SystemZ registers.
index 733eac7c032127e84a3ebe8c9eadb630e852d02d..a5cecf0370054957fb99700ce3f9ba5195712175 100644 (file)
@@ -389,7 +389,8 @@ public:
   ELFX86_32AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
     : ELFX86AsmBackend(T, OSABI, CPU) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createX86ELFObjectWriter(OS, /*IsELF64*/ false, OSABI, ELF::EM_386);
   }
 };
@@ -399,7 +400,8 @@ public:
   ELFX86_X32AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
       : ELFX86AsmBackend(T, OSABI, CPU) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createX86ELFObjectWriter(OS, /*IsELF64*/ false, OSABI,
                                     ELF::EM_X86_64);
   }
@@ -410,7 +412,8 @@ public:
   ELFX86_IAMCUAsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
       : ELFX86AsmBackend(T, OSABI, CPU) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createX86ELFObjectWriter(OS, /*IsELF64*/ false, OSABI,
                                     ELF::EM_IAMCU);
   }
@@ -421,7 +424,8 @@ public:
   ELFX86_64AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU)
     : ELFX86AsmBackend(T, OSABI, CPU) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createX86ELFObjectWriter(OS, /*IsELF64*/ true, OSABI, ELF::EM_X86_64);
   }
 };
@@ -443,7 +447,8 @@ public:
         .Default(MCAsmBackend::getFixupKind(Name));
   }
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createX86WinCOFFObjectWriter(OS, Is64Bit);
   }
 };
@@ -804,7 +809,8 @@ public:
                          StringRef CPU)
       : DarwinX86AsmBackend(T, MRI, CPU, false) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createX86MachObjectWriter(OS, /*Is64Bit=*/false,
                                      MachO::CPU_TYPE_I386,
                                      MachO::CPU_SUBTYPE_I386_ALL);
@@ -824,7 +830,8 @@ public:
                          StringRef CPU, MachO::CPUSubTypeX86 st)
       : DarwinX86AsmBackend(T, MRI, CPU, true), Subtype(st) {}
 
-  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override {
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const override {
     return createX86MachObjectWriter(OS, /*Is64Bit=*/true,
                                      MachO::CPU_TYPE_X86_64, Subtype);
   }
index 7e79941be3443ddafdb0873510297cf93ba05295..4cdbae4d0d96ac5de4699d2750f654b207fa19d5 100644 (file)
@@ -15,6 +15,7 @@
 #include "llvm/MC/MCELFObjectWriter.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cassert>
@@ -297,9 +298,9 @@ unsigned X86ELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
   return getRelocType32(Ctx, Modifier, getType32(Type), IsPCRel, Kind);
 }
 
-MCObjectWriter *llvm::createX86ELFObjectWriter(raw_pwrite_stream &OS,
-                                               bool IsELF64, uint8_t OSABI,
-                                               uint16_t EMachine) {
+std::unique_ptr<MCObjectWriter>
+llvm::createX86ELFObjectWriter(raw_pwrite_stream &OS, bool IsELF64,
+                               uint8_t OSABI, uint16_t EMachine) {
   auto MOTW = llvm::make_unique<X86ELFObjectWriter>(IsELF64, OSABI, EMachine);
   return createELFObjectWriter(std::move(MOTW), OS, /*IsLittleEndian=*/true);
 }
index f73e734b9b0e6e5dc7b3c2eae85a5c62278a49cc..82e70119ca58e9e1da61089884faa2a56bd1c745 100644 (file)
@@ -86,16 +86,19 @@ MCStreamer *createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB,
                                      bool RelaxAll, bool IncrementalLinkerCompatible);
 
 /// Construct an X86 Mach-O object writer.
-MCObjectWriter *createX86MachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
-                                          uint32_t CPUType,
-                                          uint32_t CPUSubtype);
+std::unique_ptr<MCObjectWriter> createX86MachObjectWriter(raw_pwrite_stream &OS,
+                                                          bool Is64Bit,
+                                                          uint32_t CPUType,
+                                                          uint32_t CPUSubtype);
 
 /// Construct an X86 ELF object writer.
-MCObjectWriter *createX86ELFObjectWriter(raw_pwrite_stream &OS, bool IsELF64,
-                                         uint8_t OSABI, uint16_t EMachine);
+std::unique_ptr<MCObjectWriter> createX86ELFObjectWriter(raw_pwrite_stream &OS,
+                                                         bool IsELF64,
+                                                         uint8_t OSABI,
+                                                         uint16_t EMachine);
 /// Construct an X86 Win COFF object writer.
-MCObjectWriter *createX86WinCOFFObjectWriter(raw_pwrite_stream &OS,
-                                             bool Is64Bit);
+std::unique_ptr<MCObjectWriter>
+createX86WinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit);
 
 /// Returns the sub or super register of a specific X86 register.
 /// e.g. getX86SubSuperRegister(X86::EAX, 16) returns X86::AX.
index 3b8d90ea36c1ff0465442d97c3b7b3bea6e29d03..965f7de809b31d345ddf5846f267f21c5e3b48d7 100644 (file)
@@ -597,9 +597,9 @@ void X86MachObjectWriter::RecordX86Relocation(MachObjectWriter *Writer,
   Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE);
 }
 
-MCObjectWriter *llvm::createX86MachObjectWriter(raw_pwrite_stream &OS,
-                                                bool Is64Bit, uint32_t CPUType,
-                                                uint32_t CPUSubtype) {
+std::unique_ptr<MCObjectWriter>
+llvm::createX86MachObjectWriter(raw_pwrite_stream &OS, bool Is64Bit,
+                                uint32_t CPUType, uint32_t CPUSubtype) {
   return createMachObjectWriter(
       llvm::make_unique<X86MachObjectWriter>(Is64Bit, CPUType, CPUSubtype), OS,
       /*IsLittleEndian=*/true);
index d138bdc8d39d85b43e02f9a2927890e683f840a3..5139bb46b56124d3201cb70e4e851bb07c4d297d 100644 (file)
@@ -13,6 +13,7 @@
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCFixup.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/MCValue.h"
 #include "llvm/MC/MCWinCOFFObjectWriter.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -104,8 +105,8 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx,
     llvm_unreachable("Unsupported COFF machine type.");
 }
 
-MCObjectWriter *llvm::createX86WinCOFFObjectWriter(raw_pwrite_stream &OS,
-                                                   bool Is64Bit) {
+std::unique_ptr<MCObjectWriter>
+llvm::createX86WinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit) {
   auto MOTW = llvm::make_unique<X86WinCOFFObjectWriter>(Is64Bit);
   return createWinCOFFObjectWriter(std::move(MOTW), OS);
 }