]> granicus.if.org Git - llvm/commitdiff
[MC] Plumb unique_ptr<MCELFObjectTargetWriter> through createELFObjectWriter to
authorLang Hames <lhames@gmail.com>
Mon, 9 Oct 2017 23:53:15 +0000 (23:53 +0000)
committerLang Hames <lhames@gmail.com>
Mon, 9 Oct 2017 23:53:15 +0000 (23:53 +0000)
ELFObjectWriter's constructor.

Fixes the same ownership issue for ELF that r315245 did for MachO:
ELFObjectWriter takes ownership of its MCELFObjectTargetWriter, so we want to
pass this through to the constructor via a unique_ptr, rather than a raw ptr.

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

13 files changed:
include/llvm/MC/MCELFObjectWriter.h
lib/MC/ELFObjectWriter.cpp
lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp
lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp
lib/Target/Hexagon/MCTargetDesc/HexagonELFObjectWriter.cpp
lib/Target/Lanai/MCTargetDesc/LanaiELFObjectWriter.cpp
lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp
lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp
lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp

index d32b56a4ba0877026fc8ba00703873f3d633854e..c0f21840cd1383337c47ed217c3db4a88ee1345f 100644 (file)
@@ -137,9 +137,9 @@ public:
 /// \param MOTW - The target specific ELF writer subclass.
 /// \param OS - The stream to write to.
 /// \returns The constructed object writer.
-MCObjectWriter *createELFObjectWriter(MCELFObjectTargetWriter *MOTW,
-                                      raw_pwrite_stream &OS,
-                                      bool IsLittleEndian);
+MCObjectWriter *
+createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
+                      raw_pwrite_stream &OS, bool IsLittleEndian);
 
 } // end namespace llvm
 
index eef2757b93b43ebee031f65763cc8eba262e5fec..795c21f08b9968a34ec5363369242ced1045a955 100644 (file)
@@ -162,9 +162,10 @@ class ELFObjectWriter : public MCObjectWriter {
                              bool ZLibStyle, unsigned Alignment);
 
 public:
-  ELFObjectWriter(MCELFObjectTargetWriter *MOTW, raw_pwrite_stream &OS,
-                  bool IsLittleEndian)
-      : MCObjectWriter(OS, IsLittleEndian), TargetObjectWriter(MOTW) {}
+  ELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
+                  raw_pwrite_stream &OS, bool IsLittleEndian)
+      : MCObjectWriter(OS, IsLittleEndian),
+        TargetObjectWriter(std::move(MOTW)) {}
 
   ~ELFObjectWriter() override = default;
 
@@ -1386,8 +1387,8 @@ bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
                                                                 InSet, IsPCRel);
 }
 
-MCObjectWriter *llvm::createELFObjectWriter(MCELFObjectTargetWriter *MOTW,
-                                            raw_pwrite_stream &OS,
-                                            bool IsLittleEndian) {
-  return new ELFObjectWriter(MOTW, OS, IsLittleEndian);
+MCObjectWriter *
+llvm::createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
+                            raw_pwrite_stream &OS, bool IsLittleEndian) {
+  return new ELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
 }
index 89c3e5b4c76eccd0af94c1723eb090848469a570..b7b987e6266f4f93a3a069ff27e75790debc87dc 100644 (file)
@@ -432,7 +432,7 @@ MCObjectWriter *llvm::createAArch64ELFObjectWriter(raw_pwrite_stream &OS,
                                                    uint8_t OSABI,
                                                    bool IsLittleEndian,
                                                    bool IsILP32) {
-  MCELFObjectTargetWriter *MOTW =
-      new AArch64ELFObjectWriter(OSABI, IsLittleEndian, IsILP32);
-  return createELFObjectWriter(MOTW, OS, IsLittleEndian);
+  auto MOTW =
+      llvm::make_unique<AArch64ELFObjectWriter>(OSABI, IsLittleEndian, IsILP32);
+  return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
 }
index 9d9b5ee3ef48acdeec9018718a15fd74701261af..a2fe02e936e02ffffbfc488ac0994844acc97c9b 100644 (file)
@@ -85,7 +85,7 @@ MCObjectWriter *llvm::createAMDGPUELFObjectWriter(bool Is64Bit,
                                                   uint8_t OSABI,
                                                   bool HasRelocationAddend,
                                                   raw_pwrite_stream &OS) {
-  MCELFObjectTargetWriter *MOTW =
-      new AMDGPUELFObjectWriter(Is64Bit, OSABI, HasRelocationAddend);
-  return createELFObjectWriter(MOTW, OS, true);
+  auto MOTW = llvm::make_unique<AMDGPUELFObjectWriter>(Is64Bit, OSABI,
+                                                       HasRelocationAddend);
+  return createELFObjectWriter(std::move(MOTW), OS, true);
 }
index dc893472096e9db22e5acb226a8f24d26c705082..6f825a3d0a60fd687d25821245cea5d62621d0f3 100644 (file)
@@ -238,6 +238,6 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
 MCObjectWriter *llvm::createARMELFObjectWriter(raw_pwrite_stream &OS,
                                                uint8_t OSABI,
                                                bool IsLittleEndian) {
-  MCELFObjectTargetWriter *MOTW = new ARMELFObjectWriter(OSABI);
-  return createELFObjectWriter(MOTW, OS, IsLittleEndian);
+  return createELFObjectWriter(llvm::make_unique<ARMELFObjectWriter>(OSABI), OS,
+                               IsLittleEndian);
 }
index d5e1d7706edc00c1d6d38014b9d4237d06234de6..22ab156b94030008b0a647d1b673761bae6dbcf3 100644 (file)
@@ -54,6 +54,6 @@ unsigned BPFELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
 
 MCObjectWriter *llvm::createBPFELFObjectWriter(raw_pwrite_stream &OS,
                                                uint8_t OSABI, bool IsLittleEndian) {
-  MCELFObjectTargetWriter *MOTW = new BPFELFObjectWriter(OSABI);
-  return createELFObjectWriter(MOTW, OS, IsLittleEndian);
+  return createELFObjectWriter(llvm::make_unique<BPFELFObjectWriter>(OSABI), OS,
+                               IsLittleEndian);
 }
index b975e31310946a91216de723c3baffbc5efea6b8..b0239a724db2406031d3dd1898f9b3f25ec767db 100644 (file)
@@ -300,6 +300,6 @@ unsigned HexagonELFObjectWriter::getRelocType(MCContext &Ctx,
 MCObjectWriter *llvm::createHexagonELFObjectWriter(raw_pwrite_stream &OS,
                                                    uint8_t OSABI,
                                                    StringRef CPU) {
-  MCELFObjectTargetWriter *MOTW = new HexagonELFObjectWriter(OSABI, CPU);
-  return createELFObjectWriter(MOTW, OS, /*IsLittleEndian*/ true);
+  auto MOTW = llvm::make_unique<HexagonELFObjectWriter>(OSABI, CPU);
+  return createELFObjectWriter(std::move(MOTW), OS, /*IsLittleEndian*/ true);
 }
index 64cd3342ac18b9c808eaf303c3ab3c5ddb6fec68..fec6a3919b6f777e1e8033863136f3fe99d92ea6 100644 (file)
@@ -88,6 +88,6 @@ bool LanaiELFObjectWriter::needsRelocateWithSymbol(const MCSymbol & /*SD*/,
 
 MCObjectWriter *llvm::createLanaiELFObjectWriter(raw_pwrite_stream &OS,
                                                  uint8_t OSABI) {
-  MCELFObjectTargetWriter *MOTW = new LanaiELFObjectWriter(OSABI);
-  return createELFObjectWriter(MOTW, OS, /*IsLittleEndian=*/false);
+  return createELFObjectWriter(llvm::make_unique<LanaiELFObjectWriter>(OSABI),
+                               OS, /*IsLittleEndian=*/false);
 }
index 4339eca93f1475c6e37b845187704e00e75a40a4..7ea3505fcdb8c5cb7af035eef86da33085a1f0d3 100644 (file)
@@ -660,7 +660,7 @@ MCObjectWriter *llvm::createMipsELFObjectWriter(raw_pwrite_stream &OS,
   uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TT.getOS());
   bool IsN64 = TT.isArch64Bit() && !IsN32;
   bool HasRelocationAddend = TT.isArch64Bit();
-  auto *MOTW = new MipsELFObjectWriter(OSABI, HasRelocationAddend, IsN64,
-                                       TT.isLittleEndian());
-  return createELFObjectWriter(MOTW, OS, TT.isLittleEndian());
+  auto MOTW = llvm::make_unique<MipsELFObjectWriter>(
+      OSABI, HasRelocationAddend, IsN64, TT.isLittleEndian());
+  return createELFObjectWriter(std::move(MOTW), OS, TT.isLittleEndian());
 }
index 1488bd5b0be618a01afb66cf8aabf23cbf3a546e..06d84628374e5870a61de114123c9183b5a7d586 100644 (file)
@@ -420,6 +420,6 @@ MCObjectWriter *llvm::createPPCELFObjectWriter(raw_pwrite_stream &OS,
                                                bool Is64Bit,
                                                bool IsLittleEndian,
                                                uint8_t OSABI) {
-  MCELFObjectTargetWriter *MOTW = new PPCELFObjectWriter(Is64Bit, OSABI);
-  return createELFObjectWriter(MOTW, OS, IsLittleEndian);
+  auto MOTW = llvm::make_unique<PPCELFObjectWriter>(Is64Bit, OSABI);
+  return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
 }
index d35e45e03466566ff04d5d0d0d285bb575accc4c..508d191aa1ca9f43baca7e0df8f12d7128eb47d9 100644 (file)
@@ -135,6 +135,6 @@ MCObjectWriter *llvm::createSparcELFObjectWriter(raw_pwrite_stream &OS,
                                                  bool Is64Bit,
                                                  bool IsLittleEndian,
                                                  uint8_t OSABI) {
-  MCELFObjectTargetWriter *MOTW = new SparcELFObjectWriter(Is64Bit, OSABI);
-  return createELFObjectWriter(MOTW, OS, IsLittleEndian);
+  auto MOTW = llvm::make_unique<SparcELFObjectWriter>(Is64Bit, OSABI);
+  return createELFObjectWriter(std::move(MOTW), OS, IsLittleEndian);
 }
index df0a8161e6e7c81075e8eab726e61fa38af4b0dd..166a3f0e1aaec4b893a81ba7f548f0b4e2d771b1 100644 (file)
@@ -162,6 +162,6 @@ unsigned SystemZObjectWriter::getRelocType(MCContext &Ctx,
 
 MCObjectWriter *llvm::createSystemZObjectWriter(raw_pwrite_stream &OS,
                                                 uint8_t OSABI) {
-  MCELFObjectTargetWriter *MOTW = new SystemZObjectWriter(OSABI);
-  return createELFObjectWriter(MOTW, OS, /*IsLittleEndian=*/false);
+  return createELFObjectWriter(llvm::make_unique<SystemZObjectWriter>(OSABI),
+                               OS, /*IsLittleEndian=*/false);
 }
index 4da4eebec0386af815a0911de5bad0c524886792..7e79941be3443ddafdb0873510297cf93ba05295 100644 (file)
@@ -300,7 +300,6 @@ unsigned X86ELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
 MCObjectWriter *llvm::createX86ELFObjectWriter(raw_pwrite_stream &OS,
                                                bool IsELF64, uint8_t OSABI,
                                                uint16_t EMachine) {
-  MCELFObjectTargetWriter *MOTW =
-    new X86ELFObjectWriter(IsELF64, OSABI, EMachine);
-  return createELFObjectWriter(MOTW, OS,  /*IsLittleEndian=*/true);
+  auto MOTW = llvm::make_unique<X86ELFObjectWriter>(IsELF64, OSABI, EMachine);
+  return createELFObjectWriter(std::move(MOTW), OS, /*IsLittleEndian=*/true);
 }