diff options
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp')
-rw-r--r-- | lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp index c4116377d6c..083cd9851c0 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp @@ -11,39 +11,54 @@ #include "ARMRelocationPass.h" #include "ARMTargetHandler.h" -using namespace lld; -using namespace lld::elf; +namespace lld { +namespace elf { std::unique_ptr<ELFLinkingContext> -elf::ARMLinkingContext::create(llvm::Triple triple) { +ARMLinkingContext::create(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::arm) - return llvm::make_unique<elf::ARMLinkingContext>(triple); + return llvm::make_unique<ARMLinkingContext>(triple); return nullptr; } -elf::ARMLinkingContext::ARMLinkingContext(llvm::Triple triple) +ARMLinkingContext::ARMLinkingContext(llvm::Triple triple) : ELFLinkingContext(triple, llvm::make_unique<ARMTargetHandler>(*this)) {} -void elf::ARMLinkingContext::addPasses(PassManager &pm) { +void ARMLinkingContext::addPasses(PassManager &pm) { auto pass = createARMRelocationPass(*this); if (pass) pm.add(std::move(pass)); ELFLinkingContext::addPasses(pm); } -bool elf::isARMCode(const DefinedAtom *atom) { +bool isARMCode(const DefinedAtom *atom) { return isARMCode(atom->codeModel()); } -bool elf::isARMCode(DefinedAtom::CodeModel codeModel) { +bool isARMCode(DefinedAtom::CodeModel codeModel) { return !isThumbCode(codeModel); } -bool elf::isThumbCode(const DefinedAtom *atom) { +bool isThumbCode(const DefinedAtom *atom) { return isThumbCode(atom->codeModel()); } -bool elf::isThumbCode(DefinedAtom::CodeModel codeModel) { +bool isThumbCode(DefinedAtom::CodeModel codeModel) { return codeModel == DefinedAtom::codeARMThumb || codeModel == DefinedAtom::codeARM_t; } + +static const Registry::KindStrings kindStrings[] = { +#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), +#include "llvm/Support/ELFRelocs/ARM.def" +#undef ELF_RELOC + LLD_KIND_STRING_END +}; + +void ARMLinkingContext::registerRelocationNames(Registry ®istry) { + registry.addKindTable(Reference::KindNamespace::ELF, Reference::KindArch::ARM, + kindStrings); +} + +} // namespace elf +} // namespace lld |