Home | History | Annotate | Download | only in mach-core
      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 
     24 class ThreadKDP;
     25 
     26 class ProcessMachCore : public lldb_private::Process
     27 {
     28 public:
     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 
    114 protected:
    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 ();
    126 private:
    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