aboutsummaryrefslogtreecommitdiff
path: root/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h')
-rw-r--r--lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h22
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