Home | History | Annotate | Download | only in Core
      1 //===- Core/AbsoluteAtom.h - An absolute Atom -----------------------------===//
      2 //
      3 //                             The LLVM Linker
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef LLD_CORE_ABSOLUTE_ATOM_H
     11 #define LLD_CORE_ABSOLUTE_ATOM_H
     12 
     13 #include "lld/Core/Atom.h"
     14 
     15 namespace lld {
     16 
     17 /// An AbsoluteAtom has no content.
     18 /// It exists to represent content at fixed addresses in memory.
     19 class AbsoluteAtom : public Atom {
     20 public:
     21 
     22   virtual uint64_t value() const = 0;
     23 
     24   /// scope - The visibility of this atom to other atoms.  C static functions
     25   /// have scope scopeTranslationUnit.  Regular C functions have scope
     26   /// scopeGlobal.  Functions compiled with visibility=hidden have scope
     27   /// scopeLinkageUnit so they can be see by other atoms being linked but not
     28   /// by the OS loader.
     29   virtual Scope scope() const = 0;
     30 
     31   static bool classof(const Atom *a) {
     32     return a->definition() == definitionAbsolute;
     33   }
     34 
     35   static bool classof(const AbsoluteAtom *) { return true; }
     36 
     37 protected:
     38   AbsoluteAtom() : Atom(definitionAbsolute) {}
     39 };
     40 
     41 } // namespace lld
     42 
     43 #endif // LLD_CORE_ABSOLUTE_ATOM_H
     44