Line data Source code
1 : //===- PDB.cpp - base header file for creating a PDB reader ---------------===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 :
10 : #include "llvm/DebugInfo/PDB/PDB.h"
11 : #include "llvm/ADT/StringRef.h"
12 : #include "llvm/Config/config.h"
13 : #include "llvm/DebugInfo/PDB/GenericError.h"
14 : #if LLVM_ENABLE_DIA_SDK
15 : #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
16 : #endif
17 : #include "llvm/DebugInfo/PDB/Native/NativeSession.h"
18 : #include "llvm/Support/Error.h"
19 : #include "llvm/Support/MemoryBuffer.h"
20 :
21 : using namespace llvm;
22 : using namespace llvm::pdb;
23 :
24 124 : Error llvm::pdb::loadDataForPDB(PDB_ReaderType Type, StringRef Path,
25 : std::unique_ptr<IPDBSession> &Session) {
26 : // Create the correct concrete instance type based on the value of Type.
27 124 : if (Type == PDB_ReaderType::Native) {
28 : ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorOrBuffer =
29 : MemoryBuffer::getFileOrSTDIN(Path, /*FileSize=*/-1,
30 124 : /*RequiresNullTerminator=*/false);
31 124 : if (!ErrorOrBuffer)
32 0 : return errorCodeToError(ErrorOrBuffer.getError());
33 :
34 248 : return NativeSession::createFromPdb(std::move(*ErrorOrBuffer), Session);
35 : }
36 :
37 : #if LLVM_ENABLE_DIA_SDK
38 : return DIASession::createFromPdb(Path, Session);
39 : #else
40 : return make_error<PDBError>(pdb_error_code::dia_sdk_not_present);
41 : #endif
42 : }
43 :
44 0 : Error llvm::pdb::loadDataForEXE(PDB_ReaderType Type, StringRef Path,
45 : std::unique_ptr<IPDBSession> &Session) {
46 : // Create the correct concrete instance type based on the value of Type.
47 0 : if (Type == PDB_ReaderType::Native)
48 0 : return NativeSession::createFromExe(Path, Session);
49 :
50 : #if LLVM_ENABLE_DIA_SDK
51 : return DIASession::createFromExe(Path, Session);
52 : #else
53 : return make_error<PDBError>(pdb_error_code::dia_sdk_not_present);
54 : #endif
55 : }
|