Fragment.h revision 533eae20118036f425f27bf0536ef0ccbb090b65
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 <llvm/ADT/ilist_node.h> 13 14#include <llvm/Support/DataTypes.h> 15 16#include <cstddef> 17#include <cassert> 18 19namespace mcld { 20 21class SectionData; 22 23/** \class Fragment 24 * \brief Fragment is the minimun linking unit of MCLinker. 25 */ 26class Fragment : public llvm::ilist_node<Fragment> 27{ 28public: 29 enum Type { 30 Alignment, 31 Fillment, 32 Region, 33 Target, 34 Stub, 35 Null 36 }; 37 38public: 39 Fragment(); 40 41 Fragment(Type pKind, SectionData *pParent = NULL); 42 43 virtual ~Fragment(); 44 45 Type getKind() const { return m_Kind; } 46 47 const SectionData* getParent() const { return m_pParent; } 48 SectionData* getParent() { return m_pParent; } 49 50 void setParent(SectionData *pValue) { m_pParent = pValue; } 51 52 uint64_t getOffset() const; 53 54 void setOffset(uint64_t pOffset) { m_Offset = pOffset; } 55 56 bool hasOffset() const; 57 58 static bool classof(const Fragment *O) { return true; } 59 60 virtual size_t size() const { 61 assert(false && "Can not call abstract Fragment::size()!"); 62 return 0; 63 } 64 65private: 66 Fragment(const Fragment& ); // DO NOT IMPLEMENT 67 Fragment& operator=(const Fragment& ); // DO NOT IMPLEMENT 68 69private: 70 Type m_Kind; 71 SectionData* m_pParent; 72 73 uint64_t m_Offset; 74 75}; 76 77} // namespace of mcld 78 79#endif 80 81