diff options
| author | Rui Ueyama <ruiu@google.com> | 2013-08-06 22:31:59 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2013-08-06 22:31:59 +0000 |
| commit | 0ca149fce901456eca05ac5244a816303974db03 (patch) | |
| tree | d10916d0f49f34b6533c73c11e9b52b91ab98b68 /lld/lib/ReaderWriter/ELF/Hexagon | |
| parent | 6fea779c2965b233425c9d4a6e7ff745ddd62b4e (diff) | |
| download | bcm5719-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.txt | 4 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableAtoms.h | 8 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp | 170 | ||||
| -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.cpp | 8 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h | 8 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonSectionChunks.h | 6 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonTarget.h | 2 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp | 20 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h | 11 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetInfo.cpp | 218 |
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); -} - |

