1 //===- DebugString.h ------------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #ifndef MCLD_LD_DEBUGSTRING_H_ 10 #define MCLD_LD_DEBUGSTRING_H_ 11 12 #include "mcld/LD/MergedStringTable.h" 13 14 #include <vector> 15 16 namespace mcld { 17 18 class LDSection; 19 class Relocation; 20 class TargetLDBackend; 21 22 /** \class DebugString 23 * \brief DebugString represents the output debug section .debug_str 24 */ 25 class DebugString { 26 public: DebugString()27 DebugString() 28 : m_pSection(NULL) {} 29 30 static DebugString* Create(LDSection& pSection); 31 32 /// merge - process the strings in the given input .debug_str section and add 33 /// those strings into merged string map 34 void merge(LDSection& pSection); 35 36 /// computeOffsetSize - set up the output offset of each strings and the 37 /// section size 38 /// @return string table size 39 size_t computeOffsetSize(); 40 41 /// applyOffset - apply the relocation which refer to debug string. This 42 /// should be called after finalizeStringsOffset() 43 void applyOffset(Relocation& pReloc, TargetLDBackend& pBackend); 44 45 /// emit - emit the section .debug_str 46 void emit(MemoryRegion& pRegion); 47 setOutputSection(LDSection & pSection)48 void setOutputSection(LDSection& pSection) 49 { m_pSection = &pSection; } 50 51 /// ---- observers ----- /// getSection()52 const LDSection* getSection() const { return m_pSection; } getSection()53 LDSection* getSection() { return m_pSection; } 54 55 private: 56 /// m_Section - the output LDSection of this .debug_str 57 LDSection* m_pSection; 58 59 MergedStringTable m_StringTable; 60 }; 61 62 } // namespace mcld 63 64 #endif // MCLD_LD_DEBUGSTRING_H_ 65 66