blob: 76356127f46250240f742a00783d07c30e2301d4 [file] [log] [blame]
Kate Stoneb9c1b512016-09-06 20:57:50 +00001//===-- MinidumpParser.h -----------------------------------------*- C++
2//-*-===//
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +00003//
4// The LLVM Compiler Infrastructure
5//
6// This file is distributed under the University of Illinois Open Source
7// License. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10
11#ifndef liblldb_MinidumpParser_h_
12#define liblldb_MinidumpParser_h_
13
14// Project includes
15#include "MinidumpTypes.h"
16
17// Other libraries and framework includes
18#include "lldb/Core/ArchSpec.h"
19#include "lldb/Core/DataBuffer.h"
20#include "lldb/Core/Error.h"
21
22#include "llvm/ADT/ArrayRef.h"
23#include "llvm/ADT/DenseMap.h"
24#include "llvm/ADT/Optional.h"
Dimitar Vlahovski1d2859e2016-09-13 15:54:38 +000025#include "llvm/ADT/StringRef.h"
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000026
27// C includes
28
29// C++ includes
30#include <cstring>
31#include <unordered_map>
32
Kate Stoneb9c1b512016-09-06 20:57:50 +000033namespace lldb_private {
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000034
Kate Stoneb9c1b512016-09-06 20:57:50 +000035namespace minidump {
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000036
Kate Stoneb9c1b512016-09-06 20:57:50 +000037class MinidumpParser {
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000038public:
Kate Stoneb9c1b512016-09-06 20:57:50 +000039 static llvm::Optional<MinidumpParser>
40 Create(const lldb::DataBufferSP &data_buf_sp);
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000041
Kate Stoneb9c1b512016-09-06 20:57:50 +000042 lldb::offset_t GetByteSize();
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000043
Dimitar Vlahovski1d2859e2016-09-13 15:54:38 +000044 llvm::ArrayRef<uint8_t> GetStream(MinidumpStreamType stream_type);
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000045
Dimitar Vlahovski1d2859e2016-09-13 15:54:38 +000046 llvm::Optional<std::string> GetMinidumpString(uint32_t rva);
47
48 llvm::ArrayRef<MinidumpThread> GetThreads();
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000049
Kate Stoneb9c1b512016-09-06 20:57:50 +000050 const MinidumpSystemInfo *GetSystemInfo();
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000051
Kate Stoneb9c1b512016-09-06 20:57:50 +000052 ArchSpec GetArchitecture();
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000053
Kate Stoneb9c1b512016-09-06 20:57:50 +000054 const MinidumpMiscInfo *GetMiscInfo();
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000055
Dimitar Vlahovski1d2859e2016-09-13 15:54:38 +000056 llvm::Optional<LinuxProcStatus> GetLinuxProcStatus();
57
58 llvm::Optional<lldb::pid_t> GetPid();
59
60 llvm::ArrayRef<MinidumpModule> GetModuleList();
61
62 const MinidumpExceptionStream *GetExceptionStream();
63
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000064private:
Kate Stoneb9c1b512016-09-06 20:57:50 +000065 lldb::DataBufferSP m_data_sp;
66 const MinidumpHeader *m_header;
67 llvm::DenseMap<uint32_t, MinidumpLocationDescriptor> m_directory_map;
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000068
Dimitar Vlahovski1d2859e2016-09-13 15:54:38 +000069 MinidumpParser(
70 const lldb::DataBufferSP &data_buf_sp, const MinidumpHeader *header,
71 llvm::DenseMap<uint32_t, MinidumpLocationDescriptor> &&directory_map);
Dimitar Vlahovski2e50d8e2016-09-01 11:29:53 +000072};
73
74} // namespace minidump
75} // namespace lldb_private
76#endif // liblldb_MinidumpParser_h_