1//===-- ProcessMachCore.h ---------------------------------------*- C++ -*-===//
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#ifndef liblldb_ProcessMachCore_h_
11#define liblldb_ProcessMachCore_h_
12
13// C Includes
14
15// C++ Includes
16#include <list>
17#include <vector>
18
19// Other libraries and framework includes
20#include "lldb/Core/ConstString.h"
21#include "lldb/Core/Error.h"
22#include "lldb/Target/Process.h"
23
24class ThreadKDP;
25
26class ProcessMachCore : public lldb_private::Process
27{
28public:
29    //------------------------------------------------------------------
30    // Constructors and Destructors
31    //------------------------------------------------------------------
32    static lldb::ProcessSP
33    CreateInstance (lldb_private::Target& target,
34                    lldb_private::Listener &listener,
35                    const lldb_private::FileSpec *crash_file_path);
36
37    static void
38    Initialize();
39
40    static void
41    Terminate();
42
43    static lldb_private::ConstString
44    GetPluginNameStatic();
45
46    static const char *
47    GetPluginDescriptionStatic();
48
49    //------------------------------------------------------------------
50    // Constructors and Destructors
51    //------------------------------------------------------------------
52    ProcessMachCore(lldb_private::Target& target,
53                    lldb_private::Listener &listener,
54                    const lldb_private::FileSpec &core_file);
55
56    virtual
57    ~ProcessMachCore();
58
59    //------------------------------------------------------------------
60    // Check if a given Process
61    //------------------------------------------------------------------
62    virtual bool
63    CanDebug (lldb_private::Target &target,
64              bool plugin_specified_by_name);
65
66    //------------------------------------------------------------------
67    // Creating a new process, or attaching to an existing one
68    //------------------------------------------------------------------
69    virtual lldb_private::Error
70    DoLoadCore ();
71
72    virtual lldb_private::DynamicLoader *
73    GetDynamicLoader ();
74
75    //------------------------------------------------------------------
76    // PluginInterface protocol
77    //------------------------------------------------------------------
78    virtual lldb_private::ConstString
79    GetPluginName();
80
81    virtual uint32_t
82    GetPluginVersion();
83
84    //------------------------------------------------------------------
85    // Process Control
86    //------------------------------------------------------------------
87    virtual lldb_private::Error
88    DoDestroy ();
89
90    virtual void
91    RefreshStateAfterStop();
92
93    //------------------------------------------------------------------
94    // Process Queries
95    //------------------------------------------------------------------
96    virtual bool
97    IsAlive ();
98
99    virtual bool
100    WarnBeforeDetach () const;
101
102    //------------------------------------------------------------------
103    // Process Memory
104    //------------------------------------------------------------------
105    virtual size_t
106    ReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error);
107
108    virtual size_t
109    DoReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error);
110
111    virtual lldb::addr_t
112    GetImageInfoAddress ();
113
114protected:
115    friend class ThreadMachCore;
116
117    void
118    Clear ( );
119
120    virtual bool
121    UpdateThreadList (lldb_private::ThreadList &old_thread_list,
122                      lldb_private::ThreadList &new_thread_list);
123
124    lldb_private::ObjectFile *
125    GetCoreObjectFile ();
126private:
127    bool
128    GetDynamicLoaderAddress (lldb::addr_t addr);
129
130    //------------------------------------------------------------------
131    // For ProcessMachCore only
132    //------------------------------------------------------------------
133    typedef lldb_private::Range<lldb::addr_t, lldb::addr_t> FileRange;
134    typedef lldb_private::RangeDataVector<lldb::addr_t, lldb::addr_t, FileRange> VMRangeToFileOffset;
135
136    VMRangeToFileOffset m_core_aranges;
137    lldb::ModuleSP m_core_module_sp;
138    lldb_private::FileSpec m_core_file;
139    lldb::addr_t m_dyld_addr;
140    lldb_private::ConstString m_dyld_plugin_name;
141    DISALLOW_COPY_AND_ASSIGN (ProcessMachCore);
142
143};
144
145#endif  // liblldb_ProcessMachCore_h_
146