From 4a8821d48d1430eafb25a195dfc6c3ad732c1202 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Mon, 9 Mar 2015 22:34:59 +0000 Subject: [PATCH] Add SimpleAbsoluteAtom which is analogous to other Simple* atoms. llvm-svn: 231718 --- lld/include/lld/Core/Simple.h | 17 +++++++++++++++++ .../ReaderWriter/ELF/ELFLinkingContext.cpp | 19 ++----------------- lld/lib/ReaderWriter/PECOFF/Atoms.h | 17 ----------------- .../PECOFF/LinkerGeneratedSymbolFile.h | 2 +- lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp | 5 ++--- 5 files changed, 22 insertions(+), 38 deletions(-) diff --git a/lld/include/lld/Core/Simple.h b/lld/include/lld/Core/Simple.h index e193f70218c6..73b70d640847 100644 --- a/lld/include/lld/Core/Simple.h +++ b/lld/include/lld/Core/Simple.h @@ -276,6 +276,23 @@ private: StringRef _name; }; +class SimpleAbsoluteAtom : public AbsoluteAtom { +public: + SimpleAbsoluteAtom(const File &f, StringRef name, Scope s, uint64_t value) + : _file(f), _name(name), _scope(s), _value(value) {} + + const File &file() const override { return _file; } + StringRef name() const override { return _name; } + uint64_t value() const override { return _value; } + Scope scope() const override { return _scope; } + +private: + const File &_file; + StringRef _name; + Scope _scope; + uint64_t _value; +}; + } // end namespace lld #endif diff --git a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp index a2059e4e5b04..ae995c970170 100644 --- a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp @@ -27,22 +27,6 @@ namespace lld { -class CommandLineAbsoluteAtom : public AbsoluteAtom { -public: - CommandLineAbsoluteAtom(const File &file, StringRef name, uint64_t value) - : _file(file), _name(name), _value(value) {} - - const File &file() const override { return _file; } - StringRef name() const override { return _name; } - uint64_t value() const override { return _value; } - Scope scope() const override { return scopeGlobal; } - -private: - const File &_file; - StringRef _name; - uint64_t _value; -}; - class CommandLineUndefinedAtom : public SimpleUndefinedAtom { public: CommandLineUndefinedAtom(const File &f, StringRef name) @@ -197,7 +181,8 @@ void ELFLinkingContext::createInternalFiles( for (auto &i : getAbsoluteSymbols()) { StringRef sym = i.first; uint64_t val = i.second; - file->addAtom(*(new (_allocator) CommandLineAbsoluteAtom(*file, sym, val))); + file->addAtom(*(new (_allocator) SimpleAbsoluteAtom( + *file, sym, Atom::scopeGlobal, val))); } files.push_back(std::move(file)); LinkingContext::createInternalFiles(files); diff --git a/lld/lib/ReaderWriter/PECOFF/Atoms.h b/lld/lib/ReaderWriter/PECOFF/Atoms.h index 6fd265313ad6..257edc17884b 100644 --- a/lld/lib/ReaderWriter/PECOFF/Atoms.h +++ b/lld/lib/ReaderWriter/PECOFF/Atoms.h @@ -20,23 +20,6 @@ namespace lld { namespace pecoff { class COFFDefinedAtom; -class COFFAbsoluteAtom : public AbsoluteAtom { -public: - COFFAbsoluteAtom(const File &f, StringRef name, Scope scope, uint64_t value) - : _owningFile(f), _name(name), _scope(scope), _value(value) {} - - const File &file() const override { return _owningFile; } - Scope scope() const override { return _scope; } - StringRef name() const override { return _name; } - uint64_t value() const override { return _value; } - -private: - const File &_owningFile; - StringRef _name; - Scope _scope; - uint64_t _value; -}; - class COFFUndefinedAtom : public UndefinedAtom { public: COFFUndefinedAtom(const File &file, StringRef name, diff --git a/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h b/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h index 5a9c829eceaf..4342abc1df3a 100644 --- a/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h +++ b/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h @@ -137,7 +137,7 @@ public: }; private: - COFFAbsoluteAtom _imageBaseAtom; + SimpleAbsoluteAtom _imageBaseAtom; }; // A LocallyImporteSymbolFile is an archive file containing __imp_ diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp index 40b4cbdac91e..595b0cc7fac1 100644 --- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp @@ -39,7 +39,6 @@ #define DEBUG_TYPE "ReaderCOFF" -using lld::pecoff::COFFAbsoluteAtom; using lld::pecoff::COFFBSSAtom; using lld::pecoff::COFFDefinedAtom; using lld::pecoff::COFFDefinedFileAtom; @@ -440,8 +439,8 @@ void FileCOFF::createAbsoluteAtoms(const SymbolVectorT &symbols, for (llvm::object::COFFSymbolRef sym : symbols) { if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_ABSOLUTE) continue; - auto *atom = new (_alloc) COFFAbsoluteAtom(*this, _symbolName[sym], - getScope(sym), sym.getValue()); + auto *atom = new (_alloc) SimpleAbsoluteAtom(*this, _symbolName[sym], + getScope(sym), sym.getValue()); result.push_back(atom); _symbolAtom[sym] = atom;