blob: 77cf6c82ac0ccce5ac031c00864ef9df7cb85775 [file] [log] [blame]
//===- OutputRelocSection.h -----------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_TARGET_OUTPUTRELOCSECTION_H_
#define MCLD_TARGET_OUTPUTRELOCSECTION_H_
#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();
/// create - create an dynamic relocation entry
Relocation* create();
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 mcld
#endif // MCLD_TARGET_OUTPUTRELOCSECTION_H_