66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
//===- 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_
|
|
|