137b74a387bb3993387029859c2d9d051c41c724eStephen Hines//===- DebugString.h ------------------------------------------------------===//
237b74a387bb3993387029859c2d9d051c41c724eStephen Hines//
337b74a387bb3993387029859c2d9d051c41c724eStephen Hines//                     The MCLinker Project
437b74a387bb3993387029859c2d9d051c41c724eStephen Hines//
537b74a387bb3993387029859c2d9d051c41c724eStephen Hines// This file is distributed under the University of Illinois Open Source
637b74a387bb3993387029859c2d9d051c41c724eStephen Hines// License. See LICENSE.TXT for details.
737b74a387bb3993387029859c2d9d051c41c724eStephen Hines//
837b74a387bb3993387029859c2d9d051c41c724eStephen Hines//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_LD_DEBUGSTRING_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_LD_DEBUGSTRING_H_
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/MergedStringTable.h"
1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include <vector>
1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
1737b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass LDSection;
1937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass Relocation;
2037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass TargetLDBackend;
2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines
2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines/** \class DebugString
2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines *  \brief DebugString represents the output debug section .debug_str
2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines */
2537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass DebugString {
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  DebugString()
2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines      : m_pSection(NULL) {}
2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines
3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines  static DebugString* Create(LDSection& pSection);
3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines
3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// merge - process the strings in the given input .debug_str section and add
3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// those strings into merged string map
3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  void merge(LDSection& pSection);
3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines
3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// computeOffsetSize - set up the output offset of each strings and the
3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// section size
3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// @return string table size
3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  size_t computeOffsetSize();
4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines
4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// applyOffset - apply the relocation which refer to debug string. This
4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// should be called after finalizeStringsOffset()
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  void applyOffset(Relocation& pReloc, TargetLDBackend& pBackend);
4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// emit - emit the section .debug_str
4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  void emit(MemoryRegion& pRegion);
4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines
4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  void setOutputSection(LDSection& pSection)
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  { m_pSection = &pSection; }
5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// ---- observers ----- ///
5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  const LDSection* getSection() const { return m_pSection; }
5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  LDSection*       getSection()       { return m_pSection; }
5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines
5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  /// m_Section - the output LDSection of this .debug_str
5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  LDSection* m_pSection;
5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines
5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines  MergedStringTable m_StringTable;
6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines};
6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines
6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines
6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // MCLD_LD_DEBUGSTRING_H_
6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines
66