diff options
Diffstat (limited to 'lld/lib/ReaderWriter/ELF')
18 files changed, 148 insertions, 203 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Atoms.h b/lld/lib/ReaderWriter/ELF/Atoms.h index 8e2d1caf269..382e071335d 100644 --- a/lld/lib/ReaderWriter/ELF/Atoms.h +++ b/lld/lib/ReaderWriter/ELF/Atoms.h @@ -40,27 +40,22 @@ template <class ELFT> class ELFReference LLVM_FINAL : public Reference { typedef llvm::object::Elf_Rel_Impl<ELFT, false> Elf_Rel; typedef llvm::object::Elf_Rel_Impl<ELFT, true> Elf_Rela; public: - - ELFReference(const Elf_Rela *rela, uint64_t off, Reference::KindArch arch, - uint16_t relocType, uint32_t idx) - : Reference(Reference::KindNamespace::ELF, arch, relocType), - _target(nullptr), _targetSymbolIndex(idx), - _offsetInAtom(off), _addend(rela->r_addend) { - } - - ELFReference(const Elf_Rel *rel, uint64_t off, Reference::KindArch arch, - uint16_t relocType, uint32_t idx) - : Reference(Reference::KindNamespace::ELF, arch, relocType), - _target(nullptr), _targetSymbolIndex(idx), - _offsetInAtom(off), _addend(0) { - } + ELFReference(const Elf_Rela *rela, uint64_t off, Reference::KindArch arch, + uint16_t relocType, uint32_t idx) + : Reference(Reference::KindNamespace::ELF, arch, relocType), + _target(nullptr), _targetSymbolIndex(idx), _offsetInAtom(off), + _addend(rela->r_addend) {} + + ELFReference(const Elf_Rel *rel, uint64_t off, Reference::KindArch arch, + uint16_t relocType, uint32_t idx) + : Reference(Reference::KindNamespace::ELF, arch, relocType), + _target(nullptr), _targetSymbolIndex(idx), _offsetInAtom(off), + _addend(0) {} ELFReference(uint32_t edgeKind) - : Reference(Reference::KindNamespace::all, - Reference::KindArch::all, edgeKind), - _target(nullptr), _targetSymbolIndex(0), - _offsetInAtom(0), _addend(0) { - } + : Reference(Reference::KindNamespace::all, Reference::KindArch::all, + edgeKind), + _target(nullptr), _targetSymbolIndex(0), _offsetInAtom(0), _addend(0) {} virtual uint64_t offsetInAtom() const { return _offsetInAtom; } @@ -169,33 +164,19 @@ class ELFDefinedAtom LLVM_FINAL : public DefinedAtom { typedef llvm::object::Elf_Shdr_Impl<ELFT> Elf_Shdr; public: - ELFDefinedAtom(const ELFFile<ELFT> &file, - StringRef symbolName, - StringRef sectionName, - const Elf_Sym *symbol, - const Elf_Shdr *section, - ArrayRef<uint8_t> contentData, - unsigned int referenceStart, - unsigned int referenceEnd, - std::vector<ELFReference<ELFT>*> &referenceList) - - : _owningFile(file) - , _symbolName(symbolName) - , _sectionName(sectionName) - , _symbol(symbol) - , _section(section) - , _contentData(contentData) - , _referenceStartIndex(referenceStart) - , _referenceEndIndex(referenceEnd) - , _referenceList(referenceList) - , _targetAtomHandler(nullptr) - , _contentType(typeUnknown) - , _permissions(permUnknown) { - } + ELFDefinedAtom(const ELFFile<ELFT> &file, StringRef symbolName, + StringRef sectionName, const Elf_Sym *symbol, + const Elf_Shdr *section, ArrayRef<uint8_t> contentData, + unsigned int referenceStart, unsigned int referenceEnd, + std::vector<ELFReference<ELFT> *> &referenceList) + : _owningFile(file), _symbolName(symbolName), _sectionName(sectionName), + _symbol(symbol), _section(section), _contentData(contentData), + _referenceStartIndex(referenceStart), _referenceEndIndex(referenceEnd), + _referenceList(referenceList), _targetAtomHandler(nullptr), + _contentType(typeUnknown), _permissions(permUnknown) {} + + ~ELFDefinedAtom() {} - ~ELFDefinedAtom() { - } - virtual const ELFFile<ELFT> &file() const { return _owningFile; } @@ -219,7 +200,7 @@ public: // Treat target defined common symbols if ((_symbol->st_shndx > llvm::ELF::SHN_LOPROC && _symbol->st_shndx < llvm::ELF::SHN_HIPROC)) { - if (!_targetAtomHandler) + if (!_targetAtomHandler) _targetAtomHandler = &_owningFile.targetHandler()->targetAtomHandler(); if (_targetAtomHandler->getType(_symbol) == llvm::ELF::STT_COMMON) return (uint64_t) _symbol->st_size; @@ -255,7 +236,7 @@ public: // mergeTentative if ((_symbol->st_shndx > llvm::ELF::SHN_LOPROC && _symbol->st_shndx < llvm::ELF::SHN_HIPROC)) { - if (!_targetAtomHandler) + if (!_targetAtomHandler) _targetAtomHandler = &_owningFile.targetHandler()->targetAtomHandler(); if (_targetAtomHandler->getType(_symbol) == llvm::ELF::STT_COMMON) return mergeAsTentative; @@ -664,8 +645,8 @@ public: virtual ContentType contentType() const { if (_symbol->st_shndx >= llvm::ELF::SHN_LORESERVE && _symbol->st_shndx <= llvm::ELF::SHN_HIOS) - return _owningFile.targetHandler()->targetAtomHandler(). - contentType(nullptr, _symbol); + return _owningFile.targetHandler()->targetAtomHandler().contentType( + nullptr, _symbol); return typeZeroFill; } @@ -788,41 +769,38 @@ private: const Elf_Sym *_symbol; }; - class SimpleELFDefinedAtom : public SimpleDefinedAtom { public: - SimpleELFDefinedAtom(const File &f) : SimpleDefinedAtom(f) { } + SimpleELFDefinedAtom(const File &f) : SimpleDefinedAtom(f) {} - void addReferenceELF(Reference::KindArch arch, - uint16_t kindValue, uint64_t off, const Atom *target, - Reference::Addend addend) { - this->addReference(Reference::KindNamespace::ELF, arch, kindValue, - off, target, addend); + void addReferenceELF(Reference::KindArch arch, uint16_t kindValue, + uint64_t off, const Atom *target, + Reference::Addend addend) { + this->addReference(Reference::KindNamespace::ELF, arch, kindValue, off, + target, addend); } - + void addReferenceELF_Hexagon(uint16_t relocType, uint64_t off, const Atom *t, - Reference::Addend a) { + Reference::Addend a) { this->addReferenceELF(Reference::KindArch::Hexagon, relocType, off, t, a); } - + void addReferenceELF_x86_64(uint16_t relocType, uint64_t off, const Atom *t, Reference::Addend a) { this->addReferenceELF(Reference::KindArch::x86_64, relocType, off, t, a); } - + void addReferenceELF_PowerPC(uint16_t relocType, uint64_t off, const Atom *t, Reference::Addend a) { this->addReferenceELF(Reference::KindArch::PowerPC, relocType, off, t, a); } - + void addReferenceELF_Mips(uint16_t relocType, uint64_t off, const Atom *t, - Reference::Addend a) { + Reference::Addend a) { this->addReferenceELF(Reference::KindArch::Mips, relocType, off, t, a); } }; - - /// \brief Atom which represents an object for which a COPY relocation will be /// generated. class ObjectAtom : public SimpleELFDefinedAtom { @@ -861,8 +839,7 @@ class GOTAtom : public SimpleELFDefinedAtom { public: GOTAtom(const File &f, StringRef secName) - : SimpleELFDefinedAtom(f), _section(secName) { - } + : SimpleELFDefinedAtom(f), _section(secName) {} virtual Scope scope() const { return scopeTranslationUnit; } @@ -897,8 +874,7 @@ class PLTAtom : public SimpleELFDefinedAtom { public: PLTAtom(const File &f, StringRef secName) - : SimpleELFDefinedAtom(f), _section(secName) { - } + : SimpleELFDefinedAtom(f), _section(secName) {} virtual Scope scope() const { return scopeTranslationUnit; } @@ -1020,8 +996,7 @@ class InitFiniAtom : public SimpleELFDefinedAtom { public: InitFiniAtom(const File &f, StringRef secName) - : SimpleELFDefinedAtom(f), _section(secName) { - } + : SimpleELFDefinedAtom(f), _section(secName) {} virtual Scope scope() const { return scopeGlobal; } diff --git a/lld/lib/ReaderWriter/ELF/DefaultLayout.h b/lld/lib/ReaderWriter/ELF/DefaultLayout.h index adce4b41925..93a6a40d697 100644 --- a/lld/lib/ReaderWriter/ELF/DefaultLayout.h +++ b/lld/lib/ReaderWriter/ELF/DefaultLayout.h @@ -332,12 +332,12 @@ Layout::SectionOrder DefaultLayout<ELFT>::getSectionOrder( case DefinedAtom::typeResolver: case DefinedAtom::typeCode: return llvm::StringSwitch<Layout::SectionOrder>(name) - .StartsWith(".eh_frame_hdr", ORDER_EH_FRAMEHDR) - .StartsWith(".eh_frame", ORDER_EH_FRAME) - .StartsWith(".init", ORDER_INIT) - .StartsWith(".fini", ORDER_FINI) - .StartsWith(".hash", ORDER_HASH) - .Default(ORDER_TEXT); + .StartsWith(".eh_frame_hdr", ORDER_EH_FRAMEHDR) + .StartsWith(".eh_frame", ORDER_EH_FRAME) + .StartsWith(".init", ORDER_INIT) + .StartsWith(".fini", ORDER_FINI) + .StartsWith(".hash", ORDER_HASH) + .Default(ORDER_TEXT); case DefinedAtom::typeConstant: return ORDER_RODATA; @@ -355,8 +355,8 @@ Layout::SectionOrder DefaultLayout<ELFT>::getSectionOrder( case DefinedAtom::typeGOT: return llvm::StringSwitch<Layout::SectionOrder>(name) - .StartsWith(".got.plt", ORDER_GOT_PLT) - .Default(ORDER_GOT); + .StartsWith(".got.plt", ORDER_GOT_PLT) + .Default(ORDER_GOT); case DefinedAtom::typeStub: return ORDER_PLT; diff --git a/lld/lib/ReaderWriter/ELF/DynamicFile.h b/lld/lib/ReaderWriter/ELF/DynamicFile.h index cd0f0d5b4f1..2ba6dfdaa50 100644 --- a/lld/lib/ReaderWriter/ELF/DynamicFile.h +++ b/lld/lib/ReaderWriter/ELF/DynamicFile.h @@ -24,7 +24,7 @@ namespace lld { namespace elf { template <class ELFT> class DynamicFile LLVM_FINAL : public SharedLibraryFile { public: - static ErrorOr<std::unique_ptr<DynamicFile> > + static ErrorOr<std::unique_ptr<DynamicFile>> create(std::unique_ptr<llvm::MemoryBuffer> mb, bool useShlibUndefines) { std::unique_ptr<DynamicFile> file( new DynamicFile(mb->getBufferIdentifier())); @@ -104,8 +104,7 @@ public: } private: - DynamicFile(StringRef name) - : SharedLibraryFile(name) {} + DynamicFile(StringRef name) : SharedLibraryFile(name) {} mutable llvm::BumpPtrAllocator _alloc; std::unique_ptr<llvm::object::ELFFile<ELFT>> _objFile; diff --git a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp index f7fd148f07f..d660ca9f621 100644 --- a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp @@ -35,8 +35,8 @@ public: } }; -ELFLinkingContext::ELFLinkingContext(llvm::Triple triple, - std::unique_ptr<TargetHandlerBase> targetHandler) +ELFLinkingContext::ELFLinkingContext( + llvm::Triple triple, std::unique_ptr<TargetHandlerBase> targetHandler) : _outputELFType(elf::ET_EXEC), _triple(triple), _targetHandler(std::move(targetHandler)), _baseAddress(0), _isStaticExecutable(false), _noInhibitExec(false), diff --git a/lld/lib/ReaderWriter/ELF/File.h b/lld/lib/ReaderWriter/ELF/File.h index 619a09c011c..dbf8a6f747a 100644 --- a/lld/lib/ReaderWriter/ELF/File.h +++ b/lld/lib/ReaderWriter/ELF/File.h @@ -119,14 +119,14 @@ template <class ELFT> class ELFFile : public File { public: ELFFile(StringRef name) - : File(name, kindObject), _ordinal(0), - _doStringsMerge(false), _targetHandler(nullptr) {} + : File(name, kindObject), _ordinal(0), _doStringsMerge(false), + _targetHandler(nullptr) {} ELFFile(std::unique_ptr<MemoryBuffer> mb, bool atomizeStrings, TargetHandlerBase *handler, error_code &ec) - : File(mb->getBufferIdentifier(), kindObject), - _ordinal(0), _doStringsMerge(atomizeStrings), - _targetHandler(reinterpret_cast<TargetHandler<ELFT>*>(handler)) { + : File(mb->getBufferIdentifier(), kindObject), _ordinal(0), + _doStringsMerge(atomizeStrings), + _targetHandler(reinterpret_cast<TargetHandler<ELFT> *>(handler)) { _objFile.reset(new llvm::object::ELFFile<ELFT>(mb.release(), ec)); if (ec) @@ -162,23 +162,22 @@ public: Reference::KindArch kindArch() { switch (_objFile->getHeader()->e_machine) { - case llvm::ELF::EM_X86_64: - return Reference::KindArch::x86_64; - case llvm::ELF::EM_386: - return Reference::KindArch::x86; - case llvm::ELF::EM_ARM: - return Reference::KindArch::ARM; - case llvm::ELF::EM_PPC: - return Reference::KindArch::PowerPC; - case llvm::ELF::EM_HEXAGON: - return Reference::KindArch::Hexagon; - case llvm::ELF::EM_MIPS: - return Reference::KindArch::Mips; + case llvm::ELF::EM_X86_64: + return Reference::KindArch::x86_64; + case llvm::ELF::EM_386: + return Reference::KindArch::x86; + case llvm::ELF::EM_ARM: + return Reference::KindArch::ARM; + case llvm::ELF::EM_PPC: + return Reference::KindArch::PowerPC; + case llvm::ELF::EM_HEXAGON: + return Reference::KindArch::Hexagon; + case llvm::ELF::EM_MIPS: + return Reference::KindArch::Mips; } llvm_unreachable("unsupported e_machine value"); } - /// \brief Read input sections and populate necessary data structures /// to read them later and create atoms error_code createAtomizableSections() { @@ -510,9 +509,7 @@ public: return _absoluteAtoms; } - TargetHandler<ELFT> *targetHandler() const { - return _targetHandler; - } + TargetHandler<ELFT> *targetHandler() const { return _targetHandler; } Atom *findAtom(const Elf_Sym *symbol) { return _symbolToAtomMapping.lookup(symbol); @@ -536,9 +533,9 @@ private: continue; bool isMips64EL = _objFile->isMips64EL(); uint32_t symbolIndex = rai.getSymbol(isMips64EL); - auto *ERef = new (_readerStorage) - ELFReference<ELFT>(&rai, rai.r_offset - symbol->st_value, - kindArch(), rai.getType(isMips64EL), symbolIndex); + auto *ERef = new (_readerStorage) ELFReference<ELFT>( + &rai, rai.r_offset - symbol->st_value, kindArch(), + rai.getType(isMips64EL), symbolIndex); _references.push_back(ERef); } } @@ -552,9 +549,9 @@ private: continue; bool isMips64EL = _objFile->isMips64EL(); uint32_t symbolIndex = ri.getSymbol(isMips64EL); - auto *ERef = new (_readerStorage) - ELFReference<ELFT>(&ri, ri.r_offset - symbol->st_value, - kindArch(), ri.getType(isMips64EL), symbolIndex); + auto *ERef = new (_readerStorage) ELFReference<ELFT>( + &ri, ri.r_offset - symbol->st_value, kindArch(), + ri.getType(isMips64EL), symbolIndex); // Read the addend from the section contents // TODO : We should move the way lld reads relocations totally from // ELFFile @@ -576,7 +573,7 @@ private: /// cached value of target relocation handler assert(_targetHandler); const TargetRelocationHandler<ELFT> &targetRelocationHandler = - _targetHandler->getRelocationHandler(); + _targetHandler->getRelocationHandler(); for (auto &ri : _references) { if (ri->kindNamespace() == lld::Reference::KindNamespace::ELF) { @@ -689,7 +686,8 @@ private: // not. Let the TargetHandler to make a decision if that's the case. if (isTargetSpecificAtom(nullptr, symbol)) { assert(_targetHandler); - TargetAtomHandler<ELFT> &atomHandler = _targetHandler->targetAtomHandler(); + TargetAtomHandler<ELFT> &atomHandler = + _targetHandler->targetAtomHandler(); return atomHandler.getType(symbol) == llvm::ELF::STT_COMMON; } return symbol->getType() == llvm::ELF::STT_COMMON || diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp index 8ab100b4889..6fb956fcba7 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp @@ -77,7 +77,8 @@ public: Atom *finiFunctionAtom = new (_allocator) SimpleUndefinedAtom(*this, name); HexagonFiniAtom *finiAtom = (new (_allocator) HexagonFiniAtom(*this, name)); - finiAtom->addReferenceELF_Hexagon(llvm::ELF::R_HEX_32, 0, finiFunctionAtom, 0); + finiAtom->addReferenceELF_Hexagon(llvm::ELF::R_HEX_32, 0, finiFunctionAtom, + 0); finiAtom->setOrdinal(_ordinal++); addAtom(*finiFunctionAtom); addAtom(*finiAtom); diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h index c97d70d0e67..85eba3595cf 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.h @@ -31,8 +31,8 @@ public: virtual error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &, const lld::AtomLayout &, const Reference &) const; - - private: + +private: const HexagonTargetHandler &_targetHandler; const HexagonTargetLayout<HexagonELFType> &_targetLayout; }; diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp index cfa17b00f94..6edd214f0c5 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp @@ -108,8 +108,7 @@ public: class ELFPassFile : public SimpleFile { public: - ELFPassFile(const ELFLinkingContext &eti) - : SimpleFile("ELFPassFile") { + ELFPassFile(const ELFLinkingContext &eti) : SimpleFile("ELFPassFile") { setOrdinal(eti.getNextOrdinalAndIncrement()); } @@ -291,8 +290,8 @@ public: error_code handlePLT32(const Reference &ref) { // Turn this into a PC32 to the PLT entry. - assert(ref.kindNamespace() == Reference::KindNamespace::ELF); - assert(ref.kindArch() == Reference::KindArch::Hexagon); + assert(ref.kindNamespace() == Reference::KindNamespace::ELF); + assert(ref.kindArch() == Reference::KindArch::Hexagon); const_cast<Reference &>(ref).setKindValue(R_HEX_B22_PCREL); const_cast<Reference &>(ref).setTarget(getPLTEntry(ref.target())); return error_code::success(); @@ -307,9 +306,8 @@ void elf::HexagonLinkingContext::addPasses(PassManager &pm) { } void HexagonTargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::Hexagon, - kindStrings); + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::Hexagon, kindStrings); } const Registry::KindStrings HexagonTargetHandler::kindStrings[] = { @@ -407,4 +405,3 @@ const Registry::KindStrings HexagonTargetHandler::kindStrings[] = { LLD_KIND_STRING_ENTRY(R_HEX_TPREL_11_X), LLD_KIND_STRING_END }; - diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp index 64cce0dd879..2a3c8967ea8 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp @@ -175,20 +175,13 @@ void MipsTargetHandler::finalizeSymbolValues() { } void MipsTargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::Mips, - kindStrings); + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::Mips, kindStrings); } - 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_END }; -
\ No newline at end of file diff --git a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp index 7f72c8c3936..d5a94803864 100644 --- a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.cpp @@ -67,11 +67,9 @@ PPCTargetHandler::PPCTargetHandler(PPCLinkingContext &targetInfo) : DefaultTargetHandler(targetInfo), _relocationHandler(targetInfo), _targetLayout(targetInfo) {} - void PPCTargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::PowerPC, - kindStrings); + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::PowerPC, kindStrings); } const Registry::KindStrings PPCTargetHandler::kindStrings[] = { @@ -130,6 +128,3 @@ const Registry::KindStrings PPCTargetHandler::kindStrings[] = { LLD_KIND_STRING_ENTRY(R_PPC_REL16_HA), LLD_KIND_STRING_END }; - - - diff --git a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h index 426a76ca056..8f1de5c3349 100644 --- a/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/PPC/PPCTargetHandler.h @@ -35,10 +35,8 @@ public: PPCTargetHandler(PPCLinkingContext &targetInfo); virtual void registerRelocationNames(Registry ®istry); - - virtual TargetLayout<PPCELFType> &targetLayout() { - return _targetLayout; - } + + virtual TargetLayout<PPCELFType> &targetLayout() { return _targetLayout; } virtual const PPCTargetRelocationHandler &getRelocationHandler() const { return _relocationHandler; diff --git a/lld/lib/ReaderWriter/ELF/Reader.cpp b/lld/lib/ReaderWriter/ELF/Reader.cpp index 43993ca51ca..ccfd8ab80f2 100644 --- a/lld/lib/ReaderWriter/ELF/Reader.cpp +++ b/lld/lib/ReaderWriter/ELF/Reader.cpp @@ -56,8 +56,8 @@ struct DynamicFileCreateELFTraits { typedef llvm::ErrorOr<std::unique_ptr<lld::SharedLibraryFile>> result_type; template <class ELFT> - static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb, - bool useUndefines) { + static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb, + bool useUndefines) { return lld::elf::DynamicFile<ELFT>::create(std::move(mb), useUndefines); } }; @@ -67,81 +67,81 @@ struct ELFFileCreateELFTraits { template <class ELFT> static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb, - bool atomizeStrings, - TargetHandlerBase *handler, + bool atomizeStrings, TargetHandlerBase *handler, lld::error_code &ec) { - return std::unique_ptr<lld::File>( - new lld::elf::ELFFile<ELFT>(std::move(mb), atomizeStrings, handler,ec)); + return std::unique_ptr<lld::File>(new lld::elf::ELFFile<ELFT>( + std::move(mb), atomizeStrings, handler, ec)); } }; class ELFObjectReader : public Reader { public: - ELFObjectReader(bool atomizeStrings, TargetHandlerBase* handler) - : _atomizeStrings(atomizeStrings), _handler(handler) { } + ELFObjectReader(bool atomizeStrings, TargetHandlerBase *handler) + : _atomizeStrings(atomizeStrings), _handler(handler) {} - virtual bool canParse(file_magic magic, StringRef,const MemoryBuffer&) const { + virtual bool canParse(file_magic magic, StringRef, + const MemoryBuffer &) const { return (magic == llvm::sys::fs::file_magic::elf_relocatable); } - + virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &, std::vector<std::unique_ptr<File>> &result) const { error_code ec; std::size_t maxAlignment = - 1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart())); + 1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart())); std::unique_ptr<File> f(createELF<ELFFileCreateELFTraits>( - getElfArchType(&*mb), maxAlignment, std::move(mb), - _atomizeStrings, _handler, ec)); + getElfArchType(&*mb), maxAlignment, std::move(mb), _atomizeStrings, + _handler, ec)); if (ec) return ec; result.push_back(std::move(f)); return error_code::success(); } + private: - bool _atomizeStrings; + bool _atomizeStrings; TargetHandlerBase *_handler; }; - class ELFDSOReader : public Reader { public: - ELFDSOReader(bool useUndefines) : _useUndefines(useUndefines) { } + ELFDSOReader(bool useUndefines) : _useUndefines(useUndefines) {} - virtual bool canParse(file_magic magic, StringRef, const MemoryBuffer&) const{ + virtual bool canParse(file_magic magic, StringRef, + const MemoryBuffer &) const { return (magic == llvm::sys::fs::file_magic::elf_shared_object); } - + virtual error_code parseFile(std::unique_ptr<MemoryBuffer> &mb, const class Registry &, std::vector<std::unique_ptr<File>> &result) const { std::size_t maxAlignment = - 1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart())); - auto f = createELF<DynamicFileCreateELFTraits>( - getElfArchType(&*mb), maxAlignment, - std::move(mb), _useUndefines); + 1ULL << llvm::countTrailingZeros(uintptr_t(mb->getBufferStart())); + auto f = createELF<DynamicFileCreateELFTraits>( + getElfArchType(&*mb), maxAlignment, std::move(mb), _useUndefines); if (!f) - return f; + return f; result.push_back(std::move(*f)); return error_code::success(); } + private: bool _useUndefines; }; } // anonymous - -// This dynamic registration of a handler causes support for all ELF -// architectures to be pulled into the linker. If we want to support making a +// This dynamic registration of a handler causes support for all ELF +// architectures to be pulled into the linker. If we want to support making a // linker that only supports one ELF architecture, we'd need to change this // to have a different registration method for each architecture. -void Registry::addSupportELFObjects(bool atomizeStrings, - TargetHandlerBase *handler) { +void Registry::addSupportELFObjects(bool atomizeStrings, + TargetHandlerBase *handler) { // Tell registry about the ELF object file parser. add(std::unique_ptr<Reader>(new ELFObjectReader(atomizeStrings, handler))); - + // Tell registry about the relocation name to number mapping for this arch. handler->registerRelocationNames(*this); } @@ -150,5 +150,4 @@ void Registry::addSupportELFDynamicSharedObjects(bool useShlibUndefines) { add(std::unique_ptr<Reader>(new ELFDSOReader(useShlibUndefines))); } - } // end namespace lld diff --git a/lld/lib/ReaderWriter/ELF/SectionChunks.h b/lld/lib/ReaderWriter/ELF/SectionChunks.h index ae7fed26697..bcdcd909dd1 100644 --- a/lld/lib/ReaderWriter/ELF/SectionChunks.h +++ b/lld/lib/ReaderWriter/ELF/SectionChunks.h @@ -42,7 +42,7 @@ template <class ELFT> class Section : public Chunk<ELFT> { public: Section(const ELFLinkingContext &context, StringRef name, typename Chunk<ELFT>::Kind k = Chunk<ELFT>::Kind::ELFSection) - : Chunk<ELFT>(name, k, context), _parent(nullptr), _flags(0), _entSize(0), + : Chunk<ELFT>(name, k, context), _parent(nullptr), _flags(0), _entSize(0), _type(0), _link(0), _info(0), _segmentType(SHT_NULL) {} /// \brief Modify the section contents before assigning virtual addresses @@ -961,12 +961,12 @@ public: r->r_addend = writer->addressOfAtom(rel.second->target()) + rel.second->addend(); dest += sizeof(Elf_Rela); - DEBUG_WITH_TYPE( - "ELFRelocationTable", - llvm::dbgs() << rel.second->kindValue() << " relocation at " - << rel.first->name() << "@" << r->r_offset << " to " - << rel.second->target()->name() << "@" << r->r_addend - << "\n";); + DEBUG_WITH_TYPE("ELFRelocationTable", + llvm::dbgs() << rel.second->kindValue() + << " relocation at " << rel.first->name() + << "@" << r->r_offset << " to " + << rel.second->target()->name() << "@" + << r->r_addend << "\n";); } } diff --git a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp index 3e64a7314e9..ba66416ae28 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp @@ -31,8 +31,6 @@ static int relocPC32(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) { return 0; } - - const Registry::KindStrings X86TargetHandler::kindStrings[] = { LLD_KIND_STRING_ENTRY(R_386_NONE), LLD_KIND_STRING_ENTRY(R_386_32), @@ -79,8 +77,7 @@ const Registry::KindStrings X86TargetHandler::kindStrings[] = { }; void X86TargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::x86, + registry.addKindTable(Reference::KindNamespace::ELF, Reference::KindArch::x86, kindStrings); } diff --git a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h index 137190d0ce5..86fbeacf8e9 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h @@ -29,9 +29,8 @@ public: virtual error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &, const lld::AtomLayout &, const Reference &) const; - - static const Registry::KindStrings kindStrings[]; + static const Registry::KindStrings kindStrings[]; }; class X86TargetHandler LLVM_FINAL @@ -41,9 +40,7 @@ public: virtual void registerRelocationNames(Registry ®istry); - virtual TargetLayout<X86ELFType> &targetLayout() { - return _targetLayout; - } + virtual TargetLayout<X86ELFType> &targetLayout() { return _targetLayout; } virtual const X86TargetRelocationHandler &getRelocationHandler() const { return _relocationHandler; diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp index 056a3eabb04..69e7924c447 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp @@ -69,7 +69,7 @@ public: Atom *initFunctionAtom = new (_allocator) SimpleUndefinedAtom(*this, name); X86_64InitAtom *initAtom = (new (_allocator) X86_64InitAtom(*this, name)); - initAtom->addReferenceELF_x86_64(llvm::ELF::R_X86_64_64, 0, + initAtom->addReferenceELF_x86_64(llvm::ELF::R_X86_64_64, 0, initFunctionAtom, 0); initAtom->setOrdinal(_ordinal++); addAtom(*initFunctionAtom); @@ -80,8 +80,8 @@ public: Atom *finiFunctionAtom = new (_allocator) SimpleUndefinedAtom(*this, name); X86_64FiniAtom *finiAtom = (new (_allocator) X86_64FiniAtom(*this, name)); - finiAtom->addReferenceELF_x86_64(llvm::ELF::R_X86_64_64, 0, - finiFunctionAtom, 0); + finiAtom->addReferenceELF_x86_64(llvm::ELF::R_X86_64_64, 0, + finiFunctionAtom, 0); finiAtom->setOrdinal(_ordinal++); addAtom(*finiFunctionAtom); addAtom(*finiAtom); diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp index a8f703a2f5f..bab665c8d00 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp @@ -47,8 +47,6 @@ static void reloc32S(uint8_t *location, uint64_t P, uint64_t S, int64_t A) { // TODO: Make sure that the result sign extends to the 64bit value. } - - int64_t X86_64TargetRelocationHandler::relocAddend(const Reference &ref) const { if (ref.kindNamespace() != Reference::KindNamespace::ELF) return false; @@ -94,7 +92,7 @@ error_code X86_64TargetRelocationHandler::applyRelocation( case R_X86_64_TPOFF32: { _tlsSize = _context.getTargetHandler<X86_64ELFType>().targetLayout().getTLSSize(); - if (ref.kindValue() == R_X86_64_TPOFF32 || + if (ref.kindValue() == R_X86_64_TPOFF32 || ref.kindValue() == R_X86_64_DTPOFF32) { int32_t result = (int32_t)(targetVAddress - _tlsSize); *reinterpret_cast<llvm::support::little32_t *>(location) = result; diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp index c9b2bec8e70..a553b2dd22f 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp @@ -29,9 +29,8 @@ bool X86_64TargetHandler::createImplicitFiles( } void X86_64TargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::x86_64, - kindStrings); + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::x86_64, kindStrings); } const Registry::KindStrings X86_64TargetHandler::kindStrings[] = { @@ -76,4 +75,3 @@ const Registry::KindStrings X86_64TargetHandler::kindStrings[] = { LLD_KIND_STRING_ENTRY(LLD_R_X86_64_GOTRELINDEX), LLD_KIND_STRING_END }; - |

