63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
//===- MergedStringTable.h ------------------------------------------------===//
|
|
//
|
|
// The MCLinker Project
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef MCLD_LD_MERGEDSTRINGTABLE_H_
|
|
#define MCLD_LD_MERGEDSTRINGTABLE_H_
|
|
|
|
#include "mcld/Support/MemoryRegion.h"
|
|
|
|
#include <llvm/ADT/StringMap.h>
|
|
#include <llvm/ADT/StringRef.h>
|
|
|
|
namespace mcld {
|
|
|
|
/** \class MergedStringTable
|
|
* \brief MergedStringTable represents the mergeable string table. The sections
|
|
* with flag SHF_MERGED and SHF_STRING are mergeable. Every string in
|
|
* MergedStringTable is unique.
|
|
*/
|
|
class MergedStringTable {
|
|
public:
|
|
typedef llvm::StringMap<size_t> StringMapTy;
|
|
|
|
public:
|
|
MergedStringTable() {}
|
|
|
|
/// insertString - insert a string to the string table
|
|
/// @return false if the string already exists in the map.
|
|
bool insertString(llvm::StringRef pString);
|
|
|
|
/// finalizeOffset - finalize the output offset of strings. After this
|
|
/// function been called, any string should not be added to this table
|
|
/// @return the section size
|
|
uint64_t finalizeOffset();
|
|
|
|
/// emit - emit the string table
|
|
void emit(MemoryRegion& pRegion);
|
|
|
|
/// ----- observers -----///
|
|
/// getOutputOffset - get the output offset of the string. This should be
|
|
/// called after finalizeOffset.
|
|
size_t getOutputOffset(llvm::StringRef pStr);
|
|
|
|
private:
|
|
typedef StringMapTy::iterator string_map_iterator;
|
|
typedef StringMapTy::const_iterator const_string_map_iterator;
|
|
|
|
private:
|
|
/// m_StringMap - the string pool of this section. It maps the string to the
|
|
/// output offset. The key of this map is the string, and the value is output
|
|
/// offset
|
|
StringMapTy m_StringMap;
|
|
};
|
|
|
|
} // namespace mcld
|
|
|
|
#endif // MCLD_LD_MERGEDSTRINGTABLE_H_
|
|
|