reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | //===- InjectedSourceStream.cpp - PDB Headerblock Stream Access -----------===// // // 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 // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/PDB/Native/InjectedSourceStream.h" #include "llvm/DebugInfo/MSF/MappedBlockStream.h" #include "llvm/DebugInfo/PDB/Native/Hash.h" #include "llvm/DebugInfo/PDB/Native/PDBStringTable.h" #include "llvm/DebugInfo/PDB/Native/RawConstants.h" #include "llvm/DebugInfo/PDB/Native/RawTypes.h" #include "llvm/Support/BinaryStreamReader.h" #include "llvm/Support/Endian.h" using namespace llvm; using namespace llvm::msf; using namespace llvm::support; using namespace llvm::pdb; InjectedSourceStream::InjectedSourceStream( std::unique_ptr<MappedBlockStream> Stream) : Stream(std::move(Stream)) {} Error InjectedSourceStream::reload(const PDBStringTable &Strings) { BinaryStreamReader Reader(*Stream); if (auto EC = Reader.readObject(Header)) return EC; if (Header->Version != static_cast<uint32_t>(PdbRaw_SrcHeaderBlockVer::SrcVerOne)) return make_error<RawError>(raw_error_code::corrupt_file, "Invalid headerblock header version"); if (auto EC = InjectedSourceTable.load(Reader)) return EC; for (const auto& Entry : *this) { if (Entry.second.Size != sizeof(SrcHeaderBlockEntry)) return make_error<RawError>(raw_error_code::corrupt_file, "Invalid headerbock entry size"); if (Entry.second.Version != static_cast<uint32_t>(PdbRaw_SrcHeaderBlockVer::SrcVerOne)) return make_error<RawError>(raw_error_code::corrupt_file, "Invalid headerbock entry version"); // Check that all name references are valid. auto Name = Strings.getStringForID(Entry.second.FileNI); if (!Name) return Name.takeError(); auto ObjName = Strings.getStringForID(Entry.second.ObjNI); if (!ObjName) return ObjName.takeError(); auto VName = Strings.getStringForID(Entry.second.VFileNI); if (!VName) return VName.takeError(); } assert(Reader.bytesRemaining() == 0); return Error::success(); } |