//===- OutputRelocSection.h -----------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_OUTPUT_RELOCATION_SECTION_H
#define MCLD_OUTPUT_RELOCATION_SECTION_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif
#include <mcld/LD/RelocData.h>
namespace mcld
{
class LDSymbol;
class Module;
class Relocation;
class RelocationFactory;
/** \class OutputRelocSection
* \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt
*/
class OutputRelocSection
{
public:
OutputRelocSection(Module& pModule, LDSection& pSection);
~OutputRelocSection();
void reserveEntry(size_t pNum=1);
Relocation* consumeEntry();
/// addSymbolToDynSym - add local symbol to TLS category so that it'll be
/// emitted into .dynsym
bool addSymbolToDynSym(LDSymbol& pSymbol);
// ----- observers ----- //
bool empty()
{ return m_pRelocData->empty(); }
size_t numOfRelocs();
private:
typedef RelocData::iterator RelocIterator;
private:
Module& m_Module;
/// m_RelocData - the output RelocData which contains the dynamic
/// relocations
RelocData* m_pRelocData;
/// m_isVisit - First time visit the function getEntry() or not
bool m_isVisit;
/// m_ValidEntryIterator - point to the first valid entry
RelocIterator m_ValidEntryIterator;
};
} // namespace of mcld
#endif