121
|
1 //===- PDB.cpp - base header file for creating a PDB reader ---------------===//
|
83
|
2 //
|
147
|
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
|
83
|
6 //
|
|
7 //===----------------------------------------------------------------------===//
|
|
8
|
|
9 #include "llvm/DebugInfo/PDB/PDB.h"
|
|
10 #include "llvm/ADT/StringRef.h"
|
|
11 #include "llvm/Config/config.h"
|
120
|
12 #include "llvm/DebugInfo/PDB/GenericError.h"
|
121
|
13 #if LLVM_ENABLE_DIA_SDK
|
83
|
14 #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
|
|
15 #endif
|
121
|
16 #include "llvm/DebugInfo/PDB/Native/NativeSession.h"
|
|
17 #include "llvm/Support/Error.h"
|
134
|
18 #include "llvm/Support/MemoryBuffer.h"
|
83
|
19
|
|
20 using namespace llvm;
|
120
|
21 using namespace llvm::pdb;
|
83
|
22
|
120
|
23 Error llvm::pdb::loadDataForPDB(PDB_ReaderType Type, StringRef Path,
|
|
24 std::unique_ptr<IPDBSession> &Session) {
|
83
|
25 // Create the correct concrete instance type based on the value of Type.
|
121
|
26 if (Type == PDB_ReaderType::Native) {
|
|
27 ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorOrBuffer =
|
|
28 MemoryBuffer::getFileOrSTDIN(Path, /*FileSize=*/-1,
|
|
29 /*RequiresNullTerminator=*/false);
|
|
30 if (!ErrorOrBuffer)
|
147
|
31 return errorCodeToError(ErrorOrBuffer.getError());
|
120
|
32
|
121
|
33 return NativeSession::createFromPdb(std::move(*ErrorOrBuffer), Session);
|
|
34 }
|
|
35
|
|
36 #if LLVM_ENABLE_DIA_SDK
|
95
|
37 return DIASession::createFromPdb(Path, Session);
|
120
|
38 #else
|
147
|
39 return make_error<PDBError>(pdb_error_code::dia_sdk_not_present);
|
83
|
40 #endif
|
|
41 }
|
95
|
42
|
120
|
43 Error llvm::pdb::loadDataForEXE(PDB_ReaderType Type, StringRef Path,
|
|
44 std::unique_ptr<IPDBSession> &Session) {
|
100
|
45 // Create the correct concrete instance type based on the value of Type.
|
121
|
46 if (Type == PDB_ReaderType::Native)
|
|
47 return NativeSession::createFromExe(Path, Session);
|
120
|
48
|
121
|
49 #if LLVM_ENABLE_DIA_SDK
|
95
|
50 return DIASession::createFromExe(Path, Session);
|
120
|
51 #else
|
147
|
52 return make_error<PDBError>(pdb_error_code::dia_sdk_not_present);
|
95
|
53 #endif
|
|
54 }
|