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_
|
||
|
|