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