[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