diff options
| author | Pirama Arumuga Nainar <pirama@google.com> | 2018-11-10 11:01:22 -0800 |
|---|---|---|
| committer | Alex Tsanis <alextsanisbadlorg@gmail.com> | 2018-11-24 22:00:27 +0000 |
| commit | d1d48b140bafaa8a50107292f5fce95562575765 (patch) | |
| tree | f56a423bb9f6e46190fa3742cfcb73c571b3ebc1 /clang-r344140b/include/llvm/DebugInfo/CodeView/DebugStringTableSubsection.h | |
| parent | 1be2ab6257915490176d09db0a7307595f7c3021 (diff) | |
Update prebuilt Clang to r344140b.
clang 8.0.4 (based on r344140) from build 5122994.
Bug: http://b/119270185
Test: N/A
Change-Id: Ia74b247af5a54cc671817abd1ab9f08731eabf28
Signed-off-by: Akhil Narang <akhilnarang.1999@gmail.com>
Diffstat (limited to 'clang-r344140b/include/llvm/DebugInfo/CodeView/DebugStringTableSubsection.h')
| -rw-r--r-- | clang-r344140b/include/llvm/DebugInfo/CodeView/DebugStringTableSubsection.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/clang-r344140b/include/llvm/DebugInfo/CodeView/DebugStringTableSubsection.h b/clang-r344140b/include/llvm/DebugInfo/CodeView/DebugStringTableSubsection.h new file mode 100644 index 00000000..bebc9602 --- /dev/null +++ b/clang-r344140b/include/llvm/DebugInfo/CodeView/DebugStringTableSubsection.h @@ -0,0 +1,97 @@ +//===- DebugStringTableSubsection.h - CodeView String Table -----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_DEBUGINFO_CODEVIEW_DEBUGSTRINGTABLESUBSECTION_H +#define LLVM_DEBUGINFO_CODEVIEW_DEBUGSTRINGTABLESUBSECTION_H + +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/StringMap.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/DebugInfo/CodeView/CodeView.h" +#include "llvm/DebugInfo/CodeView/DebugSubsection.h" +#include "llvm/Support/BinaryStreamRef.h" +#include "llvm/Support/Error.h" +#include <cstdint> + +namespace llvm { + +class BinaryStreamReader; + +namespace codeview { + +/// Represents a read-only view of a CodeView string table. This is a very +/// simple flat buffer consisting of null-terminated strings, where strings +/// are retrieved by their offset in the buffer. DebugStringTableSubsectionRef +/// does not own the underlying storage for the buffer. +class DebugStringTableSubsectionRef : public DebugSubsectionRef { +public: + DebugStringTableSubsectionRef(); + + static bool classof(const DebugSubsectionRef *S) { + return S->kind() == DebugSubsectionKind::StringTable; + } + + Error initialize(BinaryStreamRef Contents); + Error initialize(BinaryStreamReader &Reader); + + Expected<StringRef> getString(uint32_t Offset) const; + + bool valid() const { return Stream.valid(); } + + BinaryStreamRef getBuffer() const { return Stream; } + +private: + BinaryStreamRef Stream; +}; + +/// Represents a read-write view of a CodeView string table. +/// DebugStringTableSubsection owns the underlying storage for the table, and is +/// capable of serializing the string table into a format understood by +/// DebugStringTableSubsectionRef. +class DebugStringTableSubsection : public DebugSubsection { +public: + DebugStringTableSubsection(); + + static bool classof(const DebugSubsection *S) { + return S->kind() == DebugSubsectionKind::StringTable; + } + + // If string S does not exist in the string table, insert it. + // Returns the ID for S. + uint32_t insert(StringRef S); + + // Return the ID for string S. Assumes S exists in the table. + uint32_t getIdForString(StringRef S) const; + + StringRef getStringForId(uint32_t Id) const; + + uint32_t calculateSerializedSize() const override; + Error commit(BinaryStreamWriter &Writer) const override; + + uint32_t size() const; + + StringMap<uint32_t>::const_iterator begin() const { + return StringToId.begin(); + } + + StringMap<uint32_t>::const_iterator end() const { return StringToId.end(); } + + std::vector<uint32_t> sortedIds() const; + +private: + DenseMap<uint32_t, StringRef> IdToString; + StringMap<uint32_t> StringToId; + uint32_t StringSize = 1; +}; + +} // end namespace codeview + +} // end namespace llvm + +#endif // LLVM_DEBUGINFO_CODEVIEW_DEBUGSTRINGTABLESUBSECTION_H |
