Add SimpleAbsoluteAtom which is analogous to other Simple* atoms.

llvm-svn: 231718
This commit is contained in:
Rui Ueyama 2015-03-09 22:34:59 +00:00
parent f65421ad9f
commit 4a8821d48d
5 changed files with 22 additions and 38 deletions

View File

@ -276,6 +276,23 @@ private:
StringRef _name; 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 } // end namespace lld
#endif #endif

View File

@ -27,22 +27,6 @@
namespace lld { 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 { class CommandLineUndefinedAtom : public SimpleUndefinedAtom {
public: public:
CommandLineUndefinedAtom(const File &f, StringRef name) CommandLineUndefinedAtom(const File &f, StringRef name)
@ -197,7 +181,8 @@ void ELFLinkingContext::createInternalFiles(
for (auto &i : getAbsoluteSymbols()) { for (auto &i : getAbsoluteSymbols()) {
StringRef sym = i.first; StringRef sym = i.first;
uint64_t val = i.second; 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)); files.push_back(std::move(file));
LinkingContext::createInternalFiles(files); LinkingContext::createInternalFiles(files);

View File

@ -20,23 +20,6 @@ namespace lld {
namespace pecoff { namespace pecoff {
class COFFDefinedAtom; 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 { class COFFUndefinedAtom : public UndefinedAtom {
public: public:
COFFUndefinedAtom(const File &file, StringRef name, COFFUndefinedAtom(const File &file, StringRef name,

View File

@ -137,7 +137,7 @@ public:
}; };
private: private:
COFFAbsoluteAtom _imageBaseAtom; SimpleAbsoluteAtom _imageBaseAtom;
}; };
// A LocallyImporteSymbolFile is an archive file containing __imp_ // A LocallyImporteSymbolFile is an archive file containing __imp_

View File

@ -39,7 +39,6 @@
#define DEBUG_TYPE "ReaderCOFF" #define DEBUG_TYPE "ReaderCOFF"
using lld::pecoff::COFFAbsoluteAtom;
using lld::pecoff::COFFBSSAtom; using lld::pecoff::COFFBSSAtom;
using lld::pecoff::COFFDefinedAtom; using lld::pecoff::COFFDefinedAtom;
using lld::pecoff::COFFDefinedFileAtom; using lld::pecoff::COFFDefinedFileAtom;
@ -440,8 +439,8 @@ void FileCOFF::createAbsoluteAtoms(const SymbolVectorT &symbols,
for (llvm::object::COFFSymbolRef sym : symbols) { for (llvm::object::COFFSymbolRef sym : symbols) {
if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_ABSOLUTE) if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_ABSOLUTE)
continue; continue;
auto *atom = new (_alloc) COFFAbsoluteAtom(*this, _symbolName[sym], auto *atom = new (_alloc) SimpleAbsoluteAtom(*this, _symbolName[sym],
getScope(sym), sym.getValue()); getScope(sym), sym.getValue());
result.push_back(atom); result.push_back(atom);
_symbolAtom[sym] = atom; _symbolAtom[sym] = atom;