1 | //===-- ObjectFileMinidump.h ---------------------------------- -*- 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-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | /// \file |
10 | /// Placeholder plugin for the save core functionality. |
11 | /// |
12 | /// ObjectFileMinidump is created only to be able to save minidump core files |
13 | /// from existing processes with the ObjectFileMinidump::SaveCore function. |
14 | /// Minidump files are not ObjectFile objects, but they are core files and |
15 | /// currently LLDB's ObjectFile plug-ins handle emitting core files. If the |
16 | /// core file saving ever moves into a new plug-in type within LLDB, this code |
17 | /// should move as well, but for now this is the best place architecturally. |
18 | //===----------------------------------------------------------------------===// |
19 | |
20 | #ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_MINIDUMP_OBJECTFILEMINIDUMP_H |
21 | #define LLDB_SOURCE_PLUGINS_OBJECTFILE_MINIDUMP_OBJECTFILEMINIDUMP_H |
22 | |
23 | #include "lldb/Symbol/ObjectFile.h" |
24 | #include "lldb/Utility/ArchSpec.h" |
25 | |
26 | class ObjectFileMinidump : public lldb_private::PluginInterface { |
27 | public: |
28 | // Static Functions |
29 | static void Initialize(); |
30 | static void Terminate(); |
31 | |
32 | static llvm::StringRef GetPluginNameStatic() { return "minidump" ; } |
33 | static const char *GetPluginDescriptionStatic() { |
34 | return "Minidump object file." ; |
35 | } |
36 | |
37 | // PluginInterface protocol |
38 | llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } |
39 | |
40 | static lldb_private::ObjectFile * |
41 | CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp, |
42 | lldb::offset_t data_offset, const lldb_private::FileSpec *file, |
43 | lldb::offset_t offset, lldb::offset_t length); |
44 | |
45 | static lldb_private::ObjectFile *CreateMemoryInstance( |
46 | const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp, |
47 | const lldb::ProcessSP &process_sp, lldb::addr_t ); |
48 | |
49 | static size_t GetModuleSpecifications(const lldb_private::FileSpec &file, |
50 | lldb::DataBufferSP &data_sp, |
51 | lldb::offset_t data_offset, |
52 | lldb::offset_t file_offset, |
53 | lldb::offset_t length, |
54 | lldb_private::ModuleSpecList &specs); |
55 | |
56 | // Saves dump in Minidump file format |
57 | static bool SaveCore(const lldb::ProcessSP &process_sp, |
58 | const lldb_private::FileSpec &outfile, |
59 | lldb::SaveCoreStyle &core_style, |
60 | lldb_private::Status &error); |
61 | |
62 | private: |
63 | ObjectFileMinidump() = default; |
64 | }; |
65 | |
66 | #endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_MINIDUMP_OBJECTFILEMINIDUMP_H |
67 | |