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