1336809Sdim//===- DIAInjectedSource.cpp - DIA impl for IPDBInjectedSource --*- C++ -*-===// 2336809Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6336809Sdim// 7336809Sdim//===----------------------------------------------------------------------===// 8336809Sdim 9336809Sdim#include "llvm/DebugInfo/PDB/DIA/DIAInjectedSource.h" 10336809Sdim#include "llvm/ADT/ArrayRef.h" 11336809Sdim#include "llvm/DebugInfo/PDB/ConcreteSymbolEnumerator.h" 12336809Sdim#include "llvm/DebugInfo/PDB/DIA/DIASession.h" 13336809Sdim#include "llvm/DebugInfo/PDB/DIA/DIAUtils.h" 14336809Sdim 15336809Sdimusing namespace llvm; 16336809Sdimusing namespace llvm::pdb; 17336809Sdim 18336809SdimDIAInjectedSource::DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile) 19336809Sdim : SourceFile(DiaSourceFile) {} 20336809Sdim 21336809Sdimuint32_t DIAInjectedSource::getCrc32() const { 22336809Sdim DWORD Crc; 23336809Sdim return (S_OK == SourceFile->get_crc(&Crc)) ? Crc : 0; 24336809Sdim} 25336809Sdim 26336809Sdimuint64_t DIAInjectedSource::getCodeByteSize() const { 27336809Sdim ULONGLONG Size; 28336809Sdim return (S_OK == SourceFile->get_length(&Size)) ? Size : 0; 29336809Sdim} 30336809Sdim 31336809Sdimstd::string DIAInjectedSource::getFileName() const { 32336809Sdim return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_filename); 33336809Sdim} 34336809Sdim 35336809Sdimstd::string DIAInjectedSource::getObjectFileName() const { 36336809Sdim return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_objectFilename); 37336809Sdim} 38336809Sdim 39336809Sdimstd::string DIAInjectedSource::getVirtualFileName() const { 40336809Sdim return invokeBstrMethod(*SourceFile, 41336809Sdim &IDiaInjectedSource::get_virtualFilename); 42336809Sdim} 43336809Sdim 44353358Sdimuint32_t DIAInjectedSource::getCompression() const { 45336809Sdim DWORD Compression = 0; 46336809Sdim if (S_OK != SourceFile->get_sourceCompression(&Compression)) 47336809Sdim return PDB_SourceCompression::None; 48353358Sdim return static_cast<uint32_t>(Compression); 49336809Sdim} 50336809Sdim 51336809Sdimstd::string DIAInjectedSource::getCode() const { 52336809Sdim DWORD DataSize; 53336809Sdim if (S_OK != SourceFile->get_source(0, &DataSize, nullptr)) 54336809Sdim return ""; 55336809Sdim 56336809Sdim std::vector<uint8_t> Buffer(DataSize); 57336809Sdim if (S_OK != SourceFile->get_source(DataSize, &DataSize, Buffer.data())) 58336809Sdim return ""; 59336809Sdim assert(Buffer.size() == DataSize); 60336809Sdim return std::string(reinterpret_cast<const char *>(Buffer.data()), 61336809Sdim Buffer.size()); 62336809Sdim} 63