[lld] r228905 - [ELF] Add LinkingContext to the ELFReader.

Shankar Easwaran shankare at codeaurora.org
Wed Feb 11 21:02:42 PST 2015


Author: shankare
Date: Wed Feb 11 23:02:41 2015
New Revision: 228905

URL: http://llvm.org/viewvc/llvm-project?rev=228905&view=rev
Log:
[ELF] Add LinkingContext to the ELFReader.

This adds the LinkingContext parameter to the ELFReader. Previously the flags in
that were needed in the Context was passed to the ELFReader, this made it very
hard to access data structures in the LinkingContext when reading an ELF file.

This change makes the ELFReader more flexible so that required parameters can be
grabbed directly from the LinkingContext.

Future patches make use of the changes.

There is no change in functionality though.

Modified:
    lld/trunk/include/lld/Core/Reader.h
    lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
    lld/trunk/lib/Driver/GnuLdDriver.cpp
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h
    lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h
    lld/trunk/lib/ReaderWriter/ELF/ELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
    lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h

Modified: lld/trunk/include/lld/Core/Reader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Reader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Reader.h (original)
+++ lld/trunk/include/lld/Core/Reader.h Wed Feb 11 23:02:41 2015
@@ -122,9 +122,8 @@ public:
   void addSupportCOFFObjects(PECOFFLinkingContext &);
   void addSupportCOFFImportLibraries(PECOFFLinkingContext &);
   void addSupportMachOObjects(MachOLinkingContext &);
-  void addSupportELFObjects(bool atomizeStrings, TargetHandlerBase *handler);
-  void addSupportELFDynamicSharedObjects(bool useShlibUndefines,
-                                         TargetHandlerBase *handler);
+  void addSupportELFObjects(ELFLinkingContext &);
+  void addSupportELFDynamicSharedObjects(ELFLinkingContext &);
 
   /// To convert between kind values and names, the registry walks the list
   /// of registered kind tables. Each table is a zero terminated array of

Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Wed Feb 11 23:02:41 2015
@@ -38,9 +38,9 @@ public:
   virtual ~TargetHandlerBase() {}
   virtual void registerRelocationNames(Registry &) = 0;
 
-  virtual std::unique_ptr<Reader> getObjReader(bool) = 0;
+  virtual std::unique_ptr<Reader> getObjReader() = 0;
 
-  virtual std::unique_ptr<Reader> getDSOReader(bool) = 0;
+  virtual std::unique_ptr<Reader> getDSOReader() = 0;
 
   virtual std::unique_ptr<Writer> getWriter() = 0;
 };

Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/GnuLdDriver.cpp Wed Feb 11 23:02:41 2015
@@ -587,15 +587,12 @@ bool GnuLdDriver::parse(int argc, const
   }
 
   // Register possible input file parsers.
-  ctx->registry().addSupportELFObjects(
-      ctx->mergeCommonStrings(),
-      ctx->targetHandler());
+  ctx->registry().addSupportELFObjects(*ctx);
   ctx->registry().addSupportArchives(ctx->logInputFiles());
   ctx->registry().addSupportYamlFiles();
   ctx->registry().addSupportNativeObjects();
   if (ctx->allowLinkWithDynamicLibraries())
-    ctx->registry().addSupportELFDynamicSharedObjects(
-        ctx->useShlibUndefines(), ctx->targetHandler());
+    ctx->registry().addSupportELFDynamicSharedObjects(*ctx);
 
   std::stack<int> groupStack;
   int numfiles = 0;

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h Wed Feb 11 23:02:41 2015
@@ -19,13 +19,13 @@ class AArch64LinkingContext;
 
 template <class ELFT> class AArch64ELFFile : public ELFFile<ELFT> {
 public:
-  AArch64ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
-      : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
+  AArch64ELFFile(std::unique_ptr<MemoryBuffer> mb, AArch64LinkingContext &ctx)
+      : ELFFile<ELFT>(std::move(mb), ctx) {}
 
   static ErrorOr<std::unique_ptr<AArch64ELFFile>>
-  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+  create(std::unique_ptr<MemoryBuffer> mb, AArch64LinkingContext &ctx) {
     return std::unique_ptr<AArch64ELFFile<ELFT>>(
-        new AArch64ELFFile<ELFT>(std::move(mb), atomizeStrings));
+        new AArch64ELFFile<ELFT>(std::move(mb), ctx));
   }
 };
 

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h Wed Feb 11 23:02:41 2015
@@ -23,9 +23,8 @@ struct AArch64DynamicFileCreateELFTraits
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool useUndefines) {
-    return lld::elf::AArch64DynamicFile<ELFT>::create(std::move(mb),
-                                                      useUndefines);
+                            AArch64LinkingContext &ctx) {
+    return lld::elf::AArch64DynamicFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
@@ -34,26 +33,27 @@ struct AArch64ELFFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool atomizeStrings) {
-    return lld::elf::AArch64ELFFile<ELFT>::create(std::move(mb),
-                                                  atomizeStrings);
+                            AArch64LinkingContext &ctx) {
+    return lld::elf::AArch64ELFFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
 class AArch64ELFObjectReader
-    : public ELFObjectReader<AArch64ELFType, AArch64ELFFileCreateELFTraits> {
+    : public ELFObjectReader<AArch64ELFType, AArch64ELFFileCreateELFTraits,
+                             AArch64LinkingContext> {
 public:
-  AArch64ELFObjectReader(bool atomizeStrings)
-      : ELFObjectReader<AArch64ELFType, AArch64ELFFileCreateELFTraits>(
-            atomizeStrings, llvm::ELF::EM_AARCH64) {}
+  AArch64ELFObjectReader(AArch64LinkingContext &ctx)
+      : ELFObjectReader<AArch64ELFType, AArch64ELFFileCreateELFTraits,
+                        AArch64LinkingContext>(ctx, llvm::ELF::EM_AARCH64) {}
 };
 
 class AArch64ELFDSOReader
-    : public ELFDSOReader<AArch64ELFType, AArch64DynamicFileCreateELFTraits> {
+    : public ELFDSOReader<AArch64ELFType, AArch64DynamicFileCreateELFTraits,
+                          AArch64LinkingContext> {
 public:
-  AArch64ELFDSOReader(bool useUndefines)
-      : ELFDSOReader<AArch64ELFType, AArch64DynamicFileCreateELFTraits>(
-            useUndefines, llvm::ELF::EM_AARCH64) {}
+  AArch64ELFDSOReader(AArch64LinkingContext &ctx)
+      : ELFDSOReader<AArch64ELFType, AArch64DynamicFileCreateELFTraits,
+                     AArch64LinkingContext>(ctx, llvm::ELF::EM_AARCH64) {}
 };
 
 } // namespace elf

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h Wed Feb 11 23:02:41 2015
@@ -41,12 +41,12 @@ public:
     return *(_AArch64RelocationHandler.get());
   }
 
-  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
-    return std::unique_ptr<Reader>(new AArch64ELFObjectReader(atomizeStrings));
+  std::unique_ptr<Reader> getObjReader() override {
+    return std::unique_ptr<Reader>(new AArch64ELFObjectReader(_context));
   }
 
-  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
-    return std::unique_ptr<Reader>(new AArch64ELFDSOReader(useShlibUndefines));
+  std::unique_ptr<Reader> getDSOReader() override {
+    return std::unique_ptr<Reader>(new AArch64ELFDSOReader(_context));
   }
 
   std::unique_ptr<Writer> getWriter() override;

Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFFile.h Wed Feb 11 23:02:41 2015
@@ -52,13 +52,13 @@ public:
 
 template <class ELFT> class ARMELFFile : public ELFFile<ELFT> {
 public:
-  ARMELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
-      : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
+  ARMELFFile(std::unique_ptr<MemoryBuffer> mb, ARMLinkingContext &ctx)
+      : ELFFile<ELFT>(std::move(mb), ctx) {}
 
   static ErrorOr<std::unique_ptr<ARMELFFile>>
-  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+  create(std::unique_ptr<MemoryBuffer> mb, ARMLinkingContext &ctx) {
     return std::unique_ptr<ARMELFFile<ELFT>>(
-        new ARMELFFile<ELFT>(std::move(mb), atomizeStrings));
+        new ARMELFFile<ELFT>(std::move(mb), ctx));
   }
 
 private:

Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMELFReader.h Wed Feb 11 23:02:41 2015
@@ -23,8 +23,8 @@ struct ARMDynamicFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool useUndefines) {
-    return lld::elf::ARMDynamicFile<ELFT>::create(std::move(mb), useUndefines);
+                            ARMLinkingContext &ctx) {
+    return lld::elf::ARMDynamicFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
@@ -33,25 +33,27 @@ struct ARMELFFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool atomizeStrings) {
-    return lld::elf::ARMELFFile<ELFT>::create(std::move(mb), atomizeStrings);
+                            ARMLinkingContext &ctx) {
+    return lld::elf::ARMELFFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
 class ARMELFObjectReader
-    : public ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits> {
+    : public ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits,
+                             ARMLinkingContext> {
 public:
-  ARMELFObjectReader(bool atomizeStrings)
-      : ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits>(
-            atomizeStrings, llvm::ELF::EM_ARM) {}
+  ARMELFObjectReader(ARMLinkingContext &ctx)
+      : ELFObjectReader<ARMELFType, ARMELFFileCreateELFTraits,
+                        ARMLinkingContext>(ctx, llvm::ELF::EM_ARM) {}
 };
 
 class ARMELFDSOReader
-    : public ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits> {
+    : public ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits,
+                          ARMLinkingContext> {
 public:
-  ARMELFDSOReader(bool useUndefines)
-      : ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits>(
-            useUndefines, llvm::ELF::EM_ARM) {}
+  ARMELFDSOReader(ARMLinkingContext &ctx)
+      : ELFDSOReader<ARMELFType, ARMDynamicFileCreateELFTraits,
+                     ARMLinkingContext>(ctx, llvm::ELF::EM_ARM) {}
 };
 
 } // namespace elf

Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h Wed Feb 11 23:02:41 2015
@@ -45,12 +45,12 @@ public:
     return *(_armRelocationHandler.get());
   }
 
-  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
-    return std::unique_ptr<Reader>(new ARMELFObjectReader(atomizeStrings));
+  std::unique_ptr<Reader> getObjReader() override {
+    return std::unique_ptr<Reader>(new ARMELFObjectReader(_context));
   }
 
-  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
-    return std::unique_ptr<Reader>(new ARMELFDSOReader(useShlibUndefines));
+  std::unique_ptr<Reader> getDSOReader() override {
+    return std::unique_ptr<Reader>(new ARMELFDSOReader(_context));
   }
 
   std::unique_ptr<Writer> getWriter() override;

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h Wed Feb 11 23:02:41 2015
@@ -26,9 +26,9 @@ class DefaultTargetHandler : public Targ
 public:
   const TargetRelocationHandler &getRelocationHandler() const = 0;
 
-  virtual std::unique_ptr<Reader> getObjReader(bool atomizeStrings) = 0;
+  virtual std::unique_ptr<Reader> getObjReader() = 0;
 
-  virtual std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) = 0;
+  virtual std::unique_ptr<Reader> getDSOReader() = 0;
 
   virtual std::unique_ptr<Writer> getWriter() = 0;
 };

