[lld] r220129 - [ELF] Add Readers for all the ELF subtargets.

Shankar Easwaran shankarke at gmail.com
Fri Oct 17 22:23:18 PDT 2014


Author: shankare
Date: Sat Oct 18 00:23:17 2014
New Revision: 220129

URL: http://llvm.org/viewvc/llvm-project?rev=220129&view=rev
Log:
[ELF] Add Readers for all the ELF subtargets.

This would permit the ELF reader to check the architecture that is being
selected by the linking process.

This patch also sorts the include files according to LLVM conventions.

Added:
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h
      - copied, changed from r220117, lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86DynamicLibraryWriter.h
      - copied, changed from r220117, lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h
      - copied, changed from r220117, lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86ExecutableWriter.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h
      - copied, changed from r220117, lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
Modified:
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64RelocationPass.cpp
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp
    lld/trunk/lib/ReaderWriter/ELF/Atoms.h
    lld/trunk/lib/ReaderWriter/ELF/Chunk.h
    lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
    lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h
    lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
    lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/Layout.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsCtorsOrderPass.cpp
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
    lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.h
    lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
    lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
    lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h
    lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/TargetLayout.h
    lld/trunk/lib/ReaderWriter/ELF/Targets.h
    lld/trunk/lib/ReaderWriter/ELF/Writer.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86/CMakeLists.txt
    lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.h
    lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationPass.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h
    lld/trunk/test/elf/symbols.test

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h Sat Oct 18 00:23:17 2014
@@ -9,8 +9,8 @@
 #ifndef AARCH64_DYNAMIC_LIBRARY_WRITER_H
 #define AARCH64_DYNAMIC_LIBRARY_WRITER_H
 
-#include "DynamicLibraryWriter.h"
 #include "AArch64LinkingContext.h"
+#include "DynamicLibraryWriter.h"
 
 namespace lld {
 namespace elf {

Added: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h?rev=220129&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h (added)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h Sat Oct 18 00:23:17 2014
@@ -0,0 +1,73 @@
+//===- lib/ReaderWriter/ELF/AArch64/AArch64ELFFile.h ----------------------===//
+//
+//                             The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_READER_WRITER_ELF_AARCH64_AARCH64_ELF_FILE_H
+#define LLD_READER_WRITER_ELF_AARCH64_AARCH64_ELF_FILE_H
+
+#include "ELFReader.h"
+
+namespace lld {
+namespace elf {
+
+class AArch64LinkingContext;
+
+template <class ELFT> class AArch64ELFFile : public ELFFile<ELFT> {
+public:
+  AArch64ELFFile(StringRef name, bool atomizeStrings)
+      : ELFFile<ELFT>(name, atomizeStrings) {}
+
+  AArch64ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings,
+                 std::error_code &ec)
+      : ELFFile<ELFT>(std::move(mb), atomizeStrings, ec) {}
+
+  static ErrorOr<std::unique_ptr<AArch64ELFFile>>
+  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+    std::error_code ec;
+    std::unique_ptr<AArch64ELFFile<ELFT>> file(
+        new AArch64ELFFile<ELFT>(mb->getBufferIdentifier(), atomizeStrings));
+
+    file->_objFile.reset(
+        new llvm::object::ELFFile<ELFT>(mb.release()->getBuffer(), ec));
+
+    if (ec)
+      return ec;
+
+    // Read input sections from the input file that need to be converted to
+    // atoms
+    if ((ec = file->createAtomizableSections()))
+      return ec;
+
+    // For mergeable strings, we would need to split the section into various
+    // atoms
+    if ((ec = file->createMergeableAtoms()))
+      return ec;
+
+    // Create the necessary symbols that are part of the section that we
+    // created in createAtomizableSections function
+    if ((ec = file->createSymbolsFromAtomizableSections()))
+      return ec;
+
+    // Create the appropriate atoms from the file
+    if ((ec = file->createAtoms()))
+      return ec;
+
+    return std::move(file);
+  }
+};
+
+template <class ELFT> class AArch64DynamicFile : public DynamicFile<ELFT> {
+public:
+  AArch64DynamicFile(const AArch64LinkingContext &context, StringRef name)
+      : DynamicFile<ELFT>(context, name) {}
+};
+
+} // elf
+} // lld
+
+#endif // LLD_READER_WRITER_ELF_AARCH64_AARCH64_ELF_FILE_H

Copied: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h (from r220117, lld/trunk/lib/ReaderWriter/ELF/ELFReader.h)
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h?p2=lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h&p1=lld/trunk/lib/ReaderWriter/ELF/ELFReader.h&r1=220117&r2=220129&rev=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h Sat Oct 18 00:23:17 2014
@@ -1,4 +1,4 @@
-//===- lib/ReaderWriter/ELF/ELFReader.h -----------------------------------===//
+//===- lib/ReaderWriter/ELF/AArch64/AArch64ELFReader.h --------------------===//
 //
 //                             The LLVM Linker
 //
@@ -7,53 +7,48 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLD_READER_WRITER_ELF_READER_H
-#define LLD_READER_WRITER_ELF_READER_H
+#ifndef LLD_READER_WRITER_AARCH64_AARCH64_ELF_READER_H
+#define LLD_READER_WRITER_AARCH64_AARCH64_ELF_READER_H
 
-#include "CreateELF.h"
-#include "DynamicFile.h"
-#include "ELFFile.h"
-
-#include "lld/ReaderWriter/Reader.h"
+#include "AArch64ELFFile.h"
+#include "ELFReader.h"
 
 namespace lld {
 namespace elf {
 
-struct DynamicFileCreateELFTraits {
+struct AArch64DynamicFileCreateELFTraits {
   typedef llvm::ErrorOr<std::unique_ptr<lld::SharedLibraryFile>> result_type;
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
                             bool useUndefines) {
-    return lld::elf::DynamicFile<ELFT>::create(std::move(mb), useUndefines);
+    return lld::elf::AArch64DynamicFile<ELFT>::create(std::move(mb),
+                                                      useUndefines);
   }
 };
 
-struct ELFFileCreateELFTraits {
+struct AArch64ELFFileCreateELFTraits {
   typedef llvm::ErrorOr<std::unique_ptr<lld::File>> result_type;
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
                             bool atomizeStrings) {
-    return lld::elf::ELFFile<ELFT>::create(std::move(mb), atomizeStrings);
+    return lld::elf::AArch64ELFFile<ELFT>::create(std::move(mb),
+                                                  atomizeStrings);
   }
 };
 
-class ELFObjectReader : public Reader {
+class AArch64ELFObjectReader : public ELFObjectReader {
 public:
-  ELFObjectReader(bool atomizeStrings) : _atomizeStrings(atomizeStrings) {}
-
-  bool canParse(file_magic magic, StringRef,
-                const MemoryBuffer &) const override {
-    return (magic == llvm::sys::fs::file_magic::elf_relocatable);
-  }
+  AArch64ELFObjectReader(bool atomizeStrings)
+      : ELFObjectReader(atomizeStrings) {}
 
   std::error_code
   parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &,
             std::vector<std::unique_ptr<File>> &result) const override {
     std::size_t maxAlignment =
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
-    auto f = createELF<ELFFileCreateELFTraits>(
+    auto f = createELF<AArch64ELFFileCreateELFTraits>(
         llvm::object::getElfArchType(mb->getBuffer()), maxAlignment,
         std::move(mb), _atomizeStrings);
     if (std::error_code ec = f.getError())
@@ -61,26 +56,18 @@ public:
     result.push_back(std::move(*f));
     return std::error_code();
   }
-
-protected:
-  bool _atomizeStrings;
 };
 
-class ELFDSOReader : public Reader {
+class AArch64ELFDSOReader : public ELFDSOReader {
 public:
-  ELFDSOReader(bool useUndefines) : _useUndefines(useUndefines) {}
-
-  bool canParse(file_magic magic, StringRef,
-                const MemoryBuffer &) const override {
-    return (magic == llvm::sys::fs::file_magic::elf_shared_object);
-  }
+  AArch64ELFDSOReader(bool useUndefines) : ELFDSOReader(useUndefines) {}
 
   std::error_code
   parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &,
             std::vector<std::unique_ptr<File>> &result) const override {
     std::size_t maxAlignment =
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
-    auto f = createELF<DynamicFileCreateELFTraits>(
+    auto f = createELF<AArch64DynamicFileCreateELFTraits>(
         llvm::object::getElfArchType(mb->getBuffer()), maxAlignment,
         std::move(mb), _useUndefines);
     if (std::error_code ec = f.getError())
@@ -88,12 +75,9 @@ public:
     result.push_back(std::move(*f));
     return std::error_code();
   }
-
-protected:
-  bool _useUndefines;
 };
 
 } // namespace elf
 } // namespace lld
 
-#endif // LLD_READER_WRITER_ELF_READER_H
+#endif // LLD_READER_WRITER_AARCH64_AARCH64_ELF_READER_H

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h Sat Oct 18 00:23:17 2014
@@ -9,8 +9,8 @@
 #ifndef AARCH64_EXECUTABLE_WRITER_H
 #define AARCH64_EXECUTABLE_WRITER_H
 
-#include "ExecutableWriter.h"
 #include "AArch64LinkingContext.h"
+#include "ExecutableWriter.h"
 
 namespace lld {
 namespace elf {

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp Sat Oct 18 00:23:17 2014
@@ -8,16 +8,13 @@
 //===----------------------------------------------------------------------===//
 
 #include "AArch64LinkingContext.h"
-
+#include "AArch64RelocationPass.h"
+#include "Atoms.h"
 #include "lld/Core/File.h"
 #include "lld/Core/Instrumentation.h"
-
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringSwitch.h"
 
-#include "Atoms.h"
-#include "AArch64RelocationPass.h"
-
 using namespace lld;
 using namespace lld::elf;
 

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h Sat Oct 18 00:23:17 2014
@@ -11,9 +11,7 @@
 #define LLD_READER_WRITER_ELF_AARCH64_AARCH64_LINKING_CONTEXT_H
 
 #include "AArch64TargetHandler.h"
-
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/ELF.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64RelocationPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64RelocationPass.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64RelocationPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64RelocationPass.cpp Sat Oct 18 00:23:17 2014
@@ -17,13 +17,10 @@
 //===----------------------------------------------------------------------===//
 
 #include "AArch64RelocationPass.h"
-
+#include "AArch64LinkingContext.h"
+#include "Atoms.h"
 #include "lld/Core/Simple.h"
-
 #include "llvm/ADT/DenseMap.h"
-
-#include "Atoms.h"
-#include "AArch64LinkingContext.h"
 #include "llvm/Support/Debug.h"
 
 using namespace lld;

Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp Sat Oct 18 00:23:17 2014
@@ -8,10 +8,10 @@
 //===----------------------------------------------------------------------===//
 
 #include "Atoms.h"
-#include "AArch64ExecutableWriter.h"
 #include "AArch64DynamicLibraryWriter.h"
-#include "AArch64TargetHandler.h"
+#include "AArch64ExecutableWriter.h"
 #include "AArch64LinkingContext.h"
+#include "AArch64TargetHandler.h"
 
 using namespace lld;
 using 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=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h Sat Oct 18 00:23:17 2014
@@ -10,11 +10,11 @@
 #ifndef LLD_READER_WRITER_ELF_AARCH64_AARCH64_TARGET_HANDLER_H
 #define LLD_READER_WRITER_ELF_AARCH64_AARCH64_TARGET_HANDLER_H
 
-#include "DefaultTargetHandler.h"
-#include "ELFFile.h"
+#include "AArch64ELFFile.h"
+#include "AArch64ELFReader.h"
 #include "AArch64RelocationHandler.h"
+#include "DefaultTargetHandler.h"
 #include "TargetLayout.h"
-
 #include "lld/Core/Simple.h"
 
 namespace lld {
@@ -42,6 +42,14 @@ public:
     return *(_AArch64RelocationHandler.get());
   }
 
+  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
+    return std::unique_ptr<Reader>(new AArch64ELFObjectReader(atomizeStrings));
+  }
+
+  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
+    return std::unique_ptr<Reader>(new AArch64ELFDSOReader(useShlibUndefines));
+  }
+
   std::unique_ptr<Writer> getWriter() override;
 
 private:

Modified: lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp Sat Oct 18 00:23:17 2014
@@ -8,7 +8,6 @@
 //===----------------------------------------------------------------------===//
 
 #include "ArrayOrderPass.h"
-
 #include <algorithm>
 #include <limits>
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Atoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Atoms.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Atoms.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Atoms.h Sat Oct 18 00:23:17 2014
@@ -11,13 +11,10 @@
 #define LLD_READER_WRITER_ELF_ATOMS_H
 
 #include "TargetHandler.h"
-
 #include "lld/Core/LLVM.h"
 #include "lld/Core/Simple.h"
-
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringSwitch.h"
-
 #include <memory>
 #include <vector>
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Chunk.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Chunk.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Chunk.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Chunk.h Sat Oct 18 00:23:17 2014
@@ -11,7 +11,6 @@
 #define LLD_READER_WRITER_ELF_CHUNKS_H
 
 #include "lld/Core/LLVM.h"
-
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/Allocator.h"
@@ -19,7 +18,6 @@
 #include "llvm/Support/ELF.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FileOutputBuffer.h"
-
 #include <memory>
 
 namespace lld {

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Sat Oct 18 00:23:17 2014
@@ -16,10 +16,8 @@
 #include "Layout.h"
 #include "SectionChunks.h"
 #include "SegmentChunks.h"
-
 #include "lld/Core/Instrumentation.h"
 #include "lld/Core/STDExtras.h"
-
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DenseSet.h"
@@ -31,7 +29,6 @@
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/Support/Errc.h"
 #include "llvm/Support/Format.h"
-
 #include <map>
 #include <memory>
 #include <tuple>

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultTargetHandler.h Sat Oct 18 00:23:17 2014
@@ -11,13 +11,11 @@
 #define LLD_READER_WRITER_ELF_DEFAULT_TARGET_HANDLER_H
 
 #include "DefaultLayout.h"
-#include "TargetHandler.h"
-#include "ELFReader.h"
 #include "DynamicLibraryWriter.h"
+#include "ELFReader.h"
 #include "ExecutableWriter.h"
-
+#include "TargetHandler.h"
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/ADT/Triple.h"
 #include "llvm/Support/ELF.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h Sat Oct 18 00:23:17 2014
@@ -11,13 +11,10 @@
 #define LLD_READER_WRITER_ELF_DYNAMIC_FILE_H
 
 #include "Atoms.h"
-
 #include "lld/Core/SharedLibraryFile.h"
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/Path.h"
-
 #include <unordered_map>
 
 namespace lld {

Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Sat Oct 18 00:23:17 2014
@@ -8,19 +8,16 @@
 //===----------------------------------------------------------------------===//
 
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "ArrayOrderPass.h"
 #include "ELFFile.h"
 #include "TargetHandler.h"
 #include "Targets.h"
-
 #include "lld/Core/Instrumentation.h"
 #include "lld/Passes/LayoutPass.h"
 #include "lld/Passes/RoundTripYAMLPass.h"
-
 #include "llvm/ADT/Triple.h"
-#include "llvm/Support/Errc.h"
 #include "llvm/Support/ELF.h"
+#include "llvm/Support/Errc.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/ELFReader.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFReader.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFReader.h Sat Oct 18 00:23:17 2014
@@ -13,7 +13,6 @@
 #include "CreateELF.h"
 #include "DynamicFile.h"
 #include "ELFFile.h"
-
 #include "lld/ReaderWriter/Reader.h"
 
 namespace lld {

Modified: lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/HeaderChunks.h Sat Oct 18 00:23:17 2014
@@ -11,7 +11,6 @@
 #define LLD_READER_WRITER_ELF_HEADER_CHUNKS_H
 
 #include "SegmentChunks.h"
-
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/Debug.h"

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h Sat Oct 18 00:23:17 2014
@@ -9,9 +9,9 @@
 #ifndef HEXAGON_DYNAMIC_LIBRARY_WRITER_H
 #define HEXAGON_DYNAMIC_LIBRARY_WRITER_H
 
+#include "DynamicLibraryWriter.h"
 #include "HexagonExecutableAtoms.h"
 #include "HexagonLinkingContext.h"
-#include "DynamicLibraryWriter.h"
 
 namespace lld {
 namespace elf {

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h Sat Oct 18 00:23:17 2014
@@ -9,10 +9,10 @@
 #ifndef HEXAGON_EXECUTABLE_WRITER_H
 #define HEXAGON_EXECUTABLE_WRITER_H
 
+#include "ExecutableWriter.h"
+#include "HexagonELFWriters.h"
 #include "HexagonExecutableAtoms.h"
 #include "HexagonLinkingContext.h"
-#include "HexagonELFWriters.h"
-#include "ExecutableWriter.h"
 
 namespace lld {
 namespace elf {

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp Sat Oct 18 00:23:17 2014
@@ -10,12 +10,10 @@
 #include "Atoms.h"
 #include "HexagonLinkingContext.h"
 #include "HexagonTargetHandler.h"
-
 #include "lld/Core/File.h"
 #include "lld/Core/Pass.h"
 #include "lld/Core/PassManager.h"
 #include "lld/Core/Simple.h"
-
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringSwitch.h"

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h Sat Oct 18 00:23:17 2014
@@ -11,7 +11,6 @@
 #define LLD_READER_WRITER_ELF_HEXAGON_HEXAGON_LINKING_CONTEXT_H
 
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/ELF.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp Sat Oct 18 00:23:17 2014
@@ -9,9 +9,8 @@
 
 #include "HexagonTargetHandler.h"
 #include "HexagonLinkingContext.h"
-#include "HexagonRelocationHandler.h"
 #include "HexagonRelocationFunctions.h"
-
+#include "HexagonRelocationHandler.h"
 
 using namespace lld;
 using namespace elf;

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp Sat Oct 18 00:23:17 2014
@@ -9,8 +9,8 @@
 
 #include "HexagonExecutableWriter.h"
 #include "HexagonDynamicLibraryWriter.h"
-#include "HexagonTargetHandler.h"
 #include "HexagonLinkingContext.h"
+#include "HexagonTargetHandler.h"
 
 using namespace lld;
 using namespace 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=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h Sat Oct 18 00:23:17 2014
@@ -11,11 +11,11 @@
 #define HEXAGON_TARGET_HANDLER_H
 
 #include "DefaultTargetHandler.h"
+#include "HexagonELFReader.h"
 #include "HexagonExecutableAtoms.h"
 #include "HexagonRelocationHandler.h"
 #include "HexagonSectionChunks.h"
 #include "TargetLayout.h"
-#include "HexagonELFReader.h"
 
 namespace lld {
 namespace elf {

Modified: lld/trunk/lib/ReaderWriter/ELF/Layout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Layout.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Layout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Layout.h Sat Oct 18 00:23:17 2014
@@ -12,7 +12,6 @@
 
 #include "lld/Core/DefinedAtom.h"
 #include "lld/ReaderWriter/AtomLayout.h"
-
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/Allocator.h"

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsCtorsOrderPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsCtorsOrderPass.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsCtorsOrderPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsCtorsOrderPass.cpp Sat Oct 18 00:23:17 2014
@@ -8,7 +8,6 @@
 //===----------------------------------------------------------------------===//
 
 #include "MipsCtorsOrderPass.h"
-
 #include <algorithm>
 #include <climits>
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h Sat Oct 18 00:23:17 2014
@@ -17,6 +17,7 @@
 namespace lld {
 namespace elf {
 
+template <typename ELFT> class MipsDynamicSymbolTable;
 template <typename ELFT> class MipsTargetLayout;
 
 template <class ELFT>

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h Sat Oct 18 00:23:17 2014
@@ -10,11 +10,14 @@
 #define LLD_READER_WRITER_ELF_MIPS_MIPS_ELF_WRITERS_H
 
 #include "MipsLinkingContext.h"
+
 #include "OutputELFWriter.h"
 
 namespace lld {
 namespace elf {
 
+template <class ELFT> class MipsRuntimeFile;
+
 template <class ELFT> class MipsTargetLayout;
 
 template <typename ELFT> class MipsELFWriter {

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp Sat Oct 18 00:23:17 2014
@@ -10,7 +10,6 @@
 #include "MipsTargetHandler.h"
 #include "MipsLinkingContext.h"
 #include "MipsRelocationHandler.h"
-
 #include "lld/ReaderWriter/RelocationHelperFunctions.h"
 
 using namespace lld;

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp Sat Oct 18 00:23:17 2014
@@ -11,7 +11,6 @@
 #include "MipsLinkingContext.h"
 #include "MipsRelocationPass.h"
 #include "MipsTargetHandler.h"
-
 #include "llvm/ADT/DenseSet.h"
 
 using namespace lld;

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp Sat Oct 18 00:23:17 2014
@@ -8,10 +8,10 @@
 //===----------------------------------------------------------------------===//
 
 #include "ELFFile.h"
+#include "MipsDynamicLibraryWriter.h"
+#include "MipsExecutableWriter.h"
 #include "MipsLinkingContext.h"
 #include "MipsTargetHandler.h"
-#include "MipsExecutableWriter.h"
-#include "MipsDynamicLibraryWriter.h"
 
 using namespace lld;
 using namespace elf;

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=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h Sat Oct 18 00:23:17 2014
@@ -15,7 +15,6 @@
 #include "MipsRelocationHandler.h"
 #include "MipsSectionChunks.h"
 #include "TargetLayout.h"
-
 #include "llvm/ADT/DenseSet.h"
 
 namespace lld {

Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Sat Oct 18 00:23:17 2014
@@ -12,12 +12,10 @@
 #include "DefaultLayout.h"
 #include "ELFFile.h"
 #include "TargetLayout.h"
-
 #include "lld/Core/Instrumentation.h"
 #include "lld/Core/Parallel.h"
 #include "lld/ReaderWriter/ELFLinkingContext.h"
 #include "lld/ReaderWriter/Writer.h"
-
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Support/Path.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.cpp Sat Oct 18 00:23:17 2014
@@ -8,9 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "PPCLinkingContext.h"
-
 #include "lld/Core/LLVM.h"
-
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/Support/ErrorOr.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/PPC/PPCLinkingContext.h Sat Oct 18 00:23:17 2014
@@ -11,9 +11,7 @@
 #define LLD_READER_WRITER_ELF_PPC_PPC_LINKING_CONTEXT_H
 
 #include "PPCTargetHandler.h"
-
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/ELF.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Reader.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Reader.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Reader.cpp Sat Oct 18 00:23:17 2014
@@ -14,7 +14,6 @@
 //===----------------------------------------------------------------------===//
 
 #include "ELFReader.h"
-
 #include <map>
 #include <vector>
 

Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Sat Oct 18 00:23:17 2014
@@ -14,11 +14,9 @@
 #include "Layout.h"
 #include "TargetHandler.h"
 #include "Writer.h"
-
 #include "lld/Core/DefinedAtom.h"
 #include "lld/Core/Parallel.h"
 #include "lld/Core/range.h"
-
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringExtras.h"
@@ -29,7 +27,6 @@
 #include "llvm/Support/ELF.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FileOutputBuffer.h"
-
 #include <memory>
 
 namespace lld {

Modified: lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SegmentChunks.h Sat Oct 18 00:23:17 2014
@@ -14,10 +14,8 @@
 #include "Layout.h"
 #include "SectionChunks.h"
 #include "Writer.h"
-
 #include "lld/Core/range.h"
 #include "lld/ReaderWriter/Writer.h"
-
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Object/ELF.h"

Modified: lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h Sat Oct 18 00:23:17 2014
@@ -17,15 +17,12 @@
 #define LLD_READER_WRITER_ELF_TARGET_HANDLER_H
 
 #include "Layout.h"
-
 #include "lld/Core/LLVM.h"
 #include "lld/Core/LinkingContext.h"
 #include "lld/Core/STDExtras.h"
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/ADT/Hashing.h"
 #include "llvm/Support/FileOutputBuffer.h"
-
 #include <memory>
 #include <vector>
 

Modified: lld/trunk/lib/ReaderWriter/ELF/TargetLayout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/TargetLayout.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/TargetLayout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/TargetLayout.h Sat Oct 18 00:23:17 2014
@@ -11,7 +11,6 @@
 #define LLD_READER_WRITER_ELF_TARGET_LAYOUT_H
 
 #include "DefaultLayout.h"
-
 #include "lld/Core/LLVM.h"
 
 namespace lld {

Modified: lld/trunk/lib/ReaderWriter/ELF/Targets.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Targets.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Targets.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Targets.h Sat Oct 18 00:23:17 2014
@@ -10,11 +10,11 @@
 #ifndef LLD_READER_WRITER_ELF_TARGETS_H
 #define LLD_READER_WRITER_ELF_TARGETS_H
 
+#include "AArch64/AArch64Target.h"
 #include "Hexagon/HexagonTarget.h"
 #include "Mips/MipsTarget.h"
 #include "PPC/PPCTarget.h"
 #include "X86/X86Target.h"
 #include "X86_64/X86_64Target.h"
-#include "AArch64/AArch64Target.h"
 
 #endif

Modified: lld/trunk/lib/ReaderWriter/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Writer.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Writer.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Writer.cpp Sat Oct 18 00:23:17 2014
@@ -8,7 +8,6 @@
 //===----------------------------------------------------------------------===//
 
 #include "lld/ReaderWriter/Writer.h"
-
 #include "DynamicLibraryWriter.h"
 #include "ExecutableWriter.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/X86/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/CMakeLists.txt?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/CMakeLists.txt (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/CMakeLists.txt Sat Oct 18 00:23:17 2014
@@ -1,6 +1,7 @@
 add_lld_library(lldX86ELFTarget
   X86LinkingContext.cpp
   X86TargetHandler.cpp
+  X86RelocationHandler.cpp
   )
 
 target_link_libraries(lldX86ELFTarget ${cmake_2_8_12_INTERFACE}

Copied: lld/trunk/lib/ReaderWriter/ELF/X86/X86DynamicLibraryWriter.h (from r220117, lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h)
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86DynamicLibraryWriter.h?p2=lld/trunk/lib/ReaderWriter/ELF/X86/X86DynamicLibraryWriter.h&p1=lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h&r1=220117&r2=220129&rev=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86DynamicLibraryWriter.h Sat Oct 18 00:23:17 2014
@@ -1,4 +1,4 @@
-//===- lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h ---------===//
+//===- lib/ReaderWriter/ELF/X86/X86DynamicLibraryWriter.h -----------------===//
 //
 //                             The LLVM Linker
 //
@@ -6,20 +6,20 @@
 // License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
-#ifndef AARCH64_DYNAMIC_LIBRARY_WRITER_H
-#define AARCH64_DYNAMIC_LIBRARY_WRITER_H
+#ifndef X86_X86_DYNAMIC_LIBRARY_WRITER_H
+#define X86_X86_DYNAMIC_LIBRARY_WRITER_H
 
 #include "DynamicLibraryWriter.h"
-#include "AArch64LinkingContext.h"
+#include "X86LinkingContext.h"
 
 namespace lld {
 namespace elf {
 
 template <class ELFT>
-class AArch64DynamicLibraryWriter : public DynamicLibraryWriter<ELFT> {
+class X86DynamicLibraryWriter : public DynamicLibraryWriter<ELFT> {
 public:
-  AArch64DynamicLibraryWriter(AArch64LinkingContext &context,
-                              AArch64TargetLayout<ELFT> &layout);
+  X86DynamicLibraryWriter(X86LinkingContext &context,
+                          X86TargetLayout<ELFT> &layout);
 
 protected:
   // Add any runtime files and their atoms to the output
@@ -41,19 +41,18 @@ private:
   };
 
   std::unique_ptr<GOTFile> _gotFile;
-  AArch64LinkingContext &_context;
-  AArch64TargetLayout<ELFT> &_AArch64Layout;
+  X86LinkingContext &_context;
+  X86TargetLayout<ELFT> &_x86Layout;
 };
 
 template <class ELFT>
-AArch64DynamicLibraryWriter<ELFT>::AArch64DynamicLibraryWriter(
-    AArch64LinkingContext &context, AArch64TargetLayout<ELFT> &layout)
+X86DynamicLibraryWriter<ELFT>::X86DynamicLibraryWriter(
+    X86LinkingContext &context, X86TargetLayout<ELFT> &layout)
     : DynamicLibraryWriter<ELFT>(context, layout),
-      _gotFile(new GOTFile(context)), _context(context),
-      _AArch64Layout(layout) {}
+      _gotFile(new GOTFile(context)), _context(context), _x86Layout(layout) {}
 
 template <class ELFT>
-bool AArch64DynamicLibraryWriter<ELFT>::createImplicitFiles(
+bool X86DynamicLibraryWriter<ELFT>::createImplicitFiles(
     std::vector<std::unique_ptr<File>> &result) {
   DynamicLibraryWriter<ELFT>::createImplicitFiles(result);
   _gotFile->addAtom(*new (_gotFile->_alloc) GLOBAL_OFFSET_TABLEAtom(*_gotFile));

Added: lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h?rev=220129&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h (added)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFFile.h Sat Oct 18 00:23:17 2014
@@ -0,0 +1,73 @@
+//===- lib/ReaderWriter/ELF/X86/X86ELFFile.h ------------------------------===//
+//
+//                             The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_READER_WRITER_ELF_X86_X86_ELF_FILE_H
+#define LLD_READER_WRITER_ELF_X86_X86_ELF_FILE_H
+
+#include "ELFReader.h"
+
+namespace lld {
+namespace elf {
+
+class X86LinkingContext;
+
+template <class ELFT> class X86ELFFile : public ELFFile<ELFT> {
+public:
+  X86ELFFile(StringRef name, bool atomizeStrings)
+      : ELFFile<ELFT>(name, atomizeStrings) {}
+
+  X86ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings,
+             std::error_code &ec)
+      : ELFFile<ELFT>(std::move(mb), atomizeStrings, ec) {}
+
+  static ErrorOr<std::unique_ptr<X86ELFFile>>
+  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+    std::error_code ec;
+    std::unique_ptr<X86ELFFile<ELFT>> file(
+        new X86ELFFile<ELFT>(mb->getBufferIdentifier(), atomizeStrings));
+
+    file->_objFile.reset(
+        new llvm::object::ELFFile<ELFT>(mb.release()->getBuffer(), ec));
+
+    if (ec)
+      return ec;
+
+    // Read input sections from the input file that need to be converted to
+    // atoms
+    if ((ec = file->createAtomizableSections()))
+      return ec;
+
+    // For mergeable strings, we would need to split the section into various
+    // atoms
+    if ((ec = file->createMergeableAtoms()))
+      return ec;
+
+    // Create the necessary symbols that are part of the section that we
+    // created in createAtomizableSections function
+    if ((ec = file->createSymbolsFromAtomizableSections()))
+      return ec;
+
+    // Create the appropriate atoms from the file
+    if ((ec = file->createAtoms()))
+      return ec;
+
+    return std::move(file);
+  }
+};
+
+template <class ELFT> class X86DynamicFile : public DynamicFile<ELFT> {
+public:
+  X86DynamicFile(const X86LinkingContext &context, StringRef name)
+      : DynamicFile<ELFT>(context, name) {}
+};
+
+} // elf
+} // lld
+
+#endif // LLD_READER_WRITER_ELF_X86_X86_ELF_FILE_H

Copied: lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h (from r220117, lld/trunk/lib/ReaderWriter/ELF/ELFReader.h)
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h?p2=lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h&p1=lld/trunk/lib/ReaderWriter/ELF/ELFReader.h&r1=220117&r2=220129&rev=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86ELFReader.h Sat Oct 18 00:23:17 2014
@@ -1,4 +1,4 @@
-//===- lib/ReaderWriter/ELF/ELFReader.h -----------------------------------===//
+//===- lib/ReaderWriter/ELF/X86/X86ELFReader.h ----------------------------===//
 //
 //                             The LLVM Linker
 //
@@ -7,53 +7,45 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLD_READER_WRITER_ELF_READER_H
-#define LLD_READER_WRITER_ELF_READER_H
+#ifndef LLD_READER_WRITER_X86_X86_ELF_READER_H
+#define LLD_READER_WRITER_X86_X86_ELF_READER_H
 
-#include "CreateELF.h"
-#include "DynamicFile.h"
-#include "ELFFile.h"
-
-#include "lld/ReaderWriter/Reader.h"
+#include "ELFReader.h"
+#include "X86ELFFile.h"
 
 namespace lld {
 namespace elf {
 
-struct DynamicFileCreateELFTraits {
+struct X86DynamicFileCreateELFTraits {
   typedef llvm::ErrorOr<std::unique_ptr<lld::SharedLibraryFile>> result_type;
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
                             bool useUndefines) {
-    return lld::elf::DynamicFile<ELFT>::create(std::move(mb), useUndefines);
+    return lld::elf::X86DynamicFile<ELFT>::create(std::move(mb), useUndefines);
   }
 };
 
-struct ELFFileCreateELFTraits {
+struct X86ELFFileCreateELFTraits {
   typedef llvm::ErrorOr<std::unique_ptr<lld::File>> result_type;
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
                             bool atomizeStrings) {
-    return lld::elf::ELFFile<ELFT>::create(std::move(mb), atomizeStrings);
+    return lld::elf::X86ELFFile<ELFT>::create(std::move(mb), atomizeStrings);
   }
 };
 
-class ELFObjectReader : public Reader {
+class X86ELFObjectReader : public ELFObjectReader {
 public:
-  ELFObjectReader(bool atomizeStrings) : _atomizeStrings(atomizeStrings) {}
-
-  bool canParse(file_magic magic, StringRef,
-                const MemoryBuffer &) const override {
-    return (magic == llvm::sys::fs::file_magic::elf_relocatable);
-  }
+  X86ELFObjectReader(bool atomizeStrings) : ELFObjectReader(atomizeStrings) {}
 
   std::error_code
   parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &,
             std::vector<std::unique_ptr<File>> &result) const override {
     std::size_t maxAlignment =
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
-    auto f = createELF<ELFFileCreateELFTraits>(
+    auto f = createELF<X86ELFFileCreateELFTraits>(
         llvm::object::getElfArchType(mb->getBuffer()), maxAlignment,
         std::move(mb), _atomizeStrings);
     if (std::error_code ec = f.getError())
@@ -61,26 +53,18 @@ public:
     result.push_back(std::move(*f));
     return std::error_code();
   }
-
-protected:
-  bool _atomizeStrings;
 };
 
-class ELFDSOReader : public Reader {
+class X86ELFDSOReader : public ELFDSOReader {
 public:
-  ELFDSOReader(bool useUndefines) : _useUndefines(useUndefines) {}
-
-  bool canParse(file_magic magic, StringRef,
-                const MemoryBuffer &) const override {
-    return (magic == llvm::sys::fs::file_magic::elf_shared_object);
-  }
+  X86ELFDSOReader(bool useUndefines) : ELFDSOReader(useUndefines) {}
 
   std::error_code
   parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &,
             std::vector<std::unique_ptr<File>> &result) const override {
     std::size_t maxAlignment =
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
-    auto f = createELF<DynamicFileCreateELFTraits>(
+    auto f = createELF<X86DynamicFileCreateELFTraits>(
         llvm::object::getElfArchType(mb->getBuffer()), maxAlignment,
         std::move(mb), _useUndefines);
     if (std::error_code ec = f.getError())
@@ -88,12 +72,9 @@ public:
     result.push_back(std::move(*f));
     return std::error_code();
   }
-
-protected:
-  bool _useUndefines;
 };
 
 } // namespace elf
 } // namespace lld
 
-#endif // LLD_READER_WRITER_ELF_READER_H
+#endif // LLD_READER_WRITER_X86_X86_ELF_READER_H

Added: lld/trunk/lib/ReaderWriter/ELF/X86/X86ExecutableWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86ExecutableWriter.h?rev=220129&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86ExecutableWriter.h (added)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86ExecutableWriter.h Sat Oct 18 00:23:17 2014
@@ -0,0 +1,57 @@
+//===- lib/ReaderWriter/ELF/X86/X86ExecutableWriter.h ---------------------===//
+//
+//                             The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#ifndef X86_X86_EXECUTABLE_WRITER_H
+#define X86_X86_EXECUTABLE_WRITER_H
+
+#include "ExecutableWriter.h"
+#include "X86LinkingContext.h"
+
+namespace lld {
+namespace elf {
+
+template <class ELFT>
+class X86ExecutableWriter : public ExecutableWriter<ELFT> {
+public:
+  X86ExecutableWriter(X86LinkingContext &context,
+                      X86TargetLayout<ELFT> &layout);
+
+protected:
+  // Add any runtime files and their atoms to the output
+  virtual bool createImplicitFiles(std::vector<std::unique_ptr<File>> &);
+
+  virtual void finalizeDefaultAtomValues() {
+    return ExecutableWriter<ELFT>::finalizeDefaultAtomValues();
+  }
+
+  virtual void addDefaultAtoms() {
+    return ExecutableWriter<ELFT>::addDefaultAtoms();
+  }
+
+private:
+  X86LinkingContext &_context;
+  X86TargetLayout<ELFT> &_x86Layout;
+};
+
+template <class ELFT>
+X86ExecutableWriter<ELFT>::X86ExecutableWriter(X86LinkingContext &context,
+                                               X86TargetLayout<ELFT> &layout)
+    : ExecutableWriter<ELFT>(context, layout), _context(context),
+      _x86Layout(layout) {}
+
+template <class ELFT>
+bool X86ExecutableWriter<ELFT>::createImplicitFiles(
+    std::vector<std::unique_ptr<File>> &result) {
+  ExecutableWriter<ELFT>::createImplicitFiles(result);
+  return true;
+}
+
+} // namespace elf
+} // namespace lld
+
+#endif

Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp Sat Oct 18 00:23:17 2014
@@ -8,9 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "X86LinkingContext.h"
-
 #include "lld/Core/LLVM.h"
-
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/Support/ErrorOr.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.h Sat Oct 18 00:23:17 2014
@@ -11,9 +11,7 @@
 #define LLD_READER_WRITER_ELF_X86_TARGETINFO_H
 
 #include "X86TargetHandler.h"
-
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/ELF.h"
 

Added: lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.cpp?rev=220129&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.cpp (added)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.cpp Sat Oct 18 00:23:17 2014
@@ -0,0 +1,64 @@
+//===- lib/ReaderWriter/ELF/X86/X86RelocationHandler.cpp ------------------===//
+//
+//                             The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "X86LinkingContext.h"
+#include "X86TargetHandler.h"
+
+using namespace lld;
+using namespace elf;
+
+namespace {
+/// \brief R_386_32 - word32:  S + A
+static int reloc32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
+  int32_t result = (uint32_t)(S + A);
+  *reinterpret_cast<llvm::support::ulittle32_t *>(location) =
+      result |
+      (uint32_t) * reinterpret_cast<llvm::support::ulittle32_t *>(location);
+  return 0;
+}
+
+/// \brief R_386_PC32 - word32: S + A - P
+static int relocPC32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
+  uint32_t result = (uint32_t)((S + A) - P);
+  *reinterpret_cast<llvm::support::ulittle32_t *>(location) =
+      result +
+      (uint32_t) * reinterpret_cast<llvm::support::ulittle32_t *>(location);
+  return 0;
+}
+}
+
+std::error_code X86TargetRelocationHandler::applyRelocation(
+    ELFWriter &writer, llvm::FileOutputBuffer &buf, const lld::AtomLayout &atom,
+    const Reference &ref) const {
+  uint8_t *atomContent = buf.getBufferStart() + atom._fileOffset;
+  uint8_t *location = atomContent + ref.offsetInAtom();
+  uint64_t targetVAddress = writer.addressOfAtom(ref.target());
+  uint64_t relocVAddress = atom._virtualAddr + ref.offsetInAtom();
+
+  if (ref.kindNamespace() != Reference::KindNamespace::ELF)
+    return std::error_code();
+  assert(ref.kindArch() == Reference::KindArch::x86);
+  switch (ref.kindValue()) {
+  case R_386_32:
+    reloc32(location, relocVAddress, targetVAddress, ref.addend());
+    break;
+  case R_386_PC32:
+    relocPC32(location, relocVAddress, targetVAddress, ref.addend());
+    break;
+  default: {
+    std::string str;
+    llvm::raw_string_ostream s(str);
+    s << "Unhandled I386 relocation # " << ref.kindValue();
+    s.flush();
+    llvm_unreachable(str.c_str());
+  }
+  }
+
+  return std::error_code();
+}

Added: lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.h?rev=220129&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.h (added)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86RelocationHandler.h Sat Oct 18 00:23:17 2014
@@ -0,0 +1,33 @@
+//===- lib/ReaderWriter/ELF/X86/X86RelocationHandler.h --------------------===//
+//
+//                             The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef X86_X86_RELOCATION_HANDLER_H
+#define X86_X86_RELOCATION_HANDLER_H
+
+#include "X86TargetHandler.h"
+
+namespace lld {
+namespace elf {
+template <class ELFT> class X86TargetLayout;
+typedef llvm::object::ELFType<llvm::support::little, 2, false> X86ELFType;
+
+class X86TargetRelocationHandler final
+    : public TargetRelocationHandler<X86ELFType> {
+public:
+  X86TargetRelocationHandler(X86TargetLayout<X86ELFType> &) {}
+
+  std::error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &,
+                                  const lld::AtomLayout &,
+                                  const Reference &) const override;
+};
+
+} // end namespace elf
+} // end namespace lld
+
+#endif // X86_X86_RELOCATION_HANDLER_H

Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp Sat Oct 18 00:23:17 2014
@@ -8,36 +8,23 @@
 //===----------------------------------------------------------------------===//
 
 #include "X86TargetHandler.h"
+#include "X86DynamicLibraryWriter.h"
+#include "X86ExecutableWriter.h"
 #include "X86LinkingContext.h"
+#include "X86RelocationHandler.h"
 
 using namespace lld;
 using namespace elf;
 
 using namespace llvm::ELF;
 
-/// \brief R_386_32 - word32:  S + A
-static int reloc32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
-  int32_t result = (uint32_t)(S + A);
-  *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
-            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
-  return 0;
-}
-
-/// \brief R_386_PC32 - word32: S + A - P
-static int relocPC32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
-  uint32_t result = (uint32_t)((S + A) - P);
-  *reinterpret_cast<llvm::support::ulittle32_t *>(location) = result +
-            (uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
-  return 0;
-}
-
 std::unique_ptr<Writer> X86TargetHandler::getWriter() {
   switch (_x86LinkingContext.getOutputELFType()) {
   case llvm::ELF::ET_EXEC:
-    return std::unique_ptr<Writer>(new elf::ExecutableWriter<X86ELFType>(
+    return std::unique_ptr<Writer>(new X86ExecutableWriter<X86ELFType>(
         _x86LinkingContext, *_x86TargetLayout.get()));
   case llvm::ELF::ET_DYN:
-    return std::unique_ptr<Writer>(new elf::DynamicLibraryWriter<X86ELFType>(
+    return std::unique_ptr<Writer>(new X86DynamicLibraryWriter<X86ELFType>(
         _x86LinkingContext, *_x86TargetLayout.get()));
   case llvm::ELF::ET_REL:
     llvm_unreachable("TODO: support -r mode");
@@ -96,38 +83,8 @@ void X86TargetHandler::registerRelocatio
                         kindStrings);
 }
 
-std::error_code X86TargetRelocationHandler::applyRelocation(
-    ELFWriter &writer, llvm::FileOutputBuffer &buf, const lld::AtomLayout &atom,
-    const Reference &ref) const {
-  uint8_t *atomContent = buf.getBufferStart() + atom._fileOffset;
-  uint8_t *location = atomContent + ref.offsetInAtom();
-  uint64_t targetVAddress = writer.addressOfAtom(ref.target());
-  uint64_t relocVAddress = atom._virtualAddr + ref.offsetInAtom();
-
-  if (ref.kindNamespace() != Reference::KindNamespace::ELF)
-    return std::error_code();
-  assert(ref.kindArch() == Reference::KindArch::x86);
-  switch (ref.kindValue()) {
-  case R_386_32:
-    reloc32(location, relocVAddress, targetVAddress, ref.addend());
-    break;
-  case R_386_PC32:
-    relocPC32(location, relocVAddress, targetVAddress, ref.addend());
-    break;
-  default : {
-    std::string str;
-    llvm::raw_string_ostream s(str);
-    s << "Unhandled I386 relocation # " << ref.kindValue();
-    s.flush();
-    llvm_unreachable(str.c_str());
-  }
-  }
-
-  return std::error_code();
-}
-
 X86TargetHandler::X86TargetHandler(X86LinkingContext &context)
     : DefaultTargetHandler(context), _x86LinkingContext(context),
       _x86TargetLayout(new X86TargetLayout<X86ELFType>(context)),
       _x86RelocationHandler(
-          new X86TargetRelocationHandler(context, *_x86TargetLayout.get())) {}
+          new X86TargetRelocationHandler(*_x86TargetLayout.get())) {}

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=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h Sat Oct 18 00:23:17 2014
@@ -12,8 +12,9 @@
 
 #include "DefaultTargetHandler.h"
 #include "TargetLayout.h"
-
-#include "lld/ReaderWriter/Reader.h"
+#include "X86ELFFile.h"
+#include "X86ELFReader.h"
+#include "X86RelocationHandler.h"
 
 namespace lld {
 namespace elf {
@@ -26,24 +27,6 @@ public:
   X86TargetLayout(X86LinkingContext &context) : TargetLayout<ELFT>(context) {}
 };
 
-class X86TargetRelocationHandler final
-    : public TargetRelocationHandler<X86ELFType> {
-public:
-  X86TargetRelocationHandler(X86LinkingContext &context,
-                             X86TargetLayout<X86ELFType> &layout)
-      : _x86Context(context), _x86TargetLayout(layout) {}
-
-  std::error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &,
-                                  const lld::AtomLayout &,
-                                  const Reference &) const override;
-
-  static const Registry::KindStrings kindStrings[];
-
-protected:
-  X86LinkingContext &_x86Context;
-  X86TargetLayout<X86ELFType> &_x86TargetLayout;
-};
-
 class X86TargetHandler final
     : public DefaultTargetHandler<X86ELFType> {
 public:
@@ -59,6 +42,14 @@ public:
     return *(_x86RelocationHandler.get());
   }
 
+  std::unique_ptr<Reader> getObjReader(bool atomizeStrings) override {
+    return std::unique_ptr<Reader>(new X86ELFObjectReader(atomizeStrings));
+  }
+
+  std::unique_ptr<Reader> getDSOReader(bool useShlibUndefines) override {
+    return std::unique_ptr<Reader>(new X86ELFDSOReader(useShlibUndefines));
+  }
+
   std::unique_ptr<Writer> getWriter() override;
 
 protected:

Added: 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=220129&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h (added)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h Sat Oct 18 00:23:17 2014
@@ -0,0 +1,73 @@
+//===- lib/ReaderWriter/ELF/X86_64/X86_64ELFFile.h ------------------------===//
+//
+//                             The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_READER_WRITER_ELF_X86_64_ELF_FILE_H
+#define LLD_READER_WRITER_ELF_X86_64_ELF_FILE_H
+
+#include "ELFReader.h"
+
+namespace lld {
+namespace elf {
+
+class X86_64LinkingContext;
+
+template <class ELFT> class X86_64ELFFile : public ELFFile<ELFT> {
+public:
+  X86_64ELFFile(StringRef name, bool atomizeStrings)
+      : ELFFile<ELFT>(name, atomizeStrings) {}
+
+  X86_64ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings,
+                std::error_code &ec)
+      : ELFFile<ELFT>(std::move(mb), atomizeStrings, ec) {}
+
+  static ErrorOr<std::unique_ptr<X86_64ELFFile>>
+  create(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings) {
+    std::error_code ec;
+    std::unique_ptr<X86_64ELFFile<ELFT>> file(
+        new X86_64ELFFile<ELFT>(mb->getBufferIdentifier(), atomizeStrings));
+
+    file->_objFile.reset(
+        new llvm::object::ELFFile<ELFT>(mb.release()->getBuffer(), ec));
+
+    if (ec)
+      return ec;
+
+    // Read input sections from the input file that need to be converted to
+    // atoms
+    if ((ec = file->createAtomizableSections()))
+      return ec;
+
+    // For mergeable strings, we would need to split the section into various
+    // atoms
+    if ((ec = file->createMergeableAtoms()))
+      return ec;
+
+    // Create the necessary symbols that are part of the section that we
+    // created in createAtomizableSections function
+    if ((ec = file->createSymbolsFromAtomizableSections()))
+      return ec;
+
+    // Create the appropriate atoms from the file
+    if ((ec = file->createAtoms()))
+      return ec;
+
+    return std::move(file);
+  }
+};
+
+template <class ELFT> class X86_64DynamicFile : public DynamicFile<ELFT> {
+public:
+  X86_64DynamicFile(const X86_64LinkingContext &context, StringRef name)
+      : DynamicFile<ELFT>(context, name) {}
+};
+
+} // elf
+} // lld
+
+#endif // LLD_READER_WRITER_ELF_X86_64_ELF_FILE_H

Copied: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h (from r220117, lld/trunk/lib/ReaderWriter/ELF/ELFReader.h)
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h?p2=lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h&p1=lld/trunk/lib/ReaderWriter/ELF/ELFReader.h&r1=220117&r2=220129&rev=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFReader.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h Sat Oct 18 00:23:17 2014
@@ -1,4 +1,4 @@
-//===- lib/ReaderWriter/ELF/ELFReader.h -----------------------------------===//
+//===- lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h ----------------------===//
 //
 //                             The LLVM Linker
 //
@@ -7,53 +7,47 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLD_READER_WRITER_ELF_READER_H
-#define LLD_READER_WRITER_ELF_READER_H
+#ifndef LLD_READER_WRITER_X86_64_X86_64_ELF_READER_H
+#define LLD_READER_WRITER_X86_64_X86_64_ELF_READER_H
 
-#include "CreateELF.h"
-#include "DynamicFile.h"
-#include "ELFFile.h"
-
-#include "lld/ReaderWriter/Reader.h"
+#include "ELFReader.h"
+#include "X86_64ELFFile.h"
 
 namespace lld {
 namespace elf {
 
-struct DynamicFileCreateELFTraits {
+struct X86_64DynamicFileCreateELFTraits {
   typedef llvm::ErrorOr<std::unique_ptr<lld::SharedLibraryFile>> result_type;
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
                             bool useUndefines) {
-    return lld::elf::DynamicFile<ELFT>::create(std::move(mb), useUndefines);
+    return lld::elf::X86_64DynamicFile<ELFT>::create(std::move(mb),
+                                                     useUndefines);
   }
 };
 
-struct ELFFileCreateELFTraits {
+struct X86_64ELFFileCreateELFTraits {
   typedef llvm::ErrorOr<std::unique_ptr<lld::File>> result_type;
 
   template <class ELFT>
   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
                             bool atomizeStrings) {
-    return lld::elf::ELFFile<ELFT>::create(std::move(mb), atomizeStrings);
+    return lld::elf::X86_64ELFFile<ELFT>::create(std::move(mb), atomizeStrings);
   }
 };
 
-class ELFObjectReader : public Reader {
+class X86_64ELFObjectReader : public ELFObjectReader {
 public:
-  ELFObjectReader(bool atomizeStrings) : _atomizeStrings(atomizeStrings) {}
-
-  bool canParse(file_magic magic, StringRef,
-                const MemoryBuffer &) const override {
-    return (magic == llvm::sys::fs::file_magic::elf_relocatable);
-  }
+  X86_64ELFObjectReader(bool atomizeStrings)
+      : ELFObjectReader(atomizeStrings) {}
 
   std::error_code
   parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &,
             std::vector<std::unique_ptr<File>> &result) const override {
     std::size_t maxAlignment =
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
-    auto f = createELF<ELFFileCreateELFTraits>(
+    auto f = createELF<X86_64ELFFileCreateELFTraits>(
         llvm::object::getElfArchType(mb->getBuffer()), maxAlignment,
         std::move(mb), _atomizeStrings);
     if (std::error_code ec = f.getError())
@@ -61,26 +55,18 @@ public:
     result.push_back(std::move(*f));
     return std::error_code();
   }
-
-protected:
-  bool _atomizeStrings;
 };
 
-class ELFDSOReader : public Reader {
+class X86_64ELFDSOReader : public ELFDSOReader {
 public:
-  ELFDSOReader(bool useUndefines) : _useUndefines(useUndefines) {}
-
-  bool canParse(file_magic magic, StringRef,
-                const MemoryBuffer &) const override {
-    return (magic == llvm::sys::fs::file_magic::elf_shared_object);
-  }
+  X86_64ELFDSOReader(bool useUndefines) : ELFDSOReader(useUndefines) {}
 
   std::error_code
   parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &,
             std::vector<std::unique_ptr<File>> &result) const override {
     std::size_t maxAlignment =
         1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart()));
-    auto f = createELF<DynamicFileCreateELFTraits>(
+    auto f = createELF<X86_64DynamicFileCreateELFTraits>(
         llvm::object::getElfArchType(mb->getBuffer()), maxAlignment,
         std::move(mb), _useUndefines);
     if (std::error_code ec = f.getError())
@@ -88,12 +74,9 @@ public:
     result.push_back(std::move(*f));
     return std::error_code();
   }
-
-protected:
-  bool _useUndefines;
 };
 
 } // namespace elf
 } // namespace lld
 
-#endif // LLD_READER_WRITER_ELF_READER_H
+#endif // LLD_READER_WRITER_ELF_X86_64_X86_64_READER_H

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp Sat Oct 18 00:23:17 2014
@@ -8,16 +8,13 @@
 //===----------------------------------------------------------------------===//
 
 #include "X86_64LinkingContext.h"
-
+#include "Atoms.h"
+#include "X86_64RelocationPass.h"
 #include "lld/Core/File.h"
 #include "lld/Core/Instrumentation.h"
-
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringSwitch.h"
 
-#include "Atoms.h"
-#include "X86_64RelocationPass.h"
-
 using namespace lld;
 using namespace lld::elf;
 

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h Sat Oct 18 00:23:17 2014
@@ -11,9 +11,7 @@
 #define LLD_READER_WRITER_ELF_X86_64_X86_64_LINKING_CONTEXT_H
 
 #include "X86_64TargetHandler.h"
-
 #include "lld/ReaderWriter/ELFLinkingContext.h"
-
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/ELF.h"
 

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp Sat Oct 18 00:23:17 2014
@@ -7,8 +7,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "X86_64TargetHandler.h"
 #include "X86_64LinkingContext.h"
+#include "X86_64TargetHandler.h"
 
 using namespace lld;
 using namespace elf;

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h Sat Oct 18 00:23:17 2014
@@ -28,8 +28,6 @@ public:
                                   const lld::AtomLayout &,
                                   const Reference &) const override;
 
-  static const Registry::KindStrings kindStrings[];
-
 private:
   // Cached size of the TLS segment.
   mutable uint64_t _tlsSize;

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationPass.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationPass.cpp Sat Oct 18 00:23:17 2014
@@ -20,13 +20,10 @@
 //===----------------------------------------------------------------------===//
 
 #include "X86_64RelocationPass.h"
-
-#include "lld/Core/Simple.h"
-
-#include "llvm/ADT/DenseMap.h"
-
 #include "Atoms.h"
 #include "X86_64LinkingContext.h"
+#include "lld/Core/Simple.h"
+#include "llvm/ADT/DenseMap.h"
 
 using namespace lld;
 using namespace lld::elf;

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp Sat Oct 18 00:23:17 2014
@@ -8,10 +8,10 @@
 //===----------------------------------------------------------------------===//
 
 #include "Atoms.h"
-#include "X86_64ExecutableWriter.h"
 #include "X86_64DynamicLibraryWriter.h"
-#include "X86_64TargetHandler.h"
+#include "X86_64ExecutableWriter.h"
 #include "X86_64LinkingContext.h"
+#include "X86_64TargetHandler.h"
 
 using namespace lld;
 using 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=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h Sat Oct 18 00:23:17 2014
@@ -11,10 +11,10 @@
 #define LLD_READER_WRITER_ELF_X86_64_X86_64_TARGET_HANDLER_H
 
 #include "DefaultTargetHandler.h"
-#include "ELFFile.h"
-#include "X86_64RelocationHandler.h"
 #include "TargetLayout.h"
-
+#include "X86_64ELFFile.h"
+#include "X86_64ELFReader.h"
+#include "X86_64RelocationHandler.h"
 #include "lld/Core/Simple.h"
 
 namespace lld {
@@ -43,6 +43,14 @@ 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> getDSOReader(bool useShlibUndefines) override {
+    return std::unique_ptr<Reader>(new X86_64ELFDSOReader(useShlibUndefines));
+  }
+
   std::unique_ptr<Writer> getWriter() override;
 
 private:

Modified: lld/trunk/test/elf/symbols.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/symbols.test?rev=220129&r1=220128&r2=220129&view=diff
==============================================================================
--- lld/trunk/test/elf/symbols.test (original)
+++ lld/trunk/test/elf/symbols.test Sat Oct 18 00:23:17 2014
@@ -19,15 +19,15 @@ RUN: llvm-nm -n %t1 | FileCheck -check-p
 RUN: lld -flavor gnu -shared -target i386 -e main %p/Inputs/writersyms.o -o %t1
 RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSHAREDSYMS %s
 
-CHECKSYMS:  00000000 a 1.c
-CHECKSYMS:  00000134 T main
-CHECKSYMS:  00001000 A __bss_start
-CHECKSYMS:  00001000 B a
-CHECKSYMS:  00001004 A __bss_end
-CHECKSYMS:  00001004 A _end
-CHECKSYMS:  00001004 A end
+CHECKSYMS:  {{[0-9a-f]+}} a 1.c
+CHECKSYMS:  {{[0-9a-f]+}} T main
+CHECKSYMS:  {{[0-9a-f]+}} A __bss_start
+CHECKSYMS:  {{[0-9a-f]+}} B a
+CHECKSYMS:  {{[0-9a-f]+}} A __bss_end
+CHECKSYMS:  {{[0-9a-f]+}} A _end
+CHECKSYMS:  {{[0-9a-f]+}} A end
 
-CHECKSHAREDSYMS:  00000000 a 1.c
-CHECKSHAREDSYMS:  0000010c T main
-CHECKSHAREDSYMS:  00001000 B a
-CHECKSHAREDSYMS:  00001004 A _end
+CHECKSHAREDSYMS:  {{[0-9a-f]+}} a 1.c
+CHECKSHAREDSYMS:  {{[0-9a-f]+}} T main
+CHECKSHAREDSYMS:  {{[0-9a-f]+}} B a
+CHECKSHAREDSYMS:  {{[0-9a-f]+}} A _end





More information about the llvm-commits mailing list