//===- Fragment.h ---------------------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_FRAGMENT_H
#define MCLD_FRAGMENT_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif
#include <llvm/ADT/ilist_node.h>
#include <llvm/Support/DataTypes.h>
#include <cstddef>
namespace mcld
{
class SectionData;
/** \class Fragment
* \brief Fragment is the minimun linking unit of MCLinker.
*/
class Fragment : public llvm::ilist_node<Fragment>
{
public:
enum Type {
Alignment,
Fillment,
Region,
Relocation,
Target
};
public:
Fragment();
Fragment(Type pKind, SectionData *pParent = NULL);
virtual ~Fragment();
Type getKind() const { return m_Kind; }
SectionData *getParent() const { return m_pParent; }
void setParent(SectionData *pValue) { m_pParent = pValue; }
uint64_t getOffset() const { return m_Offset; }
void setOffset(uint64_t pOffset) { m_Offset = pOffset; }
unsigned int getLayoutOrder() const { return m_LayoutOrder; }
void setLayoutOrder(unsigned int pValue) { m_LayoutOrder = pValue; }
static bool classof(const Fragment *O) { return true; }
private:
Fragment(const Fragment& ); // DO NOT IMPLEMENT
Fragment& operator=(const Fragment& ); // DO NOT IMPLEMENT
private:
Type m_Kind;
SectionData* m_pParent;
uint64_t m_Offset;
unsigned int m_LayoutOrder;
};
} // namespace of mcld
#endif