//===- AlignFragment.cpp --------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <mcld/Fragment/AlignFragment.h>

#include <llvm/Support/MathExtras.h>
#include <mcld/LD/SectionData.h>

using namespace mcld;

//===----------------------------------------------------------------------===//
// AlignFragment
//===----------------------------------------------------------------------===//
AlignFragment::AlignFragment(unsigned int pAlignment,
                             int64_t pValue,
                             unsigned int pValueSize,
                             unsigned int pMaxBytesToEmit,
                             SectionData *pSD)
  : Fragment(Fragment::Alignment, pSD), m_Alignment(pAlignment),
    m_Value(pValue), m_ValueSize(pValueSize), m_MaxBytesToEmit(pMaxBytesToEmit),
    m_bEmitNops(false) {
}

size_t AlignFragment::size() const
{
  assert(hasOffset() && "AlignFragment::size() should not be called before layout.");
  uint64_t size = llvm::OffsetToAlignment(getOffset(), m_Alignment);
  if (size > m_MaxBytesToEmit)
    return 0;

  return size;
}