Modified: lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h Wed Feb 11 23:02:41 2015
@@ -22,7 +22,7 @@ namespace elf {
 template <class ELFT> class DynamicFile : public SharedLibraryFile {
 public:
   static ErrorOr<std::unique_ptr<DynamicFile>>
-  create(std::unique_ptr<llvm::MemoryBuffer> mb, bool useShlibUndefines);
+  create(std::unique_ptr<llvm::MemoryBuffer> mb, ELFLinkingContext &ctx);
 
   const SharedLibraryAtom *exports(StringRef name,
                                    bool dataSymbolOnly) const override {
@@ -84,9 +84,9 @@ protected:
   }
 
 private:
-  DynamicFile(std::unique_ptr<MemoryBuffer> mb, bool useShlibUndefines)
-      : SharedLibraryFile(mb->getBufferIdentifier()),
-        _mb(std::move(mb)), _useShlibUndefines(useShlibUndefines) {}
+  DynamicFile(std::unique_ptr<MemoryBuffer> mb, ELFLinkingContext &ctx)
+      : SharedLibraryFile(mb->getBufferIdentifier()), _mb(std::move(mb)),
+        _ctx(ctx), _useShlibUndefines(ctx.useShlibUndefines()) {}
 
   mutable llvm::BumpPtrAllocator _alloc;
   std::unique_ptr<llvm::object::ELFFile<ELFT>> _objFile;
@@ -100,6 +100,7 @@ private:
   };
 
   std::unique_ptr<MemoryBuffer> _mb;
+  ELFLinkingContext &_ctx;
   bool _useShlibUndefines;
   mutable std::unordered_map<StringRef, SymAtomPair> _nameToSym;
 };
@@ -107,9 +108,8 @@ private:
 template <class ELFT>
 ErrorOr<std::unique_ptr<DynamicFile<ELFT>>>
 DynamicFile<ELFT>::create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                          bool useShlibUndefines) {
-  return std::unique_ptr<DynamicFile>(
-      new DynamicFile(std::move(mb), useShlibUndefines));
+                          ELFLinkingContext &ctx) {
+  return std::unique_ptr<DynamicFile>(new DynamicFile(std::move(mb), ctx));
 }
 
 } // end namespace elf

