1679aeaddSZachary Turner //===- DIAInjectedSource.cpp - DIA impl for IPDBInjectedSource --*- C++ -*-===// 2679aeaddSZachary Turner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6679aeaddSZachary Turner // 7679aeaddSZachary Turner //===----------------------------------------------------------------------===// 8679aeaddSZachary Turner 9679aeaddSZachary Turner #include "llvm/DebugInfo/PDB/DIA/DIAInjectedSource.h" 10679aeaddSZachary Turner #include "llvm/ADT/ArrayRef.h" 11679aeaddSZachary Turner #include "llvm/DebugInfo/PDB/ConcreteSymbolEnumerator.h" 12679aeaddSZachary Turner #include "llvm/DebugInfo/PDB/DIA/DIASession.h" 13679aeaddSZachary Turner #include "llvm/DebugInfo/PDB/DIA/DIAUtils.h" 14679aeaddSZachary Turner 15679aeaddSZachary Turner using namespace llvm; 16679aeaddSZachary Turner using namespace llvm::pdb; 17679aeaddSZachary Turner DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile)188562c1a1SReid KlecknerDIAInjectedSource::DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile) 198562c1a1SReid Kleckner : SourceFile(DiaSourceFile) {} 20679aeaddSZachary Turner getCrc32() const21679aeaddSZachary Turneruint32_t DIAInjectedSource::getCrc32() const { 22679aeaddSZachary Turner DWORD Crc; 23679aeaddSZachary Turner return (S_OK == SourceFile->get_crc(&Crc)) ? Crc : 0; 24679aeaddSZachary Turner } 25679aeaddSZachary Turner getCodeByteSize() const26679aeaddSZachary Turneruint64_t DIAInjectedSource::getCodeByteSize() const { 27679aeaddSZachary Turner ULONGLONG Size; 28679aeaddSZachary Turner return (S_OK == SourceFile->get_length(&Size)) ? Size : 0; 29679aeaddSZachary Turner } 30679aeaddSZachary Turner getFileName() const31679aeaddSZachary Turnerstd::string DIAInjectedSource::getFileName() const { 32679aeaddSZachary Turner return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_filename); 33679aeaddSZachary Turner } 34679aeaddSZachary Turner getObjectFileName() const35679aeaddSZachary Turnerstd::string DIAInjectedSource::getObjectFileName() const { 36679aeaddSZachary Turner return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_objectFilename); 37679aeaddSZachary Turner } 38679aeaddSZachary Turner getVirtualFileName() const39679aeaddSZachary Turnerstd::string DIAInjectedSource::getVirtualFileName() const { 40679aeaddSZachary Turner return invokeBstrMethod(*SourceFile, 41679aeaddSZachary Turner &IDiaInjectedSource::get_virtualFilename); 42679aeaddSZachary Turner } 43679aeaddSZachary Turner getCompression() const44*7bb5fc05SNico Weberuint32_t DIAInjectedSource::getCompression() const { 45679aeaddSZachary Turner DWORD Compression = 0; 46679aeaddSZachary Turner if (S_OK != SourceFile->get_sourceCompression(&Compression)) 47679aeaddSZachary Turner return PDB_SourceCompression::None; 48*7bb5fc05SNico Weber return static_cast<uint32_t>(Compression); 49679aeaddSZachary Turner } 50679aeaddSZachary Turner getCode() const51679aeaddSZachary Turnerstd::string DIAInjectedSource::getCode() const { 52679aeaddSZachary Turner DWORD DataSize; 53679aeaddSZachary Turner if (S_OK != SourceFile->get_source(0, &DataSize, nullptr)) 54679aeaddSZachary Turner return ""; 55679aeaddSZachary Turner 56679aeaddSZachary Turner std::vector<uint8_t> Buffer(DataSize); 57679aeaddSZachary Turner if (S_OK != SourceFile->get_source(DataSize, &DataSize, Buffer.data())) 58679aeaddSZachary Turner return ""; 59679aeaddSZachary Turner assert(Buffer.size() == DataSize); 60679aeaddSZachary Turner return std::string(reinterpret_cast<const char *>(Buffer.data()), 61679aeaddSZachary Turner Buffer.size()); 62679aeaddSZachary Turner } 63