forked from OSchip/llvm-project
Add SimpleAbsoluteAtom which is analogous to other Simple* atoms.
llvm-svn: 231718
This commit is contained in:
parent
f65421ad9f
commit
4a8821d48d
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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_
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue