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 15 using namespace llvm; 16 using namespace llvm::pdb; 17 DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile)18DIAInjectedSource::DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile) 19 : SourceFile(DiaSourceFile) {} 20 getCrc32() const21uint32_t DIAInjectedSource::getCrc32() const { 22 DWORD Crc; 23 return (S_OK == SourceFile->get_crc(&Crc)) ? Crc : 0; 24 } 25 getCodeByteSize() const26uint64_t DIAInjectedSource::getCodeByteSize() const { 27 ULONGLONG Size; 28 return (S_OK == SourceFile->get_length(&Size)) ? Size : 0; 29 } 30 getFileName() const31std::string DIAInjectedSource::getFileName() const { 32 return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_filename); 33 } 34 getObjectFileName() const35std::string DIAInjectedSource::getObjectFileName() const { 36 return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_objectFilename); 37 } 38 getVirtualFileName() const39std::string DIAInjectedSource::getVirtualFileName() const { 40 return invokeBstrMethod(*SourceFile, 41 &IDiaInjectedSource::get_virtualFilename); 42 } 43 getCompression() const44uint32_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 getCode() const51std::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