diff options
Diffstat (limited to 'llvm/tools/llvm-pdbutil/StreamUtil.h')
-rw-r--r-- | llvm/tools/llvm-pdbutil/StreamUtil.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/llvm/tools/llvm-pdbutil/StreamUtil.h b/llvm/tools/llvm-pdbutil/StreamUtil.h new file mode 100644 index 000000000000..f810f7dc15b4 --- /dev/null +++ b/llvm/tools/llvm-pdbutil/StreamUtil.h @@ -0,0 +1,63 @@ +//===- Streamutil.h - PDB stream utilities ----------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H +#define LLVM_TOOLS_LLVMPDBDUMP_STREAMUTIL_H + +#include "llvm/ADT/Optional.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" + +#include <string> + +namespace llvm { +namespace pdb { +class PDBFile; +enum class StreamPurpose { + NamedStream, + ModuleStream, + Symbols, + PDB, + DBI, + TPI, + IPI, + GlobalHash, + PublicHash, + TpiHash, + IpiHash, + Other +}; + +struct StreamInfo { +public: + StreamInfo() {} + + uint32_t getModuleIndex() const { return *ModuleIndex; } + StreamPurpose getPurpose() const { return Purpose; } + StringRef getShortName() const { return Name; } + uint32_t getStreamIndex() const { return StreamIndex; } + std::string getLongName() const; + + static StreamInfo createStream(StreamPurpose Purpose, StringRef Name, + uint32_t StreamIndex); + static StreamInfo createModuleStream(StringRef Module, uint32_t StreamIndex, + uint32_t Modi); + +private: + StreamPurpose Purpose; + uint32_t StreamIndex; + std::string Name; + Optional<uint32_t> ModuleIndex; +}; + +void discoverStreamPurposes(PDBFile &File, + SmallVectorImpl<StreamInfo> &Streams); +} +} + +#endif |