From 969e70265a5337153c4044922cf1e452c6715642 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 12 Jun 2013 18:21:36 +0000 Subject: [PATCH] [ELF] Remove unused parameter from ELFReference c'tor. Reviewers: shankarke CC: llvm-commits Differential Revision: http://llvm-reviews.chandlerc.com/D961 llvm-svn: 183850 --- lld/lib/ReaderWriter/ELF/Atoms.h | 21 +++++++++++++-------- lld/lib/ReaderWriter/ELF/File.h | 4 ++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lld/lib/ReaderWriter/ELF/Atoms.h b/lld/lib/ReaderWriter/ELF/Atoms.h index 2aa5e80e6dd7..93de82c3e622 100644 --- a/lld/lib/ReaderWriter/ELF/Atoms.h +++ b/lld/lib/ReaderWriter/ELF/Atoms.h @@ -28,22 +28,27 @@ template class TargetAtomHandler; /// \brief Relocation References: Defined Atoms may contain references that will /// need to be patched before the executable is written. +/// +/// Construction of ELFReferences is two pass process. ELFReferences are +/// instantiated while we are iterating over symbol tables to atomize +/// symbols. At that time we only know the index of relocation target symbol +/// (not target atom) about a relocation, so we store the index to +/// ELFREference. In the second pass, ELFReferences are revisited to update +/// target atoms by target symbol indexes. template class ELFReference LLVM_FINAL : public Reference { typedef llvm::object::Elf_Rel_Impl Elf_Rel; typedef llvm::object::Elf_Rel_Impl Elf_Rela; public: - ELFReference(const Elf_Rela *rela, uint64_t offset, const Atom *target, - Kind kind, uint32_t symbol) - : _target(target), _targetSymbolIndex(symbol), - _offsetInAtom(offset), _addend(rela->r_addend) { + ELFReference(const Elf_Rela *rela, uint64_t off, Kind kind, uint32_t idx) + : _target(nullptr), _targetSymbolIndex(idx), + _offsetInAtom(off), _addend(rela->r_addend) { _kind = kind; } - ELFReference(const Elf_Rel *rel, uint64_t offset, const Atom *target, - Kind kind, uint32_t symbol) - : _target(target), _targetSymbolIndex(symbol), - _offsetInAtom(offset), _addend(0) { + ELFReference(const Elf_Rel *rel, uint64_t off, Kind kind, uint32_t idx) + : _target(nullptr), _targetSymbolIndex(idx), + _offsetInAtom(off), _addend(0) { _kind = kind; } diff --git a/lld/lib/ReaderWriter/ELF/File.h b/lld/lib/ReaderWriter/ELF/File.h index 23d8c940dc1c..e579987868ac 100644 --- a/lld/lib/ReaderWriter/ELF/File.h +++ b/lld/lib/ReaderWriter/ELF/File.h @@ -513,7 +513,7 @@ private: Reference::Kind kind = (Reference::Kind) rai.getType(isMips64EL); uint32_t symbolIndex = rai.getSymbol(isMips64EL); auto *ERef = new (_readerStorage) - ELFReference(&rai, rai.r_offset - symbol->st_value, nullptr, + ELFReference(&rai, rai.r_offset - symbol->st_value, kind, symbolIndex); _references.push_back(ERef); } @@ -530,7 +530,7 @@ private: Reference::Kind kind = (Reference::Kind) ri.getType(isMips64EL); uint32_t symbolIndex = ri.getSymbol(isMips64EL); auto *ERef = new (_readerStorage) - ELFReference(&ri, ri.r_offset - symbol->st_value, nullptr, + ELFReference(&ri, ri.r_offset - symbol->st_value, kind, symbolIndex); // Read the addend from the section contents // TODO : We should move the way lld reads relocations totally from -- 2.34.1