[ELF] Use the target's LayoutHandler.

llvm-svn: 173966
diff --git a/lld/lib/ReaderWriter/ELF/DefaultTargetHandler.h b/lld/lib/ReaderWriter/ELF/DefaultTargetHandler.h
index 48f205d..7cc5ae3 100644
--- a/lld/lib/ReaderWriter/ELF/DefaultTargetHandler.h
+++ b/lld/lib/ReaderWriter/ELF/DefaultTargetHandler.h
@@ -34,11 +34,6 @@
     llvm_unreachable("Target should provide implementation for function ");
   }
 
-  /// TargetLayout 
-  TargetLayout<ELFT> &targetLayout() {
-    llvm_unreachable("Target should provide implementation for function ");
-  }
-
   /// TargetAtomHandler
   TargetAtomHandler<ELFT> &targetAtomHandler() {
     llvm_unreachable("Target should provide implementation for function ");
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
index 64c40e6..4eec78a 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
@@ -107,5 +107,6 @@
 }
 
 HexagonTargetHandler::HexagonTargetHandler(HexagonTargetInfo &targetInfo)
-    : DefaultTargetHandler(targetInfo), _relocationHandler(targetInfo){
+    : DefaultTargetHandler(targetInfo), _relocationHandler(targetInfo),
+      _targetLayout(targetInfo) {
 }
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
index cb24773..7875d10 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
@@ -11,6 +11,7 @@
 #define LLD_READER_WRITER_ELF_HEXAGON_TARGET_HANDLER_H
 
 #include "DefaultTargetHandler.h"
+#include "TargetLayout.h"
 
 namespace lld {
 namespace elf {
@@ -35,12 +36,17 @@
 public:
   HexagonTargetHandler(HexagonTargetInfo &targetInfo);
 
+  virtual TargetLayout<HexagonELFType> &targetLayout() {
+    return _targetLayout;
+  }
+
   virtual const HexagonTargetRelocationHandler &getRelocationHandler() const {
     return _relocationHandler;
   }
 
 private:
   HexagonTargetRelocationHandler _relocationHandler;
+  TargetLayout<HexagonELFType> _targetLayout;
 };
 } // end namespace elf
 } // end namespace lld
diff --git a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp
index 2bf02a6..8709e1e 100644
--- a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp
+++ b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp
@@ -62,5 +62,6 @@
 }
 
 PPCTargetHandler::PPCTargetHandler(PPCTargetInfo &targetInfo)
-    : DefaultTargetHandler(targetInfo), _relocationHandler(targetInfo) {
+    : DefaultTargetHandler(targetInfo), _relocationHandler(targetInfo),
+      _targetLayout(targetInfo) {
 }
diff --git a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h
index 3a01fbb..4c91706 100644
--- a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h
+++ b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h
@@ -11,6 +11,7 @@
 #define LLD_READER_WRITER_ELF_PPC_TARGET_HANDLER_H
 
 #include "DefaultTargetHandler.h"
+#include "TargetLayout.h"
 
 namespace lld {
 namespace elf {
@@ -35,12 +36,17 @@
 public:
   PPCTargetHandler(PPCTargetInfo &targetInfo);
 
+  virtual TargetLayout<PPCELFType> &targetLayout() {
+    return _targetLayout;
+  }
+
   virtual const PPCTargetRelocationHandler &getRelocationHandler() const {
     return _relocationHandler;
   }
 
 private:
   PPCTargetRelocationHandler _relocationHandler;
+  TargetLayout<PPCELFType> _targetLayout;
 };
 } // end namespace elf
 } // end namespace lld
diff --git a/lld/lib/ReaderWriter/ELF/Writer.cpp b/lld/lib/ReaderWriter/ELF/Writer.cpp
index e85f38d..4c2ab12 100644
--- a/lld/lib/ReaderWriter/ELF/Writer.cpp
+++ b/lld/lib/ReaderWriter/ELF/Writer.cpp
@@ -75,7 +75,7 @@
 ExecutableWriter<ELFT>::ExecutableWriter(const ELFTargetInfo &ti)
     : _targetInfo(ti), _targetHandler(ti.getTargetHandler<ELFT>()),
       _runtimeFile(ti) {
-  _layout = new TargetLayout<ELFT>(_targetInfo);
+  _layout = &_targetHandler.targetLayout();
 }
 
 template <class ELFT>
diff --git a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp
index 8e80404..6bdb035 100644
--- a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp
+++ b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp
@@ -63,5 +63,6 @@
 }
 
 X86TargetHandler::X86TargetHandler(X86TargetInfo &targetInfo)
-    : DefaultTargetHandler(targetInfo), _relocationHandler(targetInfo) {
+    : DefaultTargetHandler(targetInfo), _relocationHandler(targetInfo),
+      _targetLayout(targetInfo) {
 }
diff --git a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
index 3cdcecb..eeee26b 100644
--- a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
+++ b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
@@ -11,6 +11,7 @@
 #define LLD_READER_WRITER_ELF_X86_TARGET_HANDLER_H
 
 #include "DefaultTargetHandler.h"
+#include "TargetLayout.h"
 
 namespace lld {
 namespace elf {
@@ -35,12 +36,17 @@
 public:
   X86TargetHandler(X86TargetInfo &targetInfo);
 
+  virtual TargetLayout<X86ELFType> &targetLayout() {
+    return _targetLayout;
+  }
+
   virtual const X86TargetRelocationHandler &getRelocationHandler() const {
     return _relocationHandler;
   }
 
 private:
   X86TargetRelocationHandler _relocationHandler;
+  TargetLayout<X86ELFType> _targetLayout;
 };
 } // end namespace elf
 } // end namespace lld