Modified: lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h Wed Feb 11 23:02:41 2015
@@ -25,8 +25,7 @@ class DynamicLibraryWriter;
 template<class ELFT>
 class DynamicLibraryWriter : public OutputELFWriter<ELFT> {
 public:
-  DynamicLibraryWriter(const ELFLinkingContext &context,
-                       TargetLayout<ELFT> &layout)
+  DynamicLibraryWriter(ELFLinkingContext &context, TargetLayout<ELFT> &layout)
       : OutputELFWriter<ELFT>(context, layout),
         _runtimeFile(new CRuntimeFile<ELFT>(context)) {}
 

Modified: lld/trunk/lib/ReaderWriter/ELF/ELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFFile.h Wed Feb 11 23:02:41 2015
@@ -115,17 +115,18 @@ template <class ELFT> class ELFFile : pu
   typedef typename MergedSectionMapT::iterator MergedSectionMapIterT;
 
 public:
-  ELFFile(StringRef name)
-      : File(name, kindObject), _ordinal(0), _doStringsMerge(false) {
+  ELFFile(StringRef name, ELFLinkingContext &ctx)
+      : File(name, kindObject), _ordinal(0),
+        _doStringsMerge(ctx.mergeCommonStrings()), _ctx(ctx) {
     setLastError(std::error_code());
   }
 
-  ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings = false)
+  ELFFile(std::unique_ptr<MemoryBuffer> mb, ELFLinkingContext &ctx)
       : File(mb->getBufferIdentifier(), kindObject), _mb(std::move(mb)),
-        _ordinal(0), _doStringsMerge(atomizeStrings) {}
+        _ordinal(0), _doStringsMerge(ctx.mergeCommonStrings()), _ctx(ctx) {}
 
   static ErrorOr<std::unique_ptr<ELFFile>>
-  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings);
+  create(std::unique_ptr<MemoryBuffer> mb, ELFLinkingContext &ctx);
 
   virtual Reference::KindArch kindArch();
 
@@ -360,6 +361,9 @@ protected:
 
   /// \brief the cached options relevant while reading the ELF File
   bool _doStringsMerge;
+
+  /// \brief The LinkingContext.
+  ELFLinkingContext &_ctx;
 };
 
 /// \brief All atoms are owned by a File. To add linker specific atoms
@@ -370,8 +374,8 @@ protected:
 template <class ELFT> class CRuntimeFile : public ELFFile<ELFT> {
 public:
   typedef llvm::object::Elf_Sym_Impl<ELFT> Elf_Sym;
-  CRuntimeFile(const ELFLinkingContext &context, StringRef name = "C runtime")
-      : ELFFile<ELFT>(name) {}
+  CRuntimeFile(ELFLinkingContext &context, StringRef name = "C runtime")
+      : ELFFile<ELFT>(name, context) {}
 
   /// \brief add a global absolute atom
   virtual Atom *addAbsoluteAtom(StringRef symbolName) {
@@ -411,9 +415,9 @@ public:
 
 template <class ELFT>
 ErrorOr<std::unique_ptr<ELFFile<ELFT>>>
-ELFFile<ELFT>::create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
-  std::unique_ptr<ELFFile<ELFT>> file(
-      new ELFFile<ELFT>(std::move(mb), atomizeStrings));
+ELFFile<ELFT>::create(std::unique_ptr<MemoryBuffer> mb,
+                      ELFLinkingContext &ctx) {
+  std::unique_ptr<ELFFile<ELFT>> file(new ELFFile<ELFT>(std::move(mb), ctx));
   return std::move(file);
 }
 

Modified: lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFReader.h Wed Feb 11 23:02:41 2015
@@ -18,13 +18,13 @@
 namespace lld {
 namespace elf {
 
-template <typename ELFT, typename ELFTraitsT>
+template <typename ELFT, typename ELFTraitsT, typename ContextT>
 class ELFObjectReader : public Reader {
 public:
   typedef llvm::object::Elf_Ehdr_Impl<ELFT> Elf_Ehdr;
 
-  ELFObjectReader(bool atomizeStrings, uint64_t machine)
-      : _atomizeStrings(atomizeStrings), _machine(machine) {}
+  ELFObjectReader(ContextT &ctx, uint64_t machine)
+      : _ctx(ctx), _machine(machine) {}
 
   bool canParse(file_magic magic, StringRef,
                 const MemoryBuffer &buf) const override {
@@ -39,7 +39,7 @@ public:
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
     auto f =
         createELF<ELFTraitsT>(llvm::object::getElfArchType(mb->getBuffer()),
-                              maxAlignment, std::move(mb), _atomizeStrings);
+                              maxAlignment, std::move(mb), _ctx);
     if (std::error_code ec = f.getError())
       return ec;
     result.push_back(std::move(*f));
@@ -53,17 +53,17 @@ public:
   }
 
 protected:
-  bool _atomizeStrings;
+  ContextT &_ctx;
   uint64_t _machine;
 };
 
-template <typename ELFT, typename ELFTraitsT>
+template <typename ELFT, typename ELFTraitsT, typename ContextT>
 class ELFDSOReader : public Reader {
 public:
   typedef llvm::object::Elf_Ehdr_Impl<ELFT> Elf_Ehdr;
 
-  ELFDSOReader(bool useUndefines, uint64_t machine)
-      : _useUndefines(useUndefines), _machine(machine) {}
+  ELFDSOReader(ContextT &ctx, uint64_t machine)
+      : _ctx(ctx), _machine(machine) {}
 
   bool canParse(file_magic magic, StringRef,
                 const MemoryBuffer &buf) const override {
@@ -78,7 +78,7 @@ public:
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
     auto f =
         createELF<ELFTraitsT>(llvm::object::getElfArchType(mb->getBuffer()),
-                              maxAlignment, std::move(mb), _useUndefines);
+                              maxAlignment, std::move(mb), _ctx);
     if (std::error_code ec = f.getError())
       return ec;
     result.push_back(std::move(*f));
@@ -92,7 +92,7 @@ public:
   }
 
 protected:
-  bool _useUndefines;
+  ContextT &_ctx;
   uint64_t _machine;
 };
 

Modified: lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h Wed Feb 11 23:02:41 2015
@@ -25,7 +25,7 @@ class ExecutableWriter;
 template<class ELFT>
 class ExecutableWriter : public OutputELFWriter<ELFT> {
 public:
-  ExecutableWriter(const ELFLinkingContext &context, TargetLayout<ELFT> &layout)
+  ExecutableWriter(ELFLinkingContext &context, TargetLayout<ELFT> &layout)
       : OutputELFWriter<ELFT>(context, layout),
         _runtimeFile(new CRuntimeFile<ELFT>(context)) {}
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFFile.h Wed Feb 11 23:02:41 2015
@@ -114,13 +114,13 @@ template <class ELFT> class HexagonELFFi
   typedef llvm::object::Elf_Shdr_Impl<ELFT> Elf_Shdr;
 
 public:
-  HexagonELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
-      : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
+  HexagonELFFile(std::unique_ptr<MemoryBuffer> mb, HexagonLinkingContext &ctx)
+      : ELFFile<ELFT>(std::move(mb), ctx) {}
 
   static ErrorOr<std::unique_ptr<HexagonELFFile>>
-  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+  create(std::unique_ptr<MemoryBuffer> mb, HexagonLinkingContext &ctx) {
     return std::unique_ptr<HexagonELFFile<ELFT>>(
-        new HexagonELFFile<ELFT>(std::move(mb), atomizeStrings));
+        new HexagonELFFile<ELFT>(std::move(mb), ctx));
   }
 
   bool isCommonSymbol(const Elf_Sym *symbol) const override {

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonELFReader.h Wed Feb 11 23:02:41 2015
@@ -23,9 +23,8 @@ struct HexagonDynamicFileCreateELFTraits
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool useUndefines) {
-    return lld::elf::HexagonDynamicFile<ELFT>::create(std::move(mb),
-                                                      useUndefines);
+                            HexagonLinkingContext &ctx) {
+    return lld::elf::HexagonDynamicFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
@@ -34,26 +33,27 @@ struct HexagonELFFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool atomizeStrings) {
-    return lld::elf::HexagonELFFile<ELFT>::create(std::move(mb),
-                                                  atomizeStrings);
+                            HexagonLinkingContext &ctx) {
+    return lld::elf::HexagonELFFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
 class HexagonELFObjectReader
-    : public ELFObjectReader<HexagonELFType, HexagonELFFileCreateELFTraits> {
+    : public ELFObjectReader<HexagonELFType, HexagonELFFileCreateELFTraits,
+                             HexagonLinkingContext> {
 public:
-  HexagonELFObjectReader(bool atomizeStrings)
-      : ELFObjectReader<HexagonELFType, HexagonELFFileCreateELFTraits>(
-            atomizeStrings, llvm::ELF::EM_HEXAGON) {}
+  HexagonELFObjectReader(HexagonLinkingContext &ctx)
+      : ELFObjectReader<HexagonELFType, HexagonELFFileCreateELFTraits,
+                        HexagonLinkingContext>(ctx, llvm::ELF::EM_HEXAGON) {}
 };
 
 class HexagonELFDSOReader
-    : public ELFDSOReader<HexagonELFType, HexagonDynamicFileCreateELFTraits> {
+    : public ELFDSOReader<HexagonELFType, HexagonDynamicFileCreateELFTraits,
+                          HexagonLinkingContext> {
 public:
-  HexagonELFDSOReader(bool useUndefines)
-      : ELFDSOReader<HexagonELFType, HexagonDynamicFileCreateELFTraits>(
-            useUndefines, llvm::ELF::EM_HEXAGON) {}
+  HexagonELFDSOReader(HexagonLinkingContext &ctx)
+      : ELFDSOReader<HexagonELFType, HexagonDynamicFileCreateELFTraits,
+                     HexagonLinkingContext>(ctx, llvm::ELF::EM_HEXAGON) {}
 };
 
 } // namespace elf

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h Wed Feb 11 23:02:41 2015
@@ -20,7 +20,7 @@ class HexagonLinkingContext;
 template <class HexagonELFType> class HexagonRuntimeFile
   : public CRuntimeFile<HexagonELFType> {
 public:
-  HexagonRuntimeFile(const HexagonLinkingContext &context)
+  HexagonRuntimeFile(HexagonLinkingContext &context)
       : CRuntimeFile<HexagonELFType>(context, "Hexagon runtime file") {}
 };
 } // elf

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h Wed Feb 11 23:02:41 2015
@@ -117,12 +117,14 @@ public:
     return *(_hexagonTargetLayout.get());
   }
 
-  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
-    return std::unique_ptr<Reader>(new HexagonELFObjectReader(atomizeStrings));
+  std::unique_ptr<Reader> getObjReader() override {
+    return std::unique_ptr<Reader>(
+        new HexagonELFObjectReader(_hexagonLinkingContext));
   }
 
-  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
-    return std::unique_ptr<Reader>(new HexagonELFDSOReader(useShlibUndefines));
+  std::unique_ptr<Reader> getDSOReader() override {
+    return std::unique_ptr<Reader>(
+        new HexagonELFDSOReader(_hexagonLinkingContext));
   }
 
   std::unique_ptr<Writer> getWriter() override;

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h Wed Feb 11 23:02:41 2015
@@ -80,13 +80,13 @@ public:
 
 template <class ELFT> class MipsELFFile : public ELFFile<ELFT> {
 public:
-  MipsELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
-      : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
+  MipsELFFile(std::unique_ptr<MemoryBuffer> mb, MipsLinkingContext &ctx)
+      : ELFFile<ELFT>(std::move(mb), ctx) {}
 
   static ErrorOr<std::unique_ptr<MipsELFFile>>
-  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+  create(std::unique_ptr<MemoryBuffer> mb, MipsLinkingContext &ctx) {
     return std::unique_ptr<MipsELFFile<ELFT>>(
-        new MipsELFFile<ELFT>(std::move(mb), atomizeStrings));
+        new MipsELFFile<ELFT>(std::move(mb), ctx));
   }
 
   bool isPIC() const {

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFReader.h Wed Feb 11 23:02:41 2015
@@ -22,8 +22,8 @@ struct MipsELFFileCreateTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool atomizeStrings) {
-    return lld::elf::MipsELFFile<ELFT>::create(std::move(mb), atomizeStrings);
+                            MipsLinkingContext &ctx) {
+    return lld::elf::MipsELFFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
@@ -32,19 +32,21 @@ struct MipsDynamicFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool useUndefines) {
-    return lld::elf::MipsDynamicFile<ELFT>::create(std::move(mb), useUndefines);
+                            MipsLinkingContext &ctx) {
+    return lld::elf::MipsDynamicFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
 template <class ELFT>
 class MipsELFObjectReader
-    : public ELFObjectReader<ELFT, MipsELFFileCreateTraits> {
-  typedef ELFObjectReader<ELFT, MipsELFFileCreateTraits> BaseReaderType;
+    : public ELFObjectReader<ELFT, MipsELFFileCreateTraits,
+                             MipsLinkingContext> {
+  typedef ELFObjectReader<ELFT, MipsELFFileCreateTraits, MipsLinkingContext>
+      BaseReaderType;
 
 public:
-  MipsELFObjectReader(MipsLinkingContext &ctx, bool atomizeStrings)
-      : BaseReaderType(atomizeStrings, llvm::ELF::EM_MIPS),
+  MipsELFObjectReader(MipsLinkingContext &ctx)
+      : BaseReaderType(ctx, llvm::ELF::EM_MIPS),
         _flagMerger(ctx.getELFFlagsMerger()) {}
 
   std::error_code
@@ -62,12 +64,14 @@ private:
 
 template <class ELFT>
 class MipsELFDSOReader
-    : public ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits> {
-  typedef ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits> BaseReaderType;
+    : public ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits,
+                          MipsLinkingContext> {
+  typedef ELFDSOReader<ELFT, MipsDynamicFileCreateELFTraits, MipsLinkingContext>
+      BaseReaderType;
 
 public:
-  MipsELFDSOReader(MipsLinkingContext &ctx, bool useUndefines)
-      : BaseReaderType(useUndefines, llvm::ELF::EM_MIPS),
+  MipsELFDSOReader(MipsLinkingContext &ctx)
+      : BaseReaderType(ctx, llvm::ELF::EM_MIPS),
         _flagMerger(ctx.getELFFlagsMerger()) {}
 
   std::error_code

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h Wed Feb 11 23:02:41 2015
@@ -79,7 +79,7 @@ private:
 template <class ELFType>
 class MipsRuntimeFile final : public CRuntimeFile<ELFType> {
 public:
-  MipsRuntimeFile(const MipsLinkingContext &ctx)
+  MipsRuntimeFile(MipsLinkingContext &ctx)
       : CRuntimeFile<ELFType>(ctx, "Mips runtime file") {}
 };
 
@@ -102,14 +102,12 @@ public:
 
   MipsTargetLayout<ELFT> &getTargetLayout() override { return *_targetLayout; }
 
-  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
-    return std::unique_ptr<Reader>(
-        new MipsELFObjectReader<ELFT>(_ctx, atomizeStrings));
+  std::unique_ptr<Reader> getObjReader() override {
+    return std::unique_ptr<Reader>(new MipsELFObjectReader<ELFT>(_ctx));
   }
 
-  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
-    return std::unique_ptr<Reader>(
-        new MipsELFDSOReader<ELFT>(_ctx, useShlibUndefines));
+  std::unique_ptr<Reader> getDSOReader() override {
+    return std::unique_ptr<Reader>(new MipsELFDSOReader<ELFT>(_ctx));
   }
 
   const TargetRelocationHandler &getRelocationHandler() const override {

Modified: lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Reader.cpp?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Reader.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Reader.cpp Wed Feb 11 23:02:41 2015
@@ -26,20 +26,18 @@ namespace lld {
 // architectures to be pulled into the linker.  If we want to support making a
 // linker that only supports one ELF architecture, we'd need to change this
 // to have a different registration method for each architecture.
-void Registry::addSupportELFObjects(bool atomizeStrings,
-                                    TargetHandlerBase *handler) {
+void Registry::addSupportELFObjects(ELFLinkingContext &ctx) {
 
   // Tell registry about the ELF object file parser.
-  add(std::move(handler->getObjReader(atomizeStrings)));
+  add(std::move(ctx.targetHandler()->getObjReader()));
 
   // Tell registry about the relocation name to number mapping for this arch.
-  handler->registerRelocationNames(*this);
+  ctx.targetHandler()->registerRelocationNames(*this);
 }
 
-void Registry::addSupportELFDynamicSharedObjects(bool useShlibUndefines,
-                                                 TargetHandlerBase *handler) {
+void Registry::addSupportELFDynamicSharedObjects(ELFLinkingContext &ctx) {
   // Tell registry about the ELF dynamic shared library file parser.
-  add(handler->getDSOReader(useShlibUndefines));
+  add(ctx.targetHandler()->getDSOReader());
 }
 
 } // end namespace lld

Modified: lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h Wed Feb 11 23:02:41 2015
@@ -63,10 +63,10 @@ public:
   virtual const TargetRelocationHandler &getRelocationHandler() const = 0;
 
   /// How does the target deal with reading input files.
-  virtual std::unique_ptr<Reader> getObjReader(bool) = 0;
+  virtual std::unique_ptr<Reader> getObjReader() = 0;
 
   /// How does the target deal with reading dynamic libraries.
-  virtual std::unique_ptr<Reader> getDSOReader(bool) = 0;
+  virtual std::unique_ptr<Reader> getDSOReader() = 0;
 
   /// How does the target deal with writing ELF output.
   virtual std::unique_ptr<Writer> getWriter() = 0;

Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h Wed Feb 11 23:02:41 2015
@@ -19,13 +19,13 @@ class X86LinkingContext;
 
 template <class ELFT> class X86ELFFile : public ELFFile<ELFT> {
 public:
-  X86ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
-      : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
+  X86ELFFile(std::unique_ptr<MemoryBuffer> mb, X86LinkingContext &ctx)
+      : ELFFile<ELFT>(std::move(mb), ctx) {}
 
   static ErrorOr<std::unique_ptr<X86ELFFile>>
-  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+  create(std::unique_ptr<MemoryBuffer> mb, X86LinkingContext &ctx) {
     return std::unique_ptr<X86ELFFile<ELFT>>(
-        new X86ELFFile<ELFT>(std::move(mb), atomizeStrings));
+        new X86ELFFile<ELFT>(std::move(mb), ctx));
   }
 };
 

Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h Wed Feb 11 23:02:41 2015
@@ -23,8 +23,8 @@ struct X86DynamicFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool useUndefines) {
-    return lld::elf::X86DynamicFile<ELFT>::create(std::move(mb), useUndefines);
+                            X86LinkingContext &ctx) {
+    return lld::elf::X86DynamicFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
@@ -33,25 +33,27 @@ struct X86ELFFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool atomizeStrings) {
-    return lld::elf::X86ELFFile<ELFT>::create(std::move(mb), atomizeStrings);
+                            X86LinkingContext &ctx) {
+    return lld::elf::X86ELFFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
 class X86ELFObjectReader
-    : public ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits> {
+    : public ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits,
+                             X86LinkingContext> {
 public:
-  X86ELFObjectReader(bool atomizeStrings)
-      : ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits>(
-            atomizeStrings, llvm::ELF::EM_386) {}
+  X86ELFObjectReader(X86LinkingContext &ctx)
+      : ELFObjectReader<X86ELFType, X86ELFFileCreateELFTraits,
+                        X86LinkingContext>(ctx, llvm::ELF::EM_386) {}
 };
 
 class X86ELFDSOReader
-    : public ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits> {
+    : public ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits,
+                          X86LinkingContext> {
 public:
-  X86ELFDSOReader(bool useUndefines)
-      : ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits>(
-            useUndefines, llvm::ELF::EM_386) {}
+  X86ELFDSOReader(X86LinkingContext &ctx)
+      : ELFDSOReader<X86ELFType, X86DynamicFileCreateELFTraits,
+                     X86LinkingContext>(ctx, llvm::ELF::EM_386) {}
 };
 
 } // namespace elf

Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h Wed Feb 11 23:02:41 2015
@@ -41,12 +41,12 @@ public:
     return *(_x86RelocationHandler.get());
   }
 
-  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
-    return std::unique_ptr<Reader>(new X86ELFObjectReader(atomizeStrings));
+  std::unique_ptr<Reader> getObjReader() override {
+    return std::unique_ptr<Reader>(new X86ELFObjectReader(_x86LinkingContext));
   }
 
-  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
-    return std::unique_ptr<Reader>(new X86ELFDSOReader(useShlibUndefines));
+  std::unique_ptr<Reader> getDSOReader() override {
+    return std::unique_ptr<Reader>(new X86ELFDSOReader(_x86LinkingContext));
   }
 
   std::unique_ptr<Writer> getWriter() override;

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h Wed Feb 11 23:02:41 2015
@@ -19,13 +19,13 @@ class X86_64LinkingContext;
 
 template <class ELFT> class X86_64ELFFile : public ELFFile<ELFT> {
 public:
-  X86_64ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings)
-      : ELFFile<ELFT>(std::move(mb), atomizeStrings) {}
+  X86_64ELFFile(std::unique_ptr<MemoryBuffer> mb, X86_64LinkingContext &ctx)
+      : ELFFile<ELFT>(std::move(mb), ctx) {}
 
   static ErrorOr<std::unique_ptr<X86_64ELFFile>>
-  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+  create(std::unique_ptr<MemoryBuffer> mb, X86_64LinkingContext &ctx) {
     return std::unique_ptr<X86_64ELFFile<ELFT>>(
-        new X86_64ELFFile<ELFT>(std::move(mb), atomizeStrings));
+        new X86_64ELFFile<ELFT>(std::move(mb), ctx));
   }
 };
 

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h Wed Feb 11 23:02:41 2015
@@ -23,9 +23,8 @@ struct X86_64DynamicFileCreateELFTraits
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool useUndefines) {
-    return lld::elf::X86_64DynamicFile<ELFT>::create(std::move(mb),
-                                                     useUndefines);
+                            X86_64LinkingContext &ctx) {
+    return lld::elf::X86_64DynamicFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
@@ -34,25 +33,27 @@ struct X86_64ELFFileCreateELFTraits {
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
-                            bool atomizeStrings) {
-    return lld::elf::X86_64ELFFile<ELFT>::create(std::move(mb), atomizeStrings);
+                            X86_64LinkingContext &ctx) {
+    return lld::elf::X86_64ELFFile<ELFT>::create(std::move(mb), ctx);
   }
 };
 
 class X86_64ELFObjectReader
-    : public ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits> {
+    : public ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits,
+                             X86_64LinkingContext> {
 public:
-  X86_64ELFObjectReader(bool atomizeStrings)
-      : ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits>(
-            atomizeStrings, llvm::ELF::EM_X86_64) {}
+  X86_64ELFObjectReader(X86_64LinkingContext &ctx)
+      : ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits,
+                        X86_64LinkingContext>(ctx, llvm::ELF::EM_X86_64) {}
 };
 
 class X86_64ELFDSOReader
-    : public ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits> {
+    : public ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits,
+                          X86_64LinkingContext> {
 public:
-  X86_64ELFDSOReader(bool useUndefines)
-      : ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits>(
-            useUndefines, llvm::ELF::EM_X86_64) {}
+  X86_64ELFDSOReader(X86_64LinkingContext &ctx)
+      : ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits,
+                     X86_64LinkingContext>(ctx, llvm::ELF::EM_X86_64) {}
 };
 
 } // namespace elf

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h?rev=228905&r1=228904&r2=228905&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h Wed Feb 11 23:02:41 2015
@@ -42,12 +42,12 @@ public:
     return *(_x86_64RelocationHandler.get());
   }
 
-  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
-    return std::unique_ptr<Reader>(new X86_64ELFObjectReader(atomizeStrings));
+  std::unique_ptr<Reader> getObjReader() override {
+    return std::unique_ptr<Reader>(new X86_64ELFObjectReader(_context));
   }
 
-  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
-    return std::unique_ptr<Reader>(new X86_64ELFDSOReader(useShlibUndefines));
+  std::unique_ptr<Reader> getDSOReader() override {
+    return std::unique_ptr<Reader>(new X86_64ELFDSOReader(_context));
   }
 
   std::unique_ptr<Writer> getWriter() override;





More information about the llvm-commits mailing list