<div dir="ltr">This is a nice change. Thank you for doing this!</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 25, 2015 at 3:27 PM, Michael J. Spencer <span dir="ltr"><<a href="mailto:bigcheesegs@gmail.com" target="_blank">bigcheesegs@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: mspencer<br>
Date: Wed Feb 25 17:27:13 2015<br>
New Revision: 230574<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=230574&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=230574&view=rev</a><br>
Log:<br>
[ELF][x86] Detemplatify ELFT. There's only a single valid instantiation.<br>
<br>
Added:<br>
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ElfType.h<br>
Modified:<br>
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicLibraryWriter.h<br>
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ExecutableWriter.h<br>
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h<br>
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp<br>
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicLibraryWriter.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicLibraryWriter.h?rev=230574&r1=230573&r2=230574&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicLibraryWriter.h?rev=230574&r1=230573&r2=230574&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicLibraryWriter.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicLibraryWriter.h Wed Feb 25 17:27:13 2015<br>
@@ -10,28 +10,28 @@<br>
 #define X86_64_DYNAMIC_LIBRARY_WRITER_H<br>
<br>
 #include "DynamicLibraryWriter.h"<br>
+#include "X86_64ElfType.h"<br>
 #include "X86_64LinkingContext.h"<br>
 #include "X86_64TargetHandler.h"<br>
<br>
 namespace lld {<br>
 namespace elf {<br>
<br>
-template <class ELFT><br>
-class X86_64DynamicLibraryWriter : public DynamicLibraryWriter<ELFT> {<br>
+class X86_64DynamicLibraryWriter : public DynamicLibraryWriter<X86_64ELFType> {<br>
 public:<br>
   X86_64DynamicLibraryWriter(X86_64LinkingContext &context,<br>
-                             X86_64TargetLayout<ELFT> &layout);<br>
+                             X86_64TargetLayout &layout);<br>
<br>
 protected:<br>
   // Add any runtime files and their atoms to the output<br>
   virtual bool createImplicitFiles(std::vector<std::unique_ptr<File>> &);<br>
<br>
   virtual void finalizeDefaultAtomValues() {<br>
-    return DynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues();<br>
+    return DynamicLibraryWriter::finalizeDefaultAtomValues();<br>
   }<br>
<br>
   virtual void addDefaultAtoms() {<br>
-    return DynamicLibraryWriter<ELFT>::addDefaultAtoms();<br>
+    return DynamicLibraryWriter::addDefaultAtoms();<br>
   }<br>
<br>
 private:<br>
@@ -43,20 +43,17 @@ private:<br>
<br>
   std::unique_ptr<GOTFile> _gotFile;<br>
   X86_64LinkingContext &_context;<br>
-  X86_64TargetLayout<ELFT> &_x86_64Layout;<br>
+  X86_64TargetLayout &_x86_64Layout;<br>
 };<br>
<br>
-template <class ELFT><br>
-X86_64DynamicLibraryWriter<ELFT>::X86_64DynamicLibraryWriter(<br>
-    X86_64LinkingContext &context, X86_64TargetLayout<ELFT> &layout)<br>
-    : DynamicLibraryWriter<ELFT>(context, layout),<br>
-      _gotFile(new GOTFile(context)), _context(context), _x86_64Layout(layout) {<br>
-}<br>
+X86_64DynamicLibraryWriter::X86_64DynamicLibraryWriter(<br>
+    X86_64LinkingContext &context, X86_64TargetLayout &layout)<br>
+    : DynamicLibraryWriter(context, layout), _gotFile(new GOTFile(context)),<br>
+      _context(context), _x86_64Layout(layout) {}<br>
<br>
-template <class ELFT><br>
-bool X86_64DynamicLibraryWriter<ELFT>::createImplicitFiles(<br>
+bool X86_64DynamicLibraryWriter::createImplicitFiles(<br>
     std::vector<std::unique_ptr<File>> &result) {<br>
-  DynamicLibraryWriter<ELFT>::createImplicitFiles(result);<br>
+  DynamicLibraryWriter::createImplicitFiles(result);<br>
   _gotFile->addAtom(*new (_gotFile->_alloc) GLOBAL_OFFSET_TABLEAtom(*_gotFile));<br>
   _gotFile->addAtom(*new (_gotFile->_alloc) DYNAMICAtom(*_gotFile));<br>
   result.push_back(std::move(_gotFile));<br>
<br>
Added: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ElfType.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ElfType.h?rev=230574&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ElfType.h?rev=230574&view=auto</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ElfType.h (added)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ElfType.h Wed Feb 25 17:27:13 2015<br>
@@ -0,0 +1,21 @@<br>
+//===- lib/ReaderWriter/ELF/X86_64/X86_64ElfType.h ------------------------===//<br>
+//<br>
+//                             The LLVM Linker<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#ifndef LLD_READER_WRITER_ELF_X86_64_X86_64_ELF_TYPE_H<br>
+#define LLD_READER_WRITER_ELF_X86_64_X86_64_ELF_TYPE_H<br>
+<br>
+#include "llvm/Object/ELF.h"<br>
+<br>
+namespace lld {<br>
+namespace elf {<br>
+typedef llvm::object::ELFType<llvm::support::little, 2, true> X86_64ELFType;<br>
+}<br>
+}<br>
+<br>
+#endif<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ExecutableWriter.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ExecutableWriter.h?rev=230574&r1=230573&r2=230574&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ExecutableWriter.h?rev=230574&r1=230573&r2=230574&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ExecutableWriter.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ExecutableWriter.h Wed Feb 25 17:27:13 2015<br>
@@ -10,27 +10,38 @@<br>
 #define X86_64_EXECUTABLE_WRITER_H<br>
<br>
 #include "ExecutableWriter.h"<br>
+#include "X86_64ElfType.h"<br>
 #include "X86_64LinkingContext.h"<br>
<br>
 namespace lld {<br>
 namespace elf {<br>
<br>
-template <class ELFT><br>
-class X86_64ExecutableWriter : public ExecutableWriter<ELFT> {<br>
+class X86_64ExecutableWriter : public ExecutableWriter<X86_64ELFType> {<br>
 public:<br>
   X86_64ExecutableWriter(X86_64LinkingContext &context,<br>
-                         X86_64TargetLayout<ELFT> &layout);<br>
+                         X86_64TargetLayout &layout)<br>
+      : ExecutableWriter(context, layout), _gotFile(new GOTFile(context)),<br>
+        _context(context) {}<br>
<br>
 protected:<br>
   // Add any runtime files and their atoms to the output<br>
-  virtual bool createImplicitFiles(std::vector<std::unique_ptr<File>> &);<br>
+  virtual bool<br>
+  createImplicitFiles(std::vector<std::unique_ptr<File>> &result) {<br>
+    ExecutableWriter::createImplicitFiles(result);<br>
+    _gotFile->addAtom(*new (_gotFile->_alloc)<br>
+                      GLOBAL_OFFSET_TABLEAtom(*_gotFile));<br>
+    if (_context.isDynamic())<br>
+      _gotFile->addAtom(*new (_gotFile->_alloc) DYNAMICAtom(*_gotFile));<br>
+    result.push_back(std::move(_gotFile));<br>
+    return true;<br>
+  }<br>
<br>
   virtual void finalizeDefaultAtomValues() {<br>
-    return ExecutableWriter<ELFT>::finalizeDefaultAtomValues();<br>
+    return ExecutableWriter::finalizeDefaultAtomValues();<br>
   }<br>
<br>
   virtual void addDefaultAtoms() {<br>
-    return ExecutableWriter<ELFT>::addDefaultAtoms();<br>
+    return ExecutableWriter::addDefaultAtoms();<br>
   }<br>
<br>
 private:<br>
@@ -42,26 +53,8 @@ private:<br>
<br>
   std::unique_ptr<GOTFile> _gotFile;<br>
   X86_64LinkingContext &_context;<br>
-  X86_64TargetLayout<ELFT> &_x86_64Layout;<br>
 };<br>
<br>
-template <class ELFT><br>
-X86_64ExecutableWriter<ELFT>::X86_64ExecutableWriter(<br>
-    X86_64LinkingContext &context, X86_64TargetLayout<ELFT> &layout)<br>
-    : ExecutableWriter<ELFT>(context, layout), _gotFile(new GOTFile(context)),<br>
-      _context(context), _x86_64Layout(layout) {}<br>
-<br>
-template <class ELFT><br>
-bool X86_64ExecutableWriter<ELFT>::createImplicitFiles(<br>
-    std::vector<std::unique_ptr<File>> &result) {<br>
-  ExecutableWriter<ELFT>::createImplicitFiles(result);<br>
-  _gotFile->addAtom(*new (_gotFile->_alloc) GLOBAL_OFFSET_TABLEAtom(*_gotFile));<br>
-  if (_context.isDynamic())<br>
-    _gotFile->addAtom(*new (_gotFile->_alloc) DYNAMICAtom(*_gotFile));<br>
-  result.push_back(std::move(_gotFile));<br>
-  return true;<br>
-}<br>
-<br>
 } // namespace elf<br>
 } // namespace lld<br>
<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h?rev=230574&r1=230573&r2=230574&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h?rev=230574&r1=230573&r2=230574&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.h Wed Feb 25 17:27:13 2015<br>
@@ -16,11 +16,11 @@ namespace lld {<br>
 namespace elf {<br>
 typedef llvm::object::ELFType<llvm::support::little, 2, true> X86_64ELFType;<br>
<br>
-template <class ELFT> class X86_64TargetLayout;<br>
+class X86_64TargetLayout;<br>
<br>
 class X86_64TargetRelocationHandler final : public TargetRelocationHandler {<br>
 public:<br>
-  X86_64TargetRelocationHandler(X86_64TargetLayout<X86_64ELFType> &layout)<br>
+  X86_64TargetRelocationHandler(X86_64TargetLayout &layout)<br>
       : _tlsSize(0), _x86_64Layout(layout) {}<br>
<br>
   std::error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &,<br>
@@ -30,7 +30,7 @@ public:<br>
 private:<br>
   // Cached size of the TLS segment.<br>
   mutable uint64_t _tlsSize;<br>
-  X86_64TargetLayout<X86_64ELFType> &_x86_64Layout;<br>
+  X86_64TargetLayout &_x86_64Layout;<br>
 };<br>
<br>
 } // end namespace elf<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp?rev=230574&r1=230573&r2=230574&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp?rev=230574&r1=230573&r2=230574&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp Wed Feb 25 17:27:13 2015<br>
@@ -17,10 +17,9 @@ using namespace lld;<br>
 using namespace elf;<br>
<br>
 X86_64TargetHandler::X86_64TargetHandler(X86_64LinkingContext &context)<br>
-    : _context(context),<br>
-      _x86_64TargetLayout(new X86_64TargetLayout<X86_64ELFType>(context)),<br>
-      _x86_64RelocationHandler(new X86_64TargetRelocationHandler(<br>
-          *_x86_64TargetLayout.get())) {}<br>
+    : _context(context), _x86_64TargetLayout(new X86_64TargetLayout(context)),<br>
+      _x86_64RelocationHandler(<br>
+          new X86_64TargetRelocationHandler(*_x86_64TargetLayout.get())) {}<br>
<br>
 void X86_64TargetHandler::registerRelocationNames(Registry &registry) {<br>
   registry.addKindTable(Reference::KindNamespace::ELF,<br>
@@ -30,12 +29,11 @@ void X86_64TargetHandler::registerReloca<br>
 std::unique_ptr<Writer> X86_64TargetHandler::getWriter() {<br>
   switch (this->_context.getOutputELFType()) {<br>
   case llvm::ELF::ET_EXEC:<br>
-    return std::unique_ptr<Writer>(new X86_64ExecutableWriter<X86_64ELFType>(<br>
-        _context, *_x86_64TargetLayout.get()));<br>
+    return std::unique_ptr<Writer>(<br>
+        new X86_64ExecutableWriter(_context, *_x86_64TargetLayout.get()));<br>
   case llvm::ELF::ET_DYN:<br>
     return std::unique_ptr<Writer>(<br>
-        new X86_64DynamicLibraryWriter<X86_64ELFType>(<br>
-            _context, *_x86_64TargetLayout.get()));<br>
+        new X86_64DynamicLibraryWriter(_context, *_x86_64TargetLayout.get()));<br>
   case llvm::ELF::ET_REL:<br>
     llvm_unreachable("TODO: support -r mode");<br>
   default:<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h?rev=230574&r1=230573&r2=230574&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h?rev=230574&r1=230573&r2=230574&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h Wed Feb 25 17:27:13 2015<br>
@@ -11,6 +11,7 @@<br>
 #define LLD_READER_WRITER_ELF_X86_64_X86_64_TARGET_HANDLER_H<br>
<br>
 #include "DefaultTargetHandler.h"<br>
+#include "X86_64LinkingContext.h"<br>
 #include "TargetLayout.h"<br>
 #include "X86_64ELFFile.h"<br>
 #include "X86_64ELFReader.h"<br>
@@ -19,12 +20,10 @@<br>
<br>
 namespace lld {<br>
 namespace elf {<br>
-class X86_64LinkingContext;<br>
-<br>
-template <class ELFT> class X86_64TargetLayout : public TargetLayout<ELFT> {<br>
+class X86_64TargetLayout : public TargetLayout<X86_64ELFType> {<br>
 public:<br>
   X86_64TargetLayout(X86_64LinkingContext &context)<br>
-      : TargetLayout<ELFT>(context) {}<br>
+      : TargetLayout(context) {}<br>
 };<br>
<br>
 class X86_64TargetHandler final<br>
@@ -32,7 +31,7 @@ class X86_64TargetHandler final<br>
 public:<br>
   X86_64TargetHandler(X86_64LinkingContext &context);<br>
<br>
-  X86_64TargetLayout<X86_64ELFType> &getTargetLayout() override {<br>
+  X86_64TargetLayout &getTargetLayout() override {<br>
     return *(_x86_64TargetLayout.get());<br>
   }<br>
<br>
@@ -55,7 +54,7 @@ public:<br>
 private:<br>
   static const Registry::KindStrings kindStrings[];<br>
   X86_64LinkingContext &_context;<br>
-  std::unique_ptr<X86_64TargetLayout<X86_64ELFType>> _x86_64TargetLayout;<br>
+  std::unique_ptr<X86_64TargetLayout> _x86_64TargetLayout;<br>
   std::unique_ptr<X86_64TargetRelocationHandler> _x86_64RelocationHandler;<br>
 };<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>