blob: 01905c6192a2a0642f392442d26e83fbbca2fb9e [file] [log] [blame]
//===-- ProcessMacOSXRemote.h -----------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//----------------------------------------------------------------------
//
// ProcessMacOSXRemote.h
// liblldb
//
// Created by Greg Clayton on 4/21/09.
//
//
//----------------------------------------------------------------------
#ifndef liblldb_ProcessMacOSXRemote_H_
#define liblldb_ProcessMacOSXRemote_H_
// C Includes
// C++ Includes
#include <list>
// Other libraries and framework includes
#include "lldb/Target/Process.h"
#include "lldb/Target/Thread.h"
class ThreadMacOSXRemote;
class ProcessMacOSXRemote :
public Process
{
public:
friend class ThreadMacOSX;
//------------------------------------------------------------------
// Constructors and Destructors
//------------------------------------------------------------------
ProcessMacOSXRemote(Target& target);
virtual ~DCProcessMacOSXRemote();
static Process* CreateInstance (Target& target);
//------------------------------------------------------------------
// Check if a given Process
//------------------------------------------------------------------
virtual bool CanDebug(Target &target);
//------------------------------------------------------------------
// Creating a new process, or attaching to an existing one
//------------------------------------------------------------------
virtual lldb::pid_t DoLaunch (Module* module,
char const *argv[], // Can be NULL
char const *envp[], // Can be NULL
const char *stdin_path, // Can be NULL
const char *stdout_path, // Can be NULL
const char *stderr_path); // Can be NULL
virtual void DidLaunch ();
virtual lldb::pid_t DoAttach (lldb::pid_t pid);
virtual void DidAttach ();
//------------------------------------------------------------------
// Process Control
//------------------------------------------------------------------
// virtual bool WillResume ();
virtual bool DoResume ();
// virtual void DidResume ();
virtual bool DoHalt ();
virtual bool WillDetach ();
virtual bool DoDetach ();
virtual bool DoKill (int signal);
virtual bool ShouldStop ();
//------------------------------------------------------------------
// Process Queries
//------------------------------------------------------------------
virtual bool IsAlive ();
virtual bool IsRunning ();
virtual lldb::addr_t GetImageInfoAddress();
//------------------------------------------------------------------
// Process Memory
//------------------------------------------------------------------
virtual size_t DoReadMemory (lldb::addr_t addr, void *buf, size_t size);
virtual size_t DoWriteMemory (lldb::addr_t addr, const void *buf, size_t size);
//------------------------------------------------------------------
// Process STDIO
//------------------------------------------------------------------
virtual size_t GetSTDOUT (char *buf, size_t buf_size);
virtual size_t GetSTDERR (char *buf, size_t buf_size);
//----------------------------------------------------------------------
// Process Breakpoints
//----------------------------------------------------------------------
virtual size_t
GetSoftwareBreakpointTrapOpcode (lldb::BreakpointSite *bp_site);
//----------------------------------------------------------------------
// Process Breakpoints
//----------------------------------------------------------------------
virtual bool
EnableBreakpoint (lldb::BreakpointSite *bp_site);
virtual bool
DisableBreakpoint (lldb::BreakpointSite *bp_site);
//----------------------------------------------------------------------
// Process Watchpoints
//----------------------------------------------------------------------
virtual bool EnableWatchpoint (WatchpointLocation *wp_loc);
virtual bool DisableWatchpoint (WatchpointLocation *wp_loc);
//------------------------------------------------------------------
// Thread Queries
//------------------------------------------------------------------
virtual Thread * GetCurrentThread ();
virtual bool SetCurrentThread (lldb::tid_t tid);
virtual Thread * GetThreadAtIndex (uint32_t idx);
virtual Thread * GetThreadByID (lldb::tid_t tid);
virtual size_t GetNumThreads ();
virtual ByteOrder GetByteOrder () const;
virtual DynamicLoader *
GetDynamicLoader ();
protected:
Flags m_flags; // Process specific flags (see eFlags enums)
ArchSpec m_arch_spec;
std::auto_ptr<DynamicLoader> m_dynamic_loader_ap;
ByteOrder m_byte_order;
//----------------------------------------------------------------------
// Accessors
//----------------------------------------------------------------------
bool
ProcessIDIsValid ( ) const;
bool
IsRunning ( State state )
{
return state == eStateRunning || IsStepping(state);
}
bool
IsStepping ( State state)
{
return state == eStateStepping;
}
bool
CanResume ( State state)
{
return state == eStateStopped;
}
ArchSpec&
GetArchSpec()
{
return m_arch_spec;
}
const ArchSpec&
GetArchSpec() const
{
return m_arch_spec;
}
enum
{
eFlagsNone = 0,
eFlagsAttached = (1 << 0),
eFlagsUsingSBS = (1 << 1)
};
void
Clear ( );
Flags &
GetFlags ()
{
return m_flags;
}
const Flags &
GetFlags () const
{
return m_flags;
}
uint32_t
UpdateThreadListIfNeeded ();
private:
//------------------------------------------------------------------
// For ProcessMacOSXRemote only
//------------------------------------------------------------------
DISALLOW_COPY_AND_ASSIGN (ProcessMacOSXRemote);
};
#endif // liblldb_ProcessMacOSXRemote_H_