1 //===- PublicsStream.h - PDB Public Symbol Stream -------- ------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_DEBUGINFO_PDB_NATIVE_PUBLICSSTREAM_H
10 #define LLVM_DEBUGINFO_PDB_NATIVE_PUBLICSSTREAM_H
11 
12 #include "llvm/DebugInfo/PDB/Native/GlobalsStream.h"
13 #include "llvm/Support/BinaryStreamArray.h"
14 #include "llvm/Support/Error.h"
15 
16 namespace llvm {
17 namespace msf {
18 class MappedBlockStream;
19 }
20 namespace pdb {
21 struct PublicsStreamHeader;
22 struct SectionOffset;
23 
24 class PublicsStream {
25 public:
26   PublicsStream(std::unique_ptr<msf::MappedBlockStream> Stream);
27   ~PublicsStream();
28   Error reload();
29 
30   uint32_t getSymHash() const;
31   uint16_t getThunkTableSection() const;
32   uint32_t getThunkTableOffset() const;
getPublicsTable()33   const GSIHashTable &getPublicsTable() const { return PublicsTable; }
getAddressMap()34   FixedStreamArray<support::ulittle32_t> getAddressMap() const {
35     return AddressMap;
36   }
getThunkMap()37   FixedStreamArray<support::ulittle32_t> getThunkMap() const {
38     return ThunkMap;
39   }
getSectionOffsets()40   FixedStreamArray<SectionOffset> getSectionOffsets() const {
41     return SectionOffsets;
42   }
43 
44 private:
45   std::unique_ptr<msf::MappedBlockStream> Stream;
46   GSIHashTable PublicsTable;
47   FixedStreamArray<support::ulittle32_t> AddressMap;
48   FixedStreamArray<support::ulittle32_t> ThunkMap;
49   FixedStreamArray<SectionOffset> SectionOffsets;
50 
51   const PublicsStreamHeader *Header;
52 };
53 }
54 }
55 
56 #endif
57