Add SimpleAbsoluteAtom which is analogous to other Simple* atoms.
authorRui Ueyama <ruiu@google.com>
Mon, 9 Mar 2015 22:34:59 +0000 (22:34 +0000)
committerRui Ueyama <ruiu@google.com>
Mon, 9 Mar 2015 22:34:59 +0000 (22:34 +0000)
llvm-svn: 231718

lld/include/lld/Core/Simple.h
lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
lld/lib/ReaderWriter/PECOFF/Atoms.h
lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp

index e193f70..73b70d6 100644 (file)
@@ -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
index a2059e4..ae995c9 100644 (file)
 
 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);
index 6fd2653..257edc1 100644 (file)
@@ -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,
index 5a9c829..4342abc 100644 (file)
@@ -137,7 +137,7 @@ public:
   };
 
 private:
-  COFFAbsoluteAtom _imageBaseAtom;
+  SimpleAbsoluteAtom _imageBaseAtom;
 };
 
 // A LocallyImporteSymbolFile is an archive file containing __imp_
index 40b4cbd..595b0cc 100644 (file)
@@ -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;