1//===- DIAInjectedSource.cpp - DIA impl for IPDBInjectedSource --*- 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#include "llvm/DebugInfo/PDB/DIA/DIAInjectedSource.h" 10#include "llvm/ADT/ArrayRef.h" 11#include "llvm/DebugInfo/PDB/ConcreteSymbolEnumerator.h" 12#include "llvm/DebugInfo/PDB/DIA/DIASession.h" 13#include "llvm/DebugInfo/PDB/DIA/DIAUtils.h" 14 15using namespace llvm; 16using namespace llvm::pdb; 17 18DIAInjectedSource::DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile) 19 : SourceFile(DiaSourceFile) {} 20 21uint32_t DIAInjectedSource::getCrc32() const { 22 DWORD Crc; 23 return (S_OK == SourceFile->get_crc(&Crc)) ? Crc : 0; 24} 25 26uint64_t DIAInjectedSource::getCodeByteSize() const { 27 ULONGLONG Size; 28 return (S_OK == SourceFile->get_length(&Size)) ? Size : 0; 29} 30 31std::string DIAInjectedSource::getFileName() const { 32 return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_filename); 33} 34 35std::string DIAInjectedSource::getObjectFileName() const { 36 return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_objectFilename); 37} 38 39std::string DIAInjectedSource::getVirtualFileName() const { 40 return invokeBstrMethod(*SourceFile, 41 &IDiaInjectedSource::get_virtualFilename); 42} 43 44uint32_t DIAInjectedSource::getCompression() const { 45 DWORD Compression = 0; 46 if (S_OK != SourceFile->get_sourceCompression(&Compression)) 47 return PDB_SourceCompression::None; 48 return static_cast<uint32_t>(Compression); 49} 50 51std::string DIAInjectedSource::getCode() const { 52 DWORD DataSize; 53 if (S_OK != SourceFile->get_source(0, &DataSize, nullptr)) 54 return ""; 55 56 std::vector<uint8_t> Buffer(DataSize); 57 if (S_OK != SourceFile->get_source(DataSize, &DataSize, Buffer.data())) 58 return ""; 59 assert(Buffer.size() == DataSize); 60 return std::string(reinterpret_cast<const char *>(Buffer.data()), 61 Buffer.size()); 62} 63