GOT.h revision f33f6de54db174aa679a4b6d1e040d37e95541c0
123b797ab5151eb2474f3bdd679f2f07bfd723042John Reck//===- GOT.h --------------------------------------------------------------===// 223b797ab5151eb2474f3bdd679f2f07bfd723042John Reck// 323b797ab5151eb2474f3bdd679f2f07bfd723042John Reck// The MCLinker Project 423b797ab5151eb2474f3bdd679f2f07bfd723042John Reck// 523b797ab5151eb2474f3bdd679f2f07bfd723042John Reck// This file is distributed under the University of Illinois Open Source 623b797ab5151eb2474f3bdd679f2f07bfd723042John Reck// License. See LICENSE.TXT for details. 723b797ab5151eb2474f3bdd679f2f07bfd723042John Reck// 823b797ab5151eb2474f3bdd679f2f07bfd723042John Reck//===----------------------------------------------------------------------===// 923b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#ifndef MCLD_TARGET_GOT_H 1023b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#define MCLD_TARGET_GOT_H 1123b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#ifdef ENABLE_UNITTEST 1223b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#include <gtest.h> 1323b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#endif 1423b797ab5151eb2474f3bdd679f2f07bfd723042John Reck 1523b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#include <mcld/LD/LDSection.h> 1623b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#include <mcld/LD/SectionData.h> 1723b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#include <mcld/Fragment/TargetFragment.h> 1823b797ab5151eb2474f3bdd679f2f07bfd723042John Reck 1923b797ab5151eb2474f3bdd679f2f07bfd723042John Recknamespace mcld { 20ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reck 21ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reckclass GOT; 22ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reckclass LDSection; 234c9e59d03c2bca38001225b79d01740b8999adfbJohn Reckclass ResolveInfo; 24ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reck 25ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reck/** \class GOT 26ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reck * \brief The Global Offset Table 27ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reck */ 28998a6d81896df8b662cc10ddeb35087b78b38d72John Reckclass GOT 2923b797ab5151eb2474f3bdd679f2f07bfd723042John Reck{ 3023b797ab5151eb2474f3bdd679f2f07bfd723042John Reckprotected: 3119b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck GOT(LDSection& pSection); 32d04794a9a3f9edc8b7ca336175d66eb81a8f55faJohn Reck 334f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckpublic: 344f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck typedef SectionData::iterator iterator; 35ba6adf66d3c44c0aa2fd8a224862ff1901d64300John Reck typedef SectionData::const_iterator const_iterator; 36b36016c65f1d1b5846dba0349aab491dbd3a746aJohn Reck 37ea7a7fb75acb7305eb774ca7bc7e96103bd49323Skuhne template<size_t SIZE> 3823b797ab5151eb2474f3bdd679f2f07bfd723042John Reck class Entry : public TargetFragment 3923b797ab5151eb2474f3bdd679f2f07bfd723042John Reck { 4023b797ab5151eb2474f3bdd679f2f07bfd723042John Reck public: 414f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck enum { EntrySize = SIZE }; 42119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck 4319b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck public: 444f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck Entry(uint64_t pValue, SectionData* pParent) 454f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck : TargetFragment(Fragment::Target, pParent), 461949e7928eeec22cd3f74b5f763a4eb433238453John Reck f_Value(pValue) { 47443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck } 484f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 4923b797ab5151eb2474f3bdd679f2f07bfd723042John Reck virtual ~Entry() {} 5023b797ab5151eb2474f3bdd679f2f07bfd723042John Reck 513b20251a355c88193c439f928a84ae69483fb488John Reck uint64_t getValue() const 524f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { return f_Value; } 531125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck 541125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck void setValue(uint64_t pValue) 551125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck { f_Value = pValue; } 561125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck 571125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck // Override pure virtual function 5823b797ab5151eb2474f3bdd679f2f07bfd723042John Reck size_t size() const 5923b797ab5151eb2474f3bdd679f2f07bfd723042John Reck { return EntrySize; } 60119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck 61e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck protected: 6223b797ab5151eb2474f3bdd679f2f07bfd723042John Reck uint64_t f_Value; 63119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck }; 64119907cd2575c56b1ebf66348b52e67aaf6a88d8John Reck 65e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckpublic: 6623b797ab5151eb2474f3bdd679f2f07bfd723042John Reck virtual ~GOT(); 671125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck 681125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck // ----- observers -----// 691125d1fa92ab9f3b8315bbfb72e038b62dfd454bJohn Reck uint64_t addr() const { return m_Section.addr(); } 70a5dda645da738da7b4ae15e28fa7d93d3b04b94fJohn Reck uint32_t size() const { return m_Section.size(); } 71a5dda645da738da7b4ae15e28fa7d93d3b04b94fJohn Reck 7201a5ea35fbba4c5bb1d7790ae1677a2fa752e042John Reck const_iterator begin() const { return m_SectionData->begin(); } 73aa95a88327d9a3ac8a4a00b065b78ac0f28b3a19John Reck iterator begin() { return m_SectionData->begin(); } 74aa95a88327d9a3ac8a4a00b065b78ac0f28b3a19John Reck const_iterator end () const { return m_SectionData->end(); } 7550210d912925aef14e4ce69be82e4949122a3cd9Alan Viverette iterator end () { return m_SectionData->end(); } 76058fc640017c90120c599d378a4cbc55668b05b7Chris Craik 7750210d912925aef14e4ce69be82e4949122a3cd9Alan Viverette bool empty() const 7863a06673253914510bbeebd500655008682dade1John Reck { return m_SectionData->empty(); } 79860d155f866cc15a725e7ce03763280987f24901John Reck 8068bfe0a37a0dcef52abd81688d8520c5d16e1a85John Reck // finalizeSectionSize - set LDSection size 81ea7a7fb75acb7305eb774ca7bc7e96103bd49323Skuhne virtual void finalizeSectionSize(); 82ea7a7fb75acb7305eb774ca7bc7e96103bd49323Skuhne 83e4267ea4f20740c37c01bfb6aefcf61fddc4566aJohn Reckprotected: 8417035b0211a3c9d45ea46a99217a6acbe76e8fbeJohn Reck LDSection& m_Section; 8523b797ab5151eb2474f3bdd679f2f07bfd723042John Reck SectionData* m_SectionData; 86e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck}; 87d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik 88ea7a7fb75acb7305eb774ca7bc7e96103bd49323Skuhne} // namespace of mcld 89e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 903e8249568cc428296ac76c7ddce3f0382d40fe5bJohn Reck#endif 9119b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck 92998a6d81896df8b662cc10ddeb35087b78b38d72John Reck