diff options
| author | Frederic Riss <friss@apple.com> | 2015-08-26 05:09:52 +0000 |
|---|---|---|
| committer | Frederic Riss <friss@apple.com> | 2015-08-26 05:09:52 +0000 |
| commit | 30711fbbf7745947e075f9031a32b6896d6255bf (patch) | |
| tree | 78fa0eeb1288090b7beab204d366aa02fdb5073e /llvm/tools/dsymutil/NonRelocatableStringpool.h | |
| parent | 74b9882ec3ecbda489d3d8862a7747490db61a14 (diff) | |
| download | bcm5719-llvm-30711fbbf7745947e075f9031a32b6896d6255bf.tar.gz bcm5719-llvm-30711fbbf7745947e075f9031a32b6896d6255bf.zip | |
[dsymutil] Split NonRelocatableStringPool into its own file. NFC.
llvm-svn: 246009
Diffstat (limited to 'llvm/tools/dsymutil/NonRelocatableStringpool.h')
| -rw-r--r-- | llvm/tools/dsymutil/NonRelocatableStringpool.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/llvm/tools/dsymutil/NonRelocatableStringpool.h b/llvm/tools/dsymutil/NonRelocatableStringpool.h new file mode 100644 index 00000000000..9db1f3342bd --- /dev/null +++ b/llvm/tools/dsymutil/NonRelocatableStringpool.h @@ -0,0 +1,68 @@ +//===-- NonRelocatableStringpool.h - A simple stringpool -----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#ifndef LLVM_TOOLS_DSYMUTIL_NONRELOCATABLESTRINGPOOL_H +#define LLVM_TOOLS_DSYMUTIL_NONRELOCATABLESTRINGPOOL_H + +namespace llvm { +namespace dsymutil { + +/// \brief A string table that doesn't need relocations. +/// +/// We are doing a final link, no need for a string table that +/// has relocation entries for every reference to it. This class +/// provides this ablitity by just associating offsets with +/// strings. +class NonRelocatableStringpool { +public: + /// \brief Entries are stored into the StringMap and simply linked + /// together through the second element of this pair in order to + /// keep track of insertion order. + typedef StringMap<std::pair<uint32_t, StringMapEntryBase *>, BumpPtrAllocator> + MapTy; + + NonRelocatableStringpool() + : CurrentEndOffset(0), Sentinel(0), Last(&Sentinel) { + // Legacy dsymutil puts an empty string at the start of the line + // table. + getStringOffset(""); + } + + /// \brief Get the offset of string \p S in the string table. This + /// can insert a new element or return the offset of a preexisitng + /// one. + uint32_t getStringOffset(StringRef S); + + /// \brief Get permanent storage for \p S (but do not necessarily + /// emit \p S in the output section). + /// \returns The StringRef that points to permanent storage to use + /// in place of \p S. + StringRef internString(StringRef S); + + // \brief Return the first entry of the string table. + const MapTy::MapEntryTy *getFirstEntry() const { + return getNextEntry(&Sentinel); + } + + // \brief Get the entry following \p E in the string table or null + // if \p E was the last entry. + const MapTy::MapEntryTy *getNextEntry(const MapTy::MapEntryTy *E) const { + return static_cast<const MapTy::MapEntryTy *>(E->getValue().second); + } + + uint64_t getSize() { return CurrentEndOffset; } + +private: + MapTy Strings; + uint32_t CurrentEndOffset; + MapTy::MapEntryTy Sentinel, *Last; +}; +} +} + +#endif |

