summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Hexagon
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2013-08-06 22:31:59 +0000
committerRui Ueyama <ruiu@google.com>2013-08-06 22:31:59 +0000
commit0ca149fce901456eca05ac5244a816303974db03 (patch)
treed10916d0f49f34b6533c73c11e9b52b91ab98b68 /lld/lib/ReaderWriter/ELF/Hexagon
parent6fea779c2965b233425c9d4a6e7ff745ddd62b4e (diff)
downloadbcm5719-llvm-0ca149fce901456eca05ac5244a816303974db03.tar.gz
bcm5719-llvm-0ca149fce901456eca05ac5244a816303974db03.zip
Rename TargetInfo -> LinkingContext.
Also change some local variable names: "ti" -> "context" and "_targetInfo" -> "_context". Differential Revision: http://llvm-reviews.chandlerc.com/D1301 llvm-svn: 187823
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Hexagon')
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/CMakeLists.txt4
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h8
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp170
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h (renamed from lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.h)19
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp8
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h8
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonSectionChunks.h6
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonTarget.h2
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp20
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h11
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.cpp218
11 files changed, 211 insertions, 263 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/CMakeLists.txt b/lld/lib/ReaderWriter/ELF/Hexagon/CMakeLists.txt
index 013e5e5c220..20c2780ed29 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/CMakeLists.txt
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/CMakeLists.txt
@@ -1,7 +1,7 @@
add_lld_library(lldHexagonELFTarget
- HexagonTargetHandler.cpp
- HexagonTargetInfo.cpp
+ HexagonLinkingContext.cpp
HexagonRelocationHandler.cpp
+ HexagonTargetHandler.cpp
)
target_link_libraries(lldHexagonELFTarget
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
index e2cc935fe29..30996cc249b 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h
@@ -15,15 +15,13 @@
namespace lld {
namespace elf {
typedef llvm::object::ELFType<llvm::support::little, 4, false> HexagonELFType;
-class HexagonTargetInfo;
+class HexagonLinkingContext;
template <class HexagonELFType> class HexagonRuntimeFile
: public CRuntimeFile<HexagonELFType> {
public:
- HexagonRuntimeFile(const HexagonTargetInfo &hti)
- :CRuntimeFile<HexagonELFType>(hti, "Hexagon runtime file")
- {}
-
+ HexagonRuntimeFile(const HexagonLinkingContext &context)
+ : CRuntimeFile<HexagonELFType>(context, "Hexagon runtime file") {}
};
} // elf
} // lld
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
new file mode 100644
index 00000000000..0ce8dd89d23
--- /dev/null
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
@@ -0,0 +1,170 @@
+//===- lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp -------------===//
+//
+// The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "HexagonLinkingContext.h"
+
+#include "lld/Core/File.h"
+#include "lld/Core/Pass.h"
+#include "lld/Core/PassManager.h"
+#include "lld/ReaderWriter/Simple.h"
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringSwitch.h"
+
+using namespace lld;
+
+#define LLD_CASE(name) .Case(#name, llvm::ELF::name)
+
+ErrorOr<Reference::Kind>
+elf::HexagonLinkingContext::relocKindFromString(StringRef str) const {
+ int32_t ret = llvm::StringSwitch<int32_t>(str) LLD_CASE(R_HEX_NONE)
+ LLD_CASE(R_HEX_B22_PCREL) LLD_CASE(R_HEX_B15_PCREL)
+ LLD_CASE(R_HEX_B7_PCREL) LLD_CASE(R_HEX_LO16) LLD_CASE(R_HEX_HI16)
+ LLD_CASE(R_HEX_32) LLD_CASE(R_HEX_16) LLD_CASE(R_HEX_8)
+ LLD_CASE(R_HEX_GPREL16_0) LLD_CASE(R_HEX_GPREL16_1)
+ LLD_CASE(R_HEX_GPREL16_2) LLD_CASE(R_HEX_GPREL16_3) LLD_CASE(R_HEX_HL16)
+ LLD_CASE(R_HEX_B13_PCREL) LLD_CASE(R_HEX_B9_PCREL)
+ LLD_CASE(R_HEX_B32_PCREL_X) LLD_CASE(R_HEX_32_6_X)
+ LLD_CASE(R_HEX_B22_PCREL_X) LLD_CASE(R_HEX_B15_PCREL_X)
+ LLD_CASE(R_HEX_B13_PCREL_X) LLD_CASE(R_HEX_B9_PCREL_X)
+ LLD_CASE(R_HEX_B7_PCREL_X) LLD_CASE(R_HEX_16_X) LLD_CASE(R_HEX_12_X)
+ LLD_CASE(R_HEX_11_X) LLD_CASE(R_HEX_10_X) LLD_CASE(R_HEX_9_X)
+ LLD_CASE(R_HEX_8_X) LLD_CASE(R_HEX_7_X) LLD_CASE(R_HEX_6_X)
+ LLD_CASE(R_HEX_32_PCREL) LLD_CASE(R_HEX_COPY) LLD_CASE(R_HEX_GLOB_DAT)
+ LLD_CASE(R_HEX_JMP_SLOT) LLD_CASE(R_HEX_RELATIVE)
+ LLD_CASE(R_HEX_PLT_B22_PCREL) LLD_CASE(R_HEX_GOTREL_LO16)
+ LLD_CASE(R_HEX_GOTREL_HI16) LLD_CASE(R_HEX_GOTREL_32)
+ LLD_CASE(R_HEX_GOT_LO16) LLD_CASE(R_HEX_GOT_HI16) LLD_CASE(R_HEX_GOT_32)
+ LLD_CASE(R_HEX_GOT_16) LLD_CASE(R_HEX_DTPMOD_32)
+ LLD_CASE(R_HEX_DTPREL_LO16) LLD_CASE(R_HEX_DTPREL_HI16)
+ LLD_CASE(R_HEX_DTPREL_32) LLD_CASE(R_HEX_DTPREL_16)
+ LLD_CASE(R_HEX_GD_PLT_B22_PCREL) LLD_CASE(R_HEX_GD_GOT_LO16)
+ LLD_CASE(R_HEX_GD_GOT_HI16) LLD_CASE(R_HEX_GD_GOT_32)
+ LLD_CASE(R_HEX_GD_GOT_16) LLD_CASE(R_HEX_IE_LO16) LLD_CASE(R_HEX_IE_HI16)
+ LLD_CASE(R_HEX_IE_32) LLD_CASE(R_HEX_IE_GOT_LO16)
+ LLD_CASE(R_HEX_IE_GOT_HI16) LLD_CASE(R_HEX_IE_GOT_32)
+ LLD_CASE(R_HEX_IE_GOT_16) LLD_CASE(R_HEX_TPREL_LO16)
+ LLD_CASE(R_HEX_TPREL_HI16) LLD_CASE(R_HEX_TPREL_32)
+ LLD_CASE(R_HEX_TPREL_16) LLD_CASE(R_HEX_6_PCREL_X)
+ LLD_CASE(R_HEX_GOTREL_32_6_X) LLD_CASE(R_HEX_GOTREL_16_X)
+ LLD_CASE(R_HEX_GOTREL_11_X) LLD_CASE(R_HEX_GOT_32_6_X)
+ LLD_CASE(R_HEX_GOT_16_X) LLD_CASE(R_HEX_GOT_11_X)
+ LLD_CASE(R_HEX_DTPREL_32_6_X) LLD_CASE(R_HEX_DTPREL_16_X)
+ LLD_CASE(R_HEX_DTPREL_11_X) LLD_CASE(R_HEX_GD_GOT_32_6_X)
+ LLD_CASE(R_HEX_GD_GOT_16_X) LLD_CASE(R_HEX_GD_GOT_11_X)
+ LLD_CASE(R_HEX_IE_32_6_X) LLD_CASE(R_HEX_IE_16_X)
+ LLD_CASE(R_HEX_IE_GOT_32_6_X) LLD_CASE(R_HEX_IE_GOT_16_X)
+ LLD_CASE(R_HEX_IE_GOT_11_X) LLD_CASE(R_HEX_TPREL_32_6_X)
+ LLD_CASE(R_HEX_TPREL_16_X) LLD_CASE(R_HEX_TPREL_11_X).Default(-1);
+
+ if (ret == -1)
+ return make_error_code(yaml_reader_error::illegal_value);
+ return ret;
+}
+
+#undef LLD_CASE
+
+#define LLD_CASE(name) \
+ case llvm::ELF::name: \
+ return std::string(#name);
+
+ErrorOr<std::string>
+elf::HexagonLinkingContext::stringFromRelocKind(int32_t kind) const {
+ switch (kind) {
+ LLD_CASE(R_HEX_NONE)
+ LLD_CASE(R_HEX_B22_PCREL)
+ LLD_CASE(R_HEX_B15_PCREL)
+ LLD_CASE(R_HEX_B7_PCREL)
+ LLD_CASE(R_HEX_LO16)
+ LLD_CASE(R_HEX_HI16)
+ LLD_CASE(R_HEX_32)
+ LLD_CASE(R_HEX_16)
+ LLD_CASE(R_HEX_8)
+ LLD_CASE(R_HEX_GPREL16_0)
+ LLD_CASE(R_HEX_GPREL16_1)
+ LLD_CASE(R_HEX_GPREL16_2)
+ LLD_CASE(R_HEX_GPREL16_3)
+ LLD_CASE(R_HEX_HL16)
+ LLD_CASE(R_HEX_B13_PCREL)
+ LLD_CASE(R_HEX_B9_PCREL)
+ LLD_CASE(R_HEX_B32_PCREL_X)
+ LLD_CASE(R_HEX_32_6_X)
+ LLD_CASE(R_HEX_B22_PCREL_X)
+ LLD_CASE(R_HEX_B15_PCREL_X)
+ LLD_CASE(R_HEX_B13_PCREL_X)
+ LLD_CASE(R_HEX_B9_PCREL_X)
+ LLD_CASE(R_HEX_B7_PCREL_X)
+ LLD_CASE(R_HEX_16_X)
+ LLD_CASE(R_HEX_12_X)
+ LLD_CASE(R_HEX_11_X)
+ LLD_CASE(R_HEX_10_X)
+ LLD_CASE(R_HEX_9_X)
+ LLD_CASE(R_HEX_8_X)
+ LLD_CASE(R_HEX_7_X)
+ LLD_CASE(R_HEX_6_X)
+ LLD_CASE(R_HEX_32_PCREL)
+ LLD_CASE(R_HEX_COPY)
+ LLD_CASE(R_HEX_GLOB_DAT)
+ LLD_CASE(R_HEX_JMP_SLOT)
+ LLD_CASE(R_HEX_RELATIVE)
+ LLD_CASE(R_HEX_PLT_B22_PCREL)
+ LLD_CASE(R_HEX_GOTREL_LO16)
+ LLD_CASE(R_HEX_GOTREL_HI16)
+ LLD_CASE(R_HEX_GOTREL_32)
+ LLD_CASE(R_HEX_GOT_LO16)
+ LLD_CASE(R_HEX_GOT_HI16)
+ LLD_CASE(R_HEX_GOT_32)
+ LLD_CASE(R_HEX_GOT_16)
+ LLD_CASE(R_HEX_DTPMOD_32)
+ LLD_CASE(R_HEX_DTPREL_LO16)
+ LLD_CASE(R_HEX_DTPREL_HI16)
+ LLD_CASE(R_HEX_DTPREL_32)
+ LLD_CASE(R_HEX_DTPREL_16)
+ LLD_CASE(R_HEX_GD_PLT_B22_PCREL)
+ LLD_CASE(R_HEX_GD_GOT_LO16)
+ LLD_CASE(R_HEX_GD_GOT_HI16)
+ LLD_CASE(R_HEX_GD_GOT_32)
+ LLD_CASE(R_HEX_GD_GOT_16)
+ LLD_CASE(R_HEX_IE_LO16)
+ LLD_CASE(R_HEX_IE_HI16)
+ LLD_CASE(R_HEX_IE_32)
+ LLD_CASE(R_HEX_IE_GOT_LO16)
+ LLD_CASE(R_HEX_IE_GOT_HI16)
+ LLD_CASE(R_HEX_IE_GOT_32)
+ LLD_CASE(R_HEX_IE_GOT_16)
+ LLD_CASE(R_HEX_TPREL_LO16)
+ LLD_CASE(R_HEX_TPREL_HI16)
+ LLD_CASE(R_HEX_TPREL_32)
+ LLD_CASE(R_HEX_TPREL_16)
+ LLD_CASE(R_HEX_6_PCREL_X)
+ LLD_CASE(R_HEX_GOTREL_32_6_X)
+ LLD_CASE(R_HEX_GOTREL_16_X)
+ LLD_CASE(R_HEX_GOTREL_11_X)
+ LLD_CASE(R_HEX_GOT_32_6_X)
+ LLD_CASE(R_HEX_GOT_16_X)
+ LLD_CASE(R_HEX_GOT_11_X)
+ LLD_CASE(R_HEX_DTPREL_32_6_X)
+ LLD_CASE(R_HEX_DTPREL_16_X)
+ LLD_CASE(R_HEX_DTPREL_11_X)
+ LLD_CASE(R_HEX_GD_GOT_32_6_X)
+ LLD_CASE(R_HEX_GD_GOT_16_X)
+ LLD_CASE(R_HEX_GD_GOT_11_X)
+ LLD_CASE(R_HEX_IE_32_6_X)
+ LLD_CASE(R_HEX_IE_16_X)
+ LLD_CASE(R_HEX_IE_GOT_32_6_X)
+ LLD_CASE(R_HEX_IE_GOT_16_X)
+ LLD_CASE(R_HEX_IE_GOT_11_X)
+ LLD_CASE(R_HEX_TPREL_32_6_X)
+ LLD_CASE(R_HEX_TPREL_16_X)
+ LLD_CASE(R_HEX_TPREL_11_X)
+ }
+
+ return make_error_code(yaml_reader_error::illegal_value);
+}
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h
index 5e7b44c6d05..91525892e68 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.h
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h
@@ -1,4 +1,4 @@
-//===- lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.h -------------------===//
+//===- lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h ---------------===//
//
// The LLVM Linker
//
@@ -12,7 +12,7 @@
#include "HexagonTargetHandler.h"
-#include "lld/ReaderWriter/ELFTargetInfo.h"
+#include "lld/ReaderWriter/ELFLinkingContext.h"
#include "llvm/Object/ELF.h"
#include "llvm/Support/ELF.h"
@@ -20,11 +20,11 @@
namespace lld {
namespace elf {
-class HexagonTargetInfo LLVM_FINAL : public ELFTargetInfo {
+class HexagonLinkingContext LLVM_FINAL : public ELFLinkingContext {
public:
- HexagonTargetInfo(llvm::Triple triple)
- : ELFTargetInfo(triple, std::unique_ptr<TargetHandlerBase>(
- new HexagonTargetHandler(*this))) {}
+ HexagonLinkingContext(llvm::Triple triple)
+ : ELFLinkingContext(triple, std::unique_ptr<TargetHandlerBase>(
+ new HexagonTargetHandler(*this))) {}
virtual ErrorOr<Reference::Kind> relocKindFromString(StringRef str) const;
virtual ErrorOr<std::string> stringFromRelocKind(Reference::Kind kind) const;
@@ -33,7 +33,7 @@ public:
virtual bool isDynamicRelocation(const DefinedAtom &,
const Reference &r) const {
- switch (r.kind()){
+ switch (r.kind()) {
case llvm::ELF::R_HEX_RELATIVE:
case llvm::ELF::R_HEX_GLOB_DAT:
return true;
@@ -42,9 +42,8 @@ public:
}
}
- virtual bool isPLTRelocation(const DefinedAtom &,
- const Reference &r) const {
- switch (r.kind()){
+ virtual bool isPLTRelocation(const DefinedAtom &, const Reference &r) const {
+ switch (r.kind()) {
case llvm::ELF::R_HEX_JMP_SLOT:
return true;
default:
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp
index 2ff6f2eebc3..ac7f18bfe9c 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp
@@ -8,7 +8,7 @@
//===----------------------------------------------------------------------===//
#include "HexagonTargetHandler.h"
-#include "HexagonTargetInfo.h"
+#include "HexagonLinkingContext.h"
#include "HexagonRelocationHandler.h"
#include "HexagonRelocationFunctions.h"
@@ -343,9 +343,9 @@ ErrorOr<void> HexagonTargetRelocationHandler::applyRelocation(
default : {
std::string str;
llvm::raw_string_ostream s(str);
- auto name = _targetInfo.stringFromRelocKind(ref.kind());
- s << "Unhandled relocation: "
- << (name ? *name : "<unknown>" ) << " (" << ref.kind() << ")";
+ auto name = _context.stringFromRelocKind(ref.kind());
+ s << "Unhandled relocation: " << (name ? *name : "<unknown>") << " ("
+ << ref.kind() << ")";
s.flush();
llvm_unreachable(str.c_str());
}
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h
index b4ab949ecb9..ba2d32043cd 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h
@@ -17,7 +17,7 @@ namespace lld {
namespace elf {
typedef llvm::object::ELFType<llvm::support::little, 4, false> HexagonELFType;
-class HexagonTargetInfo;
+class HexagonLinkingContext;
class HexagonTargetHandler;
template <class HexagonELFType> class HexagonTargetLayout;
@@ -25,15 +25,15 @@ class HexagonTargetRelocationHandler LLVM_FINAL :
public TargetRelocationHandler<HexagonELFType> {
public:
HexagonTargetRelocationHandler(
- const HexagonTargetInfo &ti, const HexagonTargetHandler &tH,
+ const HexagonLinkingContext &context, const HexagonTargetHandler &tH,
const HexagonTargetLayout<HexagonELFType> &layout)
- : _targetInfo(ti), _targetHandler(tH), _targetLayout(layout) {}
+ : _context(context), _targetHandler(tH), _targetLayout(layout) {}
virtual ErrorOr<void>
applyRelocation(ELFWriter &, llvm::FileOutputBuffer &,
const lld::AtomLayout &, const Reference &) const;
private:
- const HexagonTargetInfo &_targetInfo;
+ const HexagonLinkingContext &_context;
const HexagonTargetHandler &_targetHandler;
const HexagonTargetLayout<HexagonELFType> &_targetLayout;
};
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonSectionChunks.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonSectionChunks.h
index 26f0a453585..0d103db226c 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonSectionChunks.h
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonSectionChunks.h
@@ -15,15 +15,15 @@ namespace lld {
namespace elf {
typedef llvm::object::ELFType<llvm::support::little, 4, false> HexagonELFType;
template <typename ELFT> class HexagonTargetLayout;
-class HexagonTargetInfo;
+class HexagonLinkingContext;
/// \brief Handle Hexagon SData section
template <class HexagonELFType>
class SDataSection : public AtomSection<HexagonELFType> {
public:
- SDataSection(const HexagonTargetInfo &hti)
+ SDataSection(const HexagonLinkingContext &context)
: AtomSection<HexagonELFType>(
- hti, ".sdata", DefinedAtom::typeDataFast, 0,
+ context, ".sdata", DefinedAtom::typeDataFast, 0,
HexagonTargetLayout<HexagonELFType>::ORDER_SDATA) {
this->_type = SHT_PROGBITS;
this->_flags = SHF_ALLOC | SHF_WRITE;
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTarget.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTarget.h
index 8d7e61093b1..af989964294 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTarget.h
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTarget.h
@@ -7,4 +7,4 @@
//
//===----------------------------------------------------------------------===//
-#include "HexagonTargetInfo.h"
+#include "HexagonLinkingContext.h"
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
index dd886720914..142d6f098ad 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
@@ -8,17 +8,17 @@
//===----------------------------------------------------------------------===//
#include "HexagonTargetHandler.h"
-#include "HexagonTargetInfo.h"
+#include "HexagonLinkingContext.h"
using namespace lld;
using namespace elf;
using namespace llvm::ELF;
-HexagonTargetHandler::HexagonTargetHandler(HexagonTargetInfo &targetInfo)
- : DefaultTargetHandler(targetInfo), _targetLayout(targetInfo),
- _relocationHandler(targetInfo, *this, _targetLayout),
- _hexagonRuntimeFile(targetInfo) {}
+HexagonTargetHandler::HexagonTargetHandler(HexagonLinkingContext &context)
+ : DefaultTargetHandler(context), _targetLayout(context),
+ _relocationHandler(context, *this, _targetLayout),
+ _hexagonRuntimeFile(context) {}
namespace {
@@ -107,7 +107,7 @@ public:
class ELFPassFile : public SimpleFile {
public:
- ELFPassFile(const ELFTargetInfo &eti) : SimpleFile(eti, "ELFPassFile") {}
+ ELFPassFile(const ELFLinkingContext &eti) : SimpleFile(eti, "ELFPassFile") {}
llvm::BumpPtrAllocator _alloc;
};
@@ -144,7 +144,7 @@ protected:
}
public:
- GOTPLTPass(const ELFTargetInfo &ti)
+ GOTPLTPass(const ELFLinkingContext &ti)
: _file(ti), _null(nullptr), _PLT0(nullptr), _got0(nullptr) {}
/// \brief Do the pass.
@@ -212,7 +212,7 @@ protected:
class DynamicGOTPLTPass LLVM_FINAL : public GOTPLTPass<DynamicGOTPLTPass> {
public:
- DynamicGOTPLTPass(const elf::HexagonTargetInfo &ti) : GOTPLTPass(ti) {
+ DynamicGOTPLTPass(const elf::HexagonLinkingContext &ti) : GOTPLTPass(ti) {
_got0 = new (_file._alloc) HexagonGOTPLT0Atom(_file);
#ifndef NDEBUG
_got0->_name = "__got0";
@@ -291,8 +291,8 @@ public:
};
} // end anonymous namespace
-void elf::HexagonTargetInfo::addPasses(PassManager &pm) const {
+void elf::HexagonLinkingContext::addPasses(PassManager &pm) const {
if (isDynamic())
pm.add(std::unique_ptr<Pass>(new DynamicGOTPLTPass(*this)));
- ELFTargetInfo::addPasses(pm);
+ ELFLinkingContext::addPasses(pm);
}
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
index be2977b7f38..36546f92269 100644
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
+++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
@@ -19,8 +19,7 @@
namespace lld {
namespace elf {
typedef llvm::object::ELFType<llvm::support::little, 4, false> HexagonELFType;
-class HexagonTargetInfo;
-
+class HexagonLinkingContext;
/// \brief Handle Hexagon specific Atoms
template <class HexagonELFType>
@@ -85,7 +84,7 @@ public:
ORDER_SDATA = 205
};
- HexagonTargetLayout(const HexagonTargetInfo &hti)
+ HexagonTargetLayout(const HexagonLinkingContext &hti)
: TargetLayout<HexagonELFType>(hti), _sdataSection(nullptr) {
_sdataSection = new (_alloc) SDataSection<HexagonELFType>(hti);
}
@@ -145,7 +144,7 @@ private:
class HexagonTargetHandler LLVM_FINAL :
public DefaultTargetHandler<HexagonELFType> {
public:
- HexagonTargetHandler(HexagonTargetInfo &targetInfo);
+ HexagonTargetHandler(HexagonLinkingContext &targetInfo);
bool doesOverrideHeader() { return true; }
@@ -170,7 +169,7 @@ public:
void addDefaultAtoms() {
_hexagonRuntimeFile.addAbsoluteAtom("_SDA_BASE_");
- if (_targetInfo.isDynamic()) {
+ if (_context.isDynamic()) {
_hexagonRuntimeFile.addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
_hexagonRuntimeFile.addAbsoluteAtom("_DYNAMIC");
}
@@ -185,7 +184,7 @@ public:
auto sdabaseAtomIter = _targetLayout.findAbsoluteAtom("_SDA_BASE_");
(*sdabaseAtomIter)->_virtualAddr =
_targetLayout.getSDataSection()->virtualAddr();
- if (_targetInfo.isDynamic()) {
+ if (_context.isDynamic()) {
auto gotAtomIter =
_targetLayout.findAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
_gotSymAtom = (*gotAtomIter);
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.cpp
deleted file mode 100644
index 49d91434fde..00000000000
--- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-//===- lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.cpp -----------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "HexagonTargetInfo.h"
-
-#include "lld/Core/File.h"
-#include "lld/Core/Pass.h"
-#include "lld/Core/PassManager.h"
-#include "lld/ReaderWriter/Simple.h"
-
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/StringSwitch.h"
-
-using namespace lld;
-
-#define LLD_CASE(name) .Case(#name, llvm::ELF::name)
-
-ErrorOr<Reference::Kind>
-elf::HexagonTargetInfo::relocKindFromString(StringRef str) const {
- int32_t ret = llvm::StringSwitch<int32_t>(str)
- LLD_CASE(R_HEX_NONE)
- LLD_CASE(R_HEX_B22_PCREL)
- LLD_CASE(R_HEX_B15_PCREL)
- LLD_CASE(R_HEX_B7_PCREL)
- LLD_CASE(R_HEX_LO16)
- LLD_CASE(R_HEX_HI16)
- LLD_CASE(R_HEX_32)
- LLD_CASE(R_HEX_16)
- LLD_CASE(R_HEX_8)
- LLD_CASE(R_HEX_GPREL16_0)
- LLD_CASE(R_HEX_GPREL16_1)
- LLD_CASE(R_HEX_GPREL16_2)
- LLD_CASE(R_HEX_GPREL16_3)
- LLD_CASE(R_HEX_HL16)
- LLD_CASE(R_HEX_B13_PCREL)
- LLD_CASE(R_HEX_B9_PCREL)
- LLD_CASE(R_HEX_B32_PCREL_X)
- LLD_CASE(R_HEX_32_6_X)
- LLD_CASE(R_HEX_B22_PCREL_X)
- LLD_CASE(R_HEX_B15_PCREL_X)
- LLD_CASE(R_HEX_B13_PCREL_X)
- LLD_CASE(R_HEX_B9_PCREL_X)
- LLD_CASE(R_HEX_B7_PCREL_X)
- LLD_CASE(R_HEX_16_X)
- LLD_CASE(R_HEX_12_X)
- LLD_CASE(R_HEX_11_X)
- LLD_CASE(R_HEX_10_X)
- LLD_CASE(R_HEX_9_X)
- LLD_CASE(R_HEX_8_X)
- LLD_CASE(R_HEX_7_X)
- LLD_CASE(R_HEX_6_X)
- LLD_CASE(R_HEX_32_PCREL)
- LLD_CASE(R_HEX_COPY)
- LLD_CASE(R_HEX_GLOB_DAT)
- LLD_CASE(R_HEX_JMP_SLOT)
- LLD_CASE(R_HEX_RELATIVE)
- LLD_CASE(R_HEX_PLT_B22_PCREL)
- LLD_CASE(R_HEX_GOTREL_LO16)
- LLD_CASE(R_HEX_GOTREL_HI16)
- LLD_CASE(R_HEX_GOTREL_32)
- LLD_CASE(R_HEX_GOT_LO16)
- LLD_CASE(R_HEX_GOT_HI16)
- LLD_CASE(R_HEX_GOT_32)
- LLD_CASE(R_HEX_GOT_16)
- LLD_CASE(R_HEX_DTPMOD_32)
- LLD_CASE(R_HEX_DTPREL_LO16)
- LLD_CASE(R_HEX_DTPREL_HI16)
- LLD_CASE(R_HEX_DTPREL_32)
- LLD_CASE(R_HEX_DTPREL_16)
- LLD_CASE(R_HEX_GD_PLT_B22_PCREL)
- LLD_CASE(R_HEX_GD_GOT_LO16)
- LLD_CASE(R_HEX_GD_GOT_HI16)
- LLD_CASE(R_HEX_GD_GOT_32)
- LLD_CASE(R_HEX_GD_GOT_16)
- LLD_CASE(R_HEX_IE_LO16)
- LLD_CASE(R_HEX_IE_HI16)
- LLD_CASE(R_HEX_IE_32)
- LLD_CASE(R_HEX_IE_GOT_LO16)
- LLD_CASE(R_HEX_IE_GOT_HI16)
- LLD_CASE(R_HEX_IE_GOT_32)
- LLD_CASE(R_HEX_IE_GOT_16)
- LLD_CASE(R_HEX_TPREL_LO16)
- LLD_CASE(R_HEX_TPREL_HI16)
- LLD_CASE(R_HEX_TPREL_32)
- LLD_CASE(R_HEX_TPREL_16)
- LLD_CASE(R_HEX_6_PCREL_X)
- LLD_CASE(R_HEX_GOTREL_32_6_X)
- LLD_CASE(R_HEX_GOTREL_16_X)
- LLD_CASE(R_HEX_GOTREL_11_X)
- LLD_CASE(R_HEX_GOT_32_6_X)
- LLD_CASE(R_HEX_GOT_16_X)
- LLD_CASE(R_HEX_GOT_11_X)
- LLD_CASE(R_HEX_DTPREL_32_6_X)
- LLD_CASE(R_HEX_DTPREL_16_X)
- LLD_CASE(R_HEX_DTPREL_11_X)
- LLD_CASE(R_HEX_GD_GOT_32_6_X)
- LLD_CASE(R_HEX_GD_GOT_16_X)
- LLD_CASE(R_HEX_GD_GOT_11_X)
- LLD_CASE(R_HEX_IE_32_6_X)
- LLD_CASE(R_HEX_IE_16_X)
- LLD_CASE(R_HEX_IE_GOT_32_6_X)
- LLD_CASE(R_HEX_IE_GOT_16_X)
- LLD_CASE(R_HEX_IE_GOT_11_X)
- LLD_CASE(R_HEX_TPREL_32_6_X)
- LLD_CASE(R_HEX_TPREL_16_X)
- LLD_CASE(R_HEX_TPREL_11_X)
- .Default(-1);
-
- if (ret == -1)
- return make_error_code(yaml_reader_error::illegal_value);
- return ret;
-}
-
-#undef LLD_CASE
-
-#define LLD_CASE(name) case llvm::ELF::name: return std::string(#name);
-
-ErrorOr<std::string> elf::HexagonTargetInfo::stringFromRelocKind(
- int32_t kind) const {
- switch (kind) {
- LLD_CASE(R_HEX_NONE)
- LLD_CASE(R_HEX_B22_PCREL)
- LLD_CASE(R_HEX_B15_PCREL)
- LLD_CASE(R_HEX_B7_PCREL)
- LLD_CASE(R_HEX_LO16)
- LLD_CASE(R_HEX_HI16)
- LLD_CASE(R_HEX_32)
- LLD_CASE(R_HEX_16)
- LLD_CASE(R_HEX_8)
- LLD_CASE(R_HEX_GPREL16_0)
- LLD_CASE(R_HEX_GPREL16_1)
- LLD_CASE(R_HEX_GPREL16_2)
- LLD_CASE(R_HEX_GPREL16_3)
- LLD_CASE(R_HEX_HL16)
- LLD_CASE(R_HEX_B13_PCREL)
- LLD_CASE(R_HEX_B9_PCREL)
- LLD_CASE(R_HEX_B32_PCREL_X)
- LLD_CASE(R_HEX_32_6_X)
- LLD_CASE(R_HEX_B22_PCREL_X)
- LLD_CASE(R_HEX_B15_PCREL_X)
- LLD_CASE(R_HEX_B13_PCREL_X)
- LLD_CASE(R_HEX_B9_PCREL_X)
- LLD_CASE(R_HEX_B7_PCREL_X)
- LLD_CASE(R_HEX_16_X)
- LLD_CASE(R_HEX_12_X)
- LLD_CASE(R_HEX_11_X)
- LLD_CASE(R_HEX_10_X)
- LLD_CASE(R_HEX_9_X)
- LLD_CASE(R_HEX_8_X)
- LLD_CASE(R_HEX_7_X)
- LLD_CASE(R_HEX_6_X)
- LLD_CASE(R_HEX_32_PCREL)
- LLD_CASE(R_HEX_COPY)
- LLD_CASE(R_HEX_GLOB_DAT)
- LLD_CASE(R_HEX_JMP_SLOT)
- LLD_CASE(R_HEX_RELATIVE)
- LLD_CASE(R_HEX_PLT_B22_PCREL)
- LLD_CASE(R_HEX_GOTREL_LO16)
- LLD_CASE(R_HEX_GOTREL_HI16)
- LLD_CASE(R_HEX_GOTREL_32)
- LLD_CASE(R_HEX_GOT_LO16)
- LLD_CASE(R_HEX_GOT_HI16)
- LLD_CASE(R_HEX_GOT_32)
- LLD_CASE(R_HEX_GOT_16)
- LLD_CASE(R_HEX_DTPMOD_32)
- LLD_CASE(R_HEX_DTPREL_LO16)
- LLD_CASE(R_HEX_DTPREL_HI16)
- LLD_CASE(R_HEX_DTPREL_32)
- LLD_CASE(R_HEX_DTPREL_16)
- LLD_CASE(R_HEX_GD_PLT_B22_PCREL)
- LLD_CASE(R_HEX_GD_GOT_LO16)
- LLD_CASE(R_HEX_GD_GOT_HI16)
- LLD_CASE(R_HEX_GD_GOT_32)
- LLD_CASE(R_HEX_GD_GOT_16)
- LLD_CASE(R_HEX_IE_LO16)
- LLD_CASE(R_HEX_IE_HI16)
- LLD_CASE(R_HEX_IE_32)
- LLD_CASE(R_HEX_IE_GOT_LO16)
- LLD_CASE(R_HEX_IE_GOT_HI16)
- LLD_CASE(R_HEX_IE_GOT_32)
- LLD_CASE(R_HEX_IE_GOT_16)
- LLD_CASE(R_HEX_TPREL_LO16)
- LLD_CASE(R_HEX_TPREL_HI16)
- LLD_CASE(R_HEX_TPREL_32)
- LLD_CASE(R_HEX_TPREL_16)
- LLD_CASE(R_HEX_6_PCREL_X)
- LLD_CASE(R_HEX_GOTREL_32_6_X)
- LLD_CASE(R_HEX_GOTREL_16_X)
- LLD_CASE(R_HEX_GOTREL_11_X)
- LLD_CASE(R_HEX_GOT_32_6_X)
- LLD_CASE(R_HEX_GOT_16_X)
- LLD_CASE(R_HEX_GOT_11_X)
- LLD_CASE(R_HEX_DTPREL_32_6_X)
- LLD_CASE(R_HEX_DTPREL_16_X)
- LLD_CASE(R_HEX_DTPREL_11_X)
- LLD_CASE(R_HEX_GD_GOT_32_6_X)
- LLD_CASE(R_HEX_GD_GOT_16_X)
- LLD_CASE(R_HEX_GD_GOT_11_X)
- LLD_CASE(R_HEX_IE_32_6_X)
- LLD_CASE(R_HEX_IE_16_X)
- LLD_CASE(R_HEX_IE_GOT_32_6_X)
- LLD_CASE(R_HEX_IE_GOT_16_X)
- LLD_CASE(R_HEX_IE_GOT_11_X)
- LLD_CASE(R_HEX_TPREL_32_6_X)
- LLD_CASE(R_HEX_TPREL_16_X)
- LLD_CASE(R_HEX_TPREL_11_X)
- }
-
- return make_error_code(yaml_reader_error::illegal_value);
-}
-
OpenPOWER on IntegriCloud