146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//===-- ProcessMachCore.h ---------------------------------------*- C++ -*-===//
246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//
346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//                     The LLVM Compiler Infrastructure
446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//
546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton// This file is distributed under the University of Illinois Open Source
646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton// License. See LICENSE.TXT for details.
746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//
846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//===----------------------------------------------------------------------===//
946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#ifndef liblldb_ProcessMachCore_h_
1146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#define liblldb_ProcessMachCore_h_
1246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton// C Includes
1446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton// C++ Includes
1646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#include <list>
1746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#include <vector>
1846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton// Other libraries and framework includes
20f0c0882ff3fd98456c1814b495888092da2f13f6Jason Molenda#include "lldb/Core/ConstString.h"
2146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#include "lldb/Core/Error.h"
2246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#include "lldb/Target/Process.h"
2346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
2446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonclass ThreadKDP;
2546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
2646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonclass ProcessMachCore : public lldb_private::Process
2746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton{
2846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonpublic:
2946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
3046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Constructors and Destructors
3146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
3246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    static lldb::ProcessSP
3346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    CreateInstance (lldb_private::Target& target,
3446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                    lldb_private::Listener &listener,
3546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                    const lldb_private::FileSpec *crash_file_path);
3646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
3746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    static void
3846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    Initialize();
3946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
4046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    static void
4146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    Terminate();
4246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
430e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    static lldb_private::ConstString
4446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetPluginNameStatic();
4546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
4646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    static const char *
4746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetPluginDescriptionStatic();
4846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
4946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
5046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Constructors and Destructors
5146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
5246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    ProcessMachCore(lldb_private::Target& target,
5346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                    lldb_private::Listener &listener,
5446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                    const lldb_private::FileSpec &core_file);
5546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
5646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual
5746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    ~ProcessMachCore();
5846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
5946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
6046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Check if a given Process
6146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
6246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual bool
6346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    CanDebug (lldb_private::Target &target,
6446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton              bool plugin_specified_by_name);
6546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
6646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
6746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Creating a new process, or attaching to an existing one
6846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
6946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual lldb_private::Error
7046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    DoLoadCore ();
7146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
729ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    virtual lldb_private::DynamicLoader *
739ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    GetDynamicLoader ();
749ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton
7546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
7646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // PluginInterface protocol
7746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
780e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    virtual lldb_private::ConstString
7946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetPluginName();
8046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
8146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual uint32_t
8246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetPluginVersion();
8346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
8446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
8546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Process Control
8646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
8746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual lldb_private::Error
8846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    DoDestroy ();
8946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
9046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual void
9146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    RefreshStateAfterStop();
9246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
9346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
9446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Process Queries
9546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
9646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual bool
9746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    IsAlive ();
98ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda
99ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda    virtual bool
100ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda    WarnBeforeDetach () const;
101ba065cab7acc8ef7fbedc27af5d18c3a694a084aJason Molenda
10246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
10346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Process Memory
10446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
10546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual size_t
1069ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error);
1079ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton
1089ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    virtual size_t
10946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    DoReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error);
11046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
11146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual lldb::addr_t
11246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetImageInfoAddress ();
11346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
11446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonprotected:
11546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    friend class ThreadMachCore;
11646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
11746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    void
11846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    Clear ( );
11946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
120ae932359b80098532f3c3766fa9e6527352fbb67Greg Clayton    virtual bool
12146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    UpdateThreadList (lldb_private::ThreadList &old_thread_list,
12246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                      lldb_private::ThreadList &new_thread_list);
12346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
12446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    lldb_private::ObjectFile *
12549ce8969d3154e1560106cfe530444c09410f217Greg Clayton    GetCoreObjectFile ();
12646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonprivate:
1279ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    bool
1289ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    GetDynamicLoaderAddress (lldb::addr_t addr);
1299ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton
13046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
13146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // For ProcessMachCore only
13246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
1339716719e6181060e33ddbb16695704d08be1c14fGreg Clayton    typedef lldb_private::Range<lldb::addr_t, lldb::addr_t> FileRange;
134464a5063bc59755cb6ec063d0b2491097302d2abGreg Clayton    typedef lldb_private::RangeDataVector<lldb::addr_t, lldb::addr_t, FileRange> VMRangeToFileOffset;
13546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
13646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    VMRangeToFileOffset m_core_aranges;
13746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    lldb::ModuleSP m_core_module_sp;
13846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    lldb_private::FileSpec m_core_file;
1399ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    lldb::addr_t m_dyld_addr;
140f0c0882ff3fd98456c1814b495888092da2f13f6Jason Molenda    lldb_private::ConstString m_dyld_plugin_name;
14146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    DISALLOW_COPY_AND_ASSIGN (ProcessMachCore);
14246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
14346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton};
14446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
14546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#endif  // liblldb_ProcessMachCore_h_
146