Fragment.h revision cedee4b38f4786845183be7f5916dd520a170ae0
1cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===- Fragment.h ---------------------------------------------------------===// 2cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// 3cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// The MCLinker Project 4cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// 5cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// This file is distributed under the University of Illinois Open Source 6cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// License. See LICENSE.TXT for details. 7cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// 8cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===----------------------------------------------------------------------===// 9cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#ifndef MCLD_FRAGMENT_H 10cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#define MCLD_FRAGMENT_H 11cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#ifdef ENABLE_UNITTEST 12cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <gtest.h> 13cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#endif 14cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 15cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <llvm/ADT/ilist_node.h> 16cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <llvm/Support/DataTypes.h> 17cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 18cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <cstddef> 19cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 20cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaonamespace mcld 21cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao{ 22cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 23cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoclass SectionData; 24cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 25cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao/** \class Fragment 26cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao * \brief Fragment is the minimun linking unit of MCLinker. 27cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao */ 28cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoclass Fragment : public llvm::ilist_node<Fragment> 29cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao{ 30cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaopublic: 31cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao enum Type { 32cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Alignment, 33cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Fillment, 34cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Region, 35cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Relocation, 36cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Target 37cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao }; 38cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 39cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaopublic: 40cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Fragment(); 41cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 42cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Fragment(Type pKind, SectionData *pParent = NULL); 43cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 44cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao virtual ~Fragment(); 45cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 46cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Type getKind() const { return m_Kind; } 47cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 48cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SectionData *getParent() const { return m_pParent; } 49cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 50cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setParent(SectionData *pValue) { m_pParent = pValue; } 51cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 52cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint64_t getOffset() const { return m_Offset; } 53cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 54cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setOffset(uint64_t pOffset) { m_Offset = pOffset; } 55cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 56cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao unsigned int getLayoutOrder() const { return m_LayoutOrder; } 57cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 58cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setLayoutOrder(unsigned int pValue) { m_LayoutOrder = pValue; } 59cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 60cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao static bool classof(const Fragment *O) { return true; } 61cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 62cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoprivate: 63cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Fragment(const Fragment& ); // DO NOT IMPLEMENT 64cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Fragment& operator=(const Fragment& ); // DO NOT IMPLEMENT 65cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 66cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoprivate: 67cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao Type m_Kind; 68cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao SectionData* m_pParent; 69cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 70cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao uint64_t m_Offset; 71cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao unsigned int m_LayoutOrder; 72cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 73cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao}; 74cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 75cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao} // namespace of mcld 76cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 77cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#endif 78cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 79