//===- Core/AbsoluteAtom.h - An absolute Atom -----------------------------===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLD_CORE_ABSOLUTE_ATOM_H #define LLD_CORE_ABSOLUTE_ATOM_H #include "lld/Core/Atom.h" namespace lld { /// An AbsoluteAtom has no content. /// It exists to represent content at fixed addresses in memory. class AbsoluteAtom : public Atom { public: virtual uint64_t value() const = 0; /// scope - The visibility of this atom to other atoms. C static functions /// have scope scopeTranslationUnit. Regular C functions have scope /// scopeGlobal. Functions compiled with visibility=hidden have scope /// scopeLinkageUnit so they can be see by other atoms being linked but not /// by the OS loader. virtual Scope scope() const = 0; static bool classof(const Atom *a) { return a->definition() == definitionAbsolute; } static bool classof(const AbsoluteAtom *) { return true; } protected: AbsoluteAtom() : Atom(definitionAbsolute) {} }; } // namespace lld #endif // LLD_CORE_ABSOLUTE_ATOM_H