1//===- FillFragment.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_FILLFRAGMENT_H_
10#define MCLD_FRAGMENT_FILLFRAGMENT_H_
11
12#include "mcld/Fragment/Fragment.h"
13
14#include <llvm/Support/DataTypes.h>
15
16namespace mcld {
17
18class SectionData;
19
20class FillFragment : public Fragment {
21 public:
22  FillFragment(int64_t pValue,
23               unsigned int pValueSize,
24               uint64_t pSize,
25               SectionData* pSD = NULL);
26
27  int64_t getValue() const { return m_Value; }
28
29  unsigned getValueSize() const { return m_ValueSize; }
30
31  static bool classof(const Fragment* F) {
32    return F->getKind() == Fragment::Fillment;
33  }
34
35  static bool classof(const FillFragment*) { return true; }
36
37  size_t size() const { return m_Size; }
38
39 private:
40  /// m_Value - Value used for filling bytes
41  int64_t m_Value;
42
43  /// m_ValueSize - The size (in bytes) of \arg Value to use when filling, or 0
44  /// if this is a virtual fill fragment.
45  unsigned int m_ValueSize;
46
47  /// m_Size - The number of bytes to insert.
48  uint64_t m_Size;
49};
50
51}  // namespace mcld
52
53#endif  // MCLD_FRAGMENT_FILLFRAGMENT_H_
54