1de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===- InfoStreamBuilder.cpp - PDB Info Stream Creation ---------*- C++ -*-===// 2de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 3de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// The LLVM Compiler Infrastructure 4de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 5de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 6de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// License. See LICENSE.TXT for details. 7de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 8de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===// 9de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 10de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/PDB/Raw/InfoStreamBuilder.h" 11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 12de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/StreamWriter.h" 13de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/PDB/Raw/InfoStream.h" 14de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h" 15de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/PDB/Raw/RawError.h" 16de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm; 18de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm::codeview; 19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm::pdb; 20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 21de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarInfoStreamBuilder::InfoStreamBuilder(IPDBFile &File) : File(File) {} 22de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid InfoStreamBuilder::setVersion(PdbRaw_ImplVer V) { Ver = V; } 24de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 25de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid InfoStreamBuilder::setSignature(uint32_t S) { Sig = S; } 26de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 27de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid InfoStreamBuilder::setAge(uint32_t A) { Age = A; } 28de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 29de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid InfoStreamBuilder::setGuid(PDB_UniqueId G) { Guid = G; } 30de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 31de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarExpected<std::unique_ptr<InfoStream>> InfoStreamBuilder::build() { 32de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!Ver.hasValue()) 33de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return make_error<RawError>(raw_error_code::unspecified, 34de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar "Missing PDB Stream Version"); 35de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!Sig.hasValue()) 36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return make_error<RawError>(raw_error_code::unspecified, 37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar "Missing PDB Stream Signature"); 38de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!Age.hasValue()) 39de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return make_error<RawError>(raw_error_code::unspecified, 40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar "Missing PDB Stream Age"); 41de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!Guid.hasValue()) 42de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return make_error<RawError>(raw_error_code::unspecified, 43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar "Missing PDB Stream Guid"); 44de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 45de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar auto InfoS = MappedBlockStream::createIndexedStream(StreamPDB, File); 46de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (!InfoS) 47de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return InfoS.takeError(); 48de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar auto Info = llvm::make_unique<InfoStream>(std::move(*InfoS)); 49de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Info->Version = *Ver; 50de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Info->Signature = *Sig; 51de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Info->Age = *Age; 52de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Info->Guid = *Guid; 53de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return std::move(Info); 54de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 55