1 //===- DIAInjectedSource.cpp - DIA impl for IPDBInjectedSource --*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
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"
16 using namespace llvm::pdb
;
18 DIAInjectedSource::DIAInjectedSource(CComPtr
<IDiaInjectedSource
> DiaSourceFile
)
19 : SourceFile(DiaSourceFile
) {}
21 uint32_t DIAInjectedSource::getCrc32() const {
23 return (S_OK
== SourceFile
->get_crc(&Crc
)) ? Crc
: 0;
26 uint64_t DIAInjectedSource::getCodeByteSize() const {
28 return (S_OK
== SourceFile
->get_length(&Size
)) ? Size
: 0;
31 std::string
DIAInjectedSource::getFileName() const {
32 return invokeBstrMethod(*SourceFile
, &IDiaInjectedSource::get_filename
);
35 std::string
DIAInjectedSource::getObjectFileName() const {
36 return invokeBstrMethod(*SourceFile
, &IDiaInjectedSource::get_objectFilename
);
39 std::string
DIAInjectedSource::getVirtualFileName() const {
40 return invokeBstrMethod(*SourceFile
,
41 &IDiaInjectedSource::get_virtualFilename
);
44 uint32_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
);
51 std::string
DIAInjectedSource::getCode() const {
53 if (S_OK
!= SourceFile
->get_source(0, &DataSize
, nullptr))
56 std::vector
<uint8_t> Buffer(DataSize
);
57 if (S_OK
!= SourceFile
->get_source(DataSize
, &DataSize
, Buffer
.data()))
59 assert(Buffer
.size() == DataSize
);
60 return std::string(reinterpret_cast<const char *>(Buffer
.data()),