xref: /llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIAInjectedSource.cpp (revision 7bb5fc058314dba81dd652d8dcc74e133db0b445)
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 Kleckner DIAInjectedSource::DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile)
198562c1a1SReid Kleckner     : SourceFile(DiaSourceFile) {}
20679aeaddSZachary Turner 
getCrc32() const21679aeaddSZachary Turner uint32_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 Turner uint64_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 Turner std::string DIAInjectedSource::getFileName() const {
32679aeaddSZachary Turner   return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_filename);
33679aeaddSZachary Turner }
34679aeaddSZachary Turner 
getObjectFileName() const35679aeaddSZachary Turner std::string DIAInjectedSource::getObjectFileName() const {
36679aeaddSZachary Turner   return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_objectFilename);
37679aeaddSZachary Turner }
38679aeaddSZachary Turner 
getVirtualFileName() const39679aeaddSZachary Turner std::string DIAInjectedSource::getVirtualFileName() const {
40679aeaddSZachary Turner   return invokeBstrMethod(*SourceFile,
41679aeaddSZachary Turner                           &IDiaInjectedSource::get_virtualFilename);
42679aeaddSZachary Turner }
43679aeaddSZachary Turner 
getCompression() const44*7bb5fc05SNico Weber uint32_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 Turner std::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