You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
72 lines
1.6 KiB
7 months ago
|
//===- 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_FRAGMENT_H_
|
||
|
#define MCLD_FRAGMENT_FRAGMENT_H_
|
||
|
|
||
|
#include "mcld/Support/Compiler.h"
|
||
|
|
||
|
#include <llvm/ADT/ilist_node.h>
|
||
|
#include <llvm/Support/DataTypes.h>
|
||
|
|
||
|
#include <cassert>
|
||
|
#include <cstddef>
|
||
|
|
||
|
namespace mcld {
|
||
|
|
||
|
class SectionData;
|
||
|
|
||
|
/** \class Fragment
|
||
|
* \brief Fragment is the minimun linking unit of MCLinker.
|
||
|
*/
|
||
|
class Fragment : public llvm::ilist_node_with_parent<Fragment, SectionData> {
|
||
|
public:
|
||
|
enum Type { Alignment, Fillment, Region, Target, Stub, Null };
|
||
|
|
||
|
public:
|
||
|
Fragment();
|
||
|
|
||
|
explicit Fragment(Type pKind, SectionData* pParent = NULL);
|
||
|
|
||
|
virtual ~Fragment();
|
||
|
|
||
|
Type getKind() const { return m_Kind; }
|
||
|
|
||
|
const SectionData* getParent() const { return m_pParent; }
|
||
|
SectionData* getParent() { return m_pParent; }
|
||
|
|
||
|
void setParent(SectionData* pValue) { m_pParent = pValue; }
|
||
|
|
||
|
uint64_t getOffset() const;
|
||
|
|
||
|
void setOffset(uint64_t pOffset) { m_Offset = pOffset; }
|
||
|
|
||
|
bool hasOffset() const;
|
||
|
|
||
|
static bool classof(const Fragment* O) { return true; }
|
||
|
|
||
|
virtual size_t size() const {
|
||
|
assert(false && "Can not call abstract Fragment::size()!");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
Type m_Kind;
|
||
|
|
||
|
SectionData* m_pParent;
|
||
|
|
||
|
uint64_t m_Offset;
|
||
|
|
||
|
private:
|
||
|
DISALLOW_COPY_AND_ASSIGN(Fragment);
|
||
|
};
|
||
|
|
||
|
} // namespace mcld
|
||
|
|
||
|
#endif // MCLD_FRAGMENT_FRAGMENT_H_
|