Home | History | Annotate | Download | only in LD
      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:
     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 
     48   void setOutputSection(LDSection& pSection)
     49   { m_pSection = &pSection; }
     50 
     51   /// ---- observers ----- ///
     52   const LDSection* getSection() const { return m_pSection; }
     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