1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- OutputRelocSection.h -----------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_TARGET_OUTPUTRELOCSECTION_H 1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_TARGET_OUTPUTRELOCSECTION_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LD/RelocData.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LDSymbol; 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Module; 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Relocation; 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass RelocationFactory; 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class OutputRelocSection 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass OutputRelocSection 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 28d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao OutputRelocSection(Module& pModule, LDSection& pSection); 29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~OutputRelocSection(); 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// create - create an dynamic relocation entry 3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Relocation* create(); 3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao void reserveEntry(size_t pNum=1); 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Relocation* consumeEntry(); 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// addSymbolToDynSym - add local symbol to TLS category so that it'll be 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// emitted into .dynsym 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool addSymbolToDynSym(LDSymbol& pSymbol); 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // ----- observers ----- // 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool empty() 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_pRelocData->empty(); } 46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao size_t numOfRelocs(); 48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate: 50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao typedef RelocData::iterator RelocIterator; 51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 52affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate: 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Module& m_Module; 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// m_RelocData - the output RelocData which contains the dynamic 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao /// relocations 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao RelocData* m_pRelocData; 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// m_isVisit - First time visit the function getEntry() or not 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang bool m_isVisit; 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// m_ValidEntryIterator - point to the first valid entry 63d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao RelocIterator m_ValidEntryIterator; 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 70