Home | History | Annotate | Download | only in Fragment
      1 //===- Fragment.h ---------------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_FRAGMENT_FRAGMENT_H_
     10 #define MCLD_FRAGMENT_FRAGMENT_H_
     11 
     12 #include "mcld/Support/Compiler.h"
     13 
     14 #include <llvm/ADT/ilist_node.h>
     15 #include <llvm/Support/DataTypes.h>
     16 
     17 #include <cassert>
     18 #include <cstddef>
     19 
     20 namespace mcld {
     21 
     22 class SectionData;
     23 
     24 /** \class Fragment
     25  *  \brief Fragment is the minimun linking unit of MCLinker.
     26  */
     27 class Fragment : public llvm::ilist_node_with_parent<Fragment, SectionData> {
     28  public:
     29   enum Type { Alignment, Fillment, Region, Target, Stub, Null };
     30 
     31  public:
     32   Fragment();
     33 
     34   explicit Fragment(Type pKind, SectionData* pParent = NULL);
     35 
     36   virtual ~Fragment();
     37 
     38   Type getKind() const { return m_Kind; }
     39 
     40   const SectionData* getParent() const { return m_pParent; }
     41   SectionData* getParent() { return m_pParent; }
     42 
     43   void setParent(SectionData* pValue) { m_pParent = pValue; }
     44 
     45   uint64_t getOffset() const;
     46 
     47   void setOffset(uint64_t pOffset) { m_Offset = pOffset; }
     48 
     49   bool hasOffset() const;
     50 
     51   static bool classof(const Fragment* O) { return true; }
     52 
     53   virtual size_t size() const {
     54     assert(false && "Can not call abstract Fragment::size()!");
     55     return 0;
     56   }
     57 
     58  private:
     59   Type m_Kind;
     60 
     61   SectionData* m_pParent;
     62 
     63   uint64_t m_Offset;
     64 
     65  private:
     66   DISALLOW_COPY_AND_ASSIGN(Fragment);
     67 };
     68 
     69 }  // namespace mcld
     70 
     71 #endif  // MCLD_FRAGMENT_FRAGMENT_H_
     72