//===- DebugString.h ------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MCLD_LD_DEBUGSTRING_H_ #define MCLD_LD_DEBUGSTRING_H_ #include "mcld/LD/MergedStringTable.h" #include namespace mcld { class LDSection; class Relocation; class TargetLDBackend; /** \class DebugString * \brief DebugString represents the output debug section .debug_str */ class DebugString { public: DebugString() : m_pSection(NULL) {} static DebugString* Create(LDSection& pSection); /// merge - process the strings in the given input .debug_str section and add /// those strings into merged string map void merge(LDSection& pSection); /// computeOffsetSize - set up the output offset of each strings and the /// section size /// @return string table size size_t computeOffsetSize(); /// applyOffset - apply the relocation which refer to debug string. This /// should be called after finalizeStringsOffset() void applyOffset(Relocation& pReloc, TargetLDBackend& pBackend); /// emit - emit the section .debug_str void emit(MemoryRegion& pRegion); void setOutputSection(LDSection& pSection) { m_pSection = &pSection; } /// ---- observers ----- /// const LDSection* getSection() const { return m_pSection; } LDSection* getSection() { return m_pSection; } private: /// m_Section - the output LDSection of this .debug_str LDSection* m_pSection; MergedStringTable m_StringTable; }; } // namespace mcld #endif // MCLD_LD_DEBUGSTRING_H_