C++程序  |  66行  |  1.72 KB

//===- 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 <vector>

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_