diff options
Diffstat (limited to 'lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h')
-rw-r--r-- | lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h b/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h index c920cdf153aa..ab91e405fd56 100644 --- a/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h +++ b/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h @@ -10,6 +10,7 @@ #ifndef LLD_READER_WRITER_ELF_HEXAGON_HEXAGON_LINKING_CONTEXT_H #define LLD_READER_WRITER_ELF_HEXAGON_HEXAGON_LINKING_CONTEXT_H +#include "OutputELFWriter.h" #include "lld/ReaderWriter/ELFLinkingContext.h" #include "llvm/Object/ELF.h" #include "llvm/Support/ELF.h" @@ -17,14 +18,13 @@ namespace lld { namespace elf { -typedef llvm::object::ELFType<llvm::support::little, 2, false> HexagonELFType; - class HexagonLinkingContext final : public ELFLinkingContext { public: - static std::unique_ptr<ELFLinkingContext> create(llvm::Triple); + int getMachineType() const override { return llvm::ELF::EM_HEXAGON; } HexagonLinkingContext(llvm::Triple triple); void addPasses(PassManager &) override; + void registerRelocationNames(Registry &r) override; bool isDynamicRelocation(const Reference &r) const override { if (r.kindNamespace() != Reference::KindNamespace::ELF) @@ -41,12 +41,7 @@ public: bool isPLTRelocation(const Reference &r) const override { if (r.kindNamespace() != Reference::KindNamespace::ELF) return false; - switch (r.kindValue()) { - case llvm::ELF::R_HEX_JMP_SLOT: - return true; - default: - return false; - } + return r.kindValue() == llvm::ELF::R_HEX_JMP_SLOT; } /// \brief Hexagon has only one relative relocation @@ -54,15 +49,12 @@ public: bool isRelativeReloc(const Reference &r) const override { if (r.kindNamespace() != Reference::KindNamespace::ELF) return false; - switch (r.kindValue()) { - case llvm::ELF::R_HEX_RELATIVE: - return true; - default: - return false; - } + return r.kindValue() == llvm::ELF::R_HEX_RELATIVE; } }; +void setHexagonELFHeader(ELFHeader<ELF32LE> &elfHeader); + } // elf } // lld |