From: Simon Atanasyan Date: Mon, 6 Apr 2015 13:25:58 +0000 (+0000) Subject: [Mips] Replace MipsRelocationHandler::readAddend() by a regular function X-Git-Tag: llvmorg-3.7.0-rc1~7514 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=58a7fd48dcd3fca209ab78b91b15e39754a16c1a;p=platform%2Fupstream%2Fllvm.git [Mips] Replace MipsRelocationHandler::readAddend() by a regular function The readAddend() does not depend on MipsRelocationHandler and should not be its member function. llvm-svn: 234154 --- diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h b/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h index 92d1165..a089ab5 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsELFFile.h @@ -244,9 +244,8 @@ private: Reference::Addend readAddend(const Elf_Rel &ri, const ArrayRef content) const { - const auto &rh = this->_ctx.getTargetHandler().getRelocationHandler(); - return static_cast(rh) - .readAddend(getPrimaryType(ri), content.data() + ri.r_offset); + return readMipsRelocAddend(getPrimaryType(ri), + content.data() + ri.r_offset); } uint32_t getPairRelocation(const Elf_Rel &rel) const { diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp index f8035a8..c7d261b 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp @@ -40,9 +40,6 @@ public: const lld::AtomLayout &atom, const Reference &ref) const override; - Reference::Addend readAddend(Reference::KindValue kind, - const uint8_t *content) const override; - private: MipsLinkingContext &_ctx; MipsTargetLayout &_targetLayout; @@ -488,16 +485,15 @@ static ErrorOr calculateRelocation(Reference::KindValue kind, } } -template static uint64_t relocRead(const MipsRelocationParams ¶ms, const uint8_t *loc) { uint64_t data; switch (params._size) { case 4: - data = endian::read(loc); + data = endian::read32le(loc); break; case 8: - data = endian::read(loc); + data = endian::read64le(loc); break; default: llvm_unreachable("Unexpected size"); @@ -572,7 +568,7 @@ std::error_code RelocationHandler::applyRelocation( } auto params = getRelocationParams(op); - uint64_t ins = relocRead(params, location); + uint64_t ins = relocRead(params, location); if (auto ec = adjustJumpOpCode(ins, tgtAddr, jumpMode)) return ec; @@ -583,15 +579,6 @@ std::error_code RelocationHandler::applyRelocation( return std::error_code(); } -template -Reference::Addend -RelocationHandler::readAddend(Reference::KindValue kind, - const uint8_t *content) const { - auto params = getRelocationParams(kind); - uint64_t ins = relocRead(params, content); - return (ins & params._mask) << params._shift; -} - namespace lld { namespace elf { @@ -609,5 +596,12 @@ createMipsRelocationHandler(MipsLinkingContext &ctx, return llvm::make_unique>(ctx, layout); } +Reference::Addend readMipsRelocAddend(Reference::KindValue kind, + const uint8_t *content) { + auto params = getRelocationParams(kind); + uint64_t ins = relocRead(params, content); + return (ins & params._mask) << params._shift; +} + } // elf } // lld diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h index 2633555..32f522c 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h @@ -19,8 +19,6 @@ template class MipsTargetLayout; class MipsRelocationHandler : public TargetRelocationHandler { public: - virtual Reference::Addend readAddend(Reference::KindValue kind, - const uint8_t *content) const = 0; }; template @@ -28,6 +26,8 @@ std::unique_ptr createMipsRelocationHandler(MipsLinkingContext &ctx, MipsTargetLayout &layout); +Reference::Addend readMipsRelocAddend(Reference::KindValue kind, + const uint8_t *content); } // elf } // lld