From 50cf77bc2f1ff8437e90717aa3984fd22a9c23d7 Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Wed, 8 Jan 2014 20:42:38 +0000 Subject: [PATCH] [Mips] Do not use standard relocation identifier R_MIPS_NONE for internal purpose. Use special LLD_R_MIPS_GLOBAL_GOT constant for that. llvm-svn: 198787 --- lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h | 6 ++++++ lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp | 3 +++ lld/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp | 2 +- lld/lib/ReaderWriter/ELF/Mips/MipsSectionChunks.h | 2 +- lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp | 13 +++++++++---- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h index f531ff7..ddfdc43 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h @@ -14,6 +14,12 @@ namespace lld { namespace elf { +/// \brief Mips internal references. +enum { + /// \brief Do nothing but mark GOT entry as a global one. + LLD_R_MIPS_GLOBAL_GOT = 1024 +}; + typedef llvm::object::ELFType Mips32ElELFType; template class MipsTargetLayout; diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp index 1021c74..74b4e18 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp @@ -177,6 +177,9 @@ error_code MipsTargetRelocationHandler::applyRelocation( case R_MIPS_JALR: // We do not do JALR optimization now. break; + case LLD_R_MIPS_GLOBAL_GOT: + // Do nothing. + break; default: { std::string str; llvm::raw_string_ostream s(str); diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp index a8d5da6..a63a57c 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationPass.cpp @@ -138,7 +138,7 @@ private: if (da) ga->addReferenceELF_Mips(R_MIPS_32, 0, a, 0); else - ga->addReferenceELF_Mips(R_MIPS_NONE, 0, a, 0); + ga->addReferenceELF_Mips(LLD_R_MIPS_GLOBAL_GOT, 0, a, 0); _globalGotVector.push_back(ga); } diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsSectionChunks.h b/lld/lib/ReaderWriter/ELF/Mips/MipsSectionChunks.h index ff66503..1d740a5 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsSectionChunks.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsSectionChunks.h @@ -55,7 +55,7 @@ public: continue; assert(r->kindArch() == Reference::KindArch::Mips); if (r->kindValue() == llvm::ELF::R_MIPS_32 || - r->kindValue() == llvm::ELF::R_MIPS_NONE) { + r->kindValue() == LLD_R_MIPS_GLOBAL_GOT) { ta = r->target(); break; } diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp index 2a3c896..25dde40 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp @@ -180,8 +180,13 @@ void MipsTargetHandler::registerRelocationNames(Registry ®istry) { } const Registry::KindStrings MipsTargetHandler::kindStrings[] = { - LLD_KIND_STRING_ENTRY(R_MIPS_NONE), LLD_KIND_STRING_ENTRY(R_MIPS_32), - LLD_KIND_STRING_ENTRY(R_MIPS_HI16), LLD_KIND_STRING_ENTRY(R_MIPS_LO16), - LLD_KIND_STRING_ENTRY(R_MIPS_GOT16), LLD_KIND_STRING_ENTRY(R_MIPS_CALL16), - LLD_KIND_STRING_ENTRY(R_MIPS_JALR), LLD_KIND_STRING_END + LLD_KIND_STRING_ENTRY(R_MIPS_NONE), + LLD_KIND_STRING_ENTRY(R_MIPS_32), + LLD_KIND_STRING_ENTRY(R_MIPS_HI16), + LLD_KIND_STRING_ENTRY(R_MIPS_LO16), + LLD_KIND_STRING_ENTRY(R_MIPS_GOT16), + LLD_KIND_STRING_ENTRY(R_MIPS_CALL16), + LLD_KIND_STRING_ENTRY(R_MIPS_JALR), + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_GLOBAL_GOT), + LLD_KIND_STRING_END }; -- 2.7.4