brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 032b230 Raw
63 lines · cpp
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-exception6//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 15using namespace llvm;16using namespace llvm::pdb;17 18DIAInjectedSource::DIAInjectedSource(CComPtr<IDiaInjectedSource> DiaSourceFile)19    : SourceFile(DiaSourceFile) {}20 21uint32_t DIAInjectedSource::getCrc32() const {22  DWORD Crc;23  return (S_OK == SourceFile->get_crc(&Crc)) ? Crc : 0;24}25 26uint64_t DIAInjectedSource::getCodeByteSize() const {27  ULONGLONG Size;28  return (S_OK == SourceFile->get_length(&Size)) ? Size : 0;29}30 31std::string DIAInjectedSource::getFileName() const {32  return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_filename);33}34 35std::string DIAInjectedSource::getObjectFileName() const {36  return invokeBstrMethod(*SourceFile, &IDiaInjectedSource::get_objectFilename);37}38 39std::string DIAInjectedSource::getVirtualFileName() const {40  return invokeBstrMethod(*SourceFile,41                          &IDiaInjectedSource::get_virtualFilename);42}43 44uint32_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 51std::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