Home | History | Annotate | Download | only in Target
      1 //===-- Process.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_Process_h_
     11 #define liblldb_Process_h_
     12 
     13 // C Includes
     14 #include <limits.h>
     15 #include <spawn.h>
     16 
     17 // C++ Includes
     18 #include <list>
     19 #include <iosfwd>
     20 #include <vector>
     21 
     22 // Other libraries and framework includes
     23 // Project includes
     24 #include "lldb/lldb-private.h"
     25 #include "lldb/Core/ArchSpec.h"
     26 #include "lldb/Core/Broadcaster.h"
     27 #include "lldb/Core/Communication.h"
     28 #include "lldb/Core/Error.h"
     29 #include "lldb/Core/Event.h"
     30 #include "lldb/Core/RangeMap.h"
     31 #include "lldb/Core/StringList.h"
     32 #include "lldb/Core/ThreadSafeValue.h"
     33 #include "lldb/Core/PluginInterface.h"
     34 #include "lldb/Core/UserSettingsController.h"
     35 #include "lldb/Breakpoint/BreakpointSiteList.h"
     36 #include "lldb/Expression/ClangPersistentVariables.h"
     37 #include "lldb/Expression/IRDynamicChecks.h"
     38 #include "lldb/Host/FileSpec.h"
     39 #include "lldb/Host/Host.h"
     40 #include "lldb/Host/ProcessRunLock.h"
     41 #include "lldb/Interpreter/Args.h"
     42 #include "lldb/Interpreter/Options.h"
     43 #include "lldb/Target/ExecutionContextScope.h"
     44 #include "lldb/Target/Memory.h"
     45 #include "lldb/Target/ThreadList.h"
     46 #include "lldb/Target/UnixSignals.h"
     47 #include "lldb/Utility/PseudoTerminal.h"
     48 
     49 namespace lldb_private {
     50 
     51 //----------------------------------------------------------------------
     52 // ProcessProperties
     53 //----------------------------------------------------------------------
     54 class ProcessProperties : public Properties
     55 {
     56 public:
     57     ProcessProperties(bool is_global);
     58 
     59     virtual
     60     ~ProcessProperties();
     61 
     62     bool
     63     GetDisableMemoryCache() const;
     64 
     65     Args
     66     GetExtraStartupCommands () const;
     67 
     68     void
     69     SetExtraStartupCommands (const Args &args);
     70 
     71     FileSpec
     72     GetPythonOSPluginPath () const;
     73 
     74     void
     75     SetPythonOSPluginPath (const FileSpec &file);
     76 
     77     bool
     78     GetIgnoreBreakpointsInExpressions () const;
     79 
     80     void
     81     SetIgnoreBreakpointsInExpressions (bool ignore);
     82 
     83     bool
     84     GetUnwindOnErrorInExpressions () const;
     85 
     86     void
     87     SetUnwindOnErrorInExpressions (bool ignore);
     88 
     89     bool
     90     GetStopOnSharedLibraryEvents () const;
     91 
     92     void
     93     SetStopOnSharedLibraryEvents (bool stop);
     94 
     95     bool
     96     GetDetachKeepsStopped () const;
     97 
     98     void
     99     SetDetachKeepsStopped (bool keep_stopped);
    100 };
    101 
    102 typedef std::shared_ptr<ProcessProperties> ProcessPropertiesSP;
    103 
    104 //----------------------------------------------------------------------
    105 // ProcessInfo
    106 //
    107 // A base class for information for a process. This can be used to fill
    108 // out information for a process prior to launching it, or it can be
    109 // used for an instance of a process and can be filled in with the
    110 // existing values for that process.
    111 //----------------------------------------------------------------------
    112 class ProcessInfo
    113 {
    114 public:
    115     ProcessInfo () :
    116         m_executable (),
    117         m_arguments (),
    118         m_environment (),
    119         m_uid (UINT32_MAX),
    120         m_gid (UINT32_MAX),
    121         m_arch(),
    122         m_pid (LLDB_INVALID_PROCESS_ID)
    123     {
    124     }
    125 
    126     ProcessInfo (const char *name,
    127                  const ArchSpec &arch,
    128                  lldb::pid_t pid) :
    129         m_executable (name, false),
    130         m_arguments (),
    131         m_environment(),
    132         m_uid (UINT32_MAX),
    133         m_gid (UINT32_MAX),
    134         m_arch (arch),
    135         m_pid (pid)
    136     {
    137     }
    138 
    139     void
    140     Clear ()
    141     {
    142         m_executable.Clear();
    143         m_arguments.Clear();
    144         m_environment.Clear();
    145         m_uid = UINT32_MAX;
    146         m_gid = UINT32_MAX;
    147         m_arch.Clear();
    148         m_pid = LLDB_INVALID_PROCESS_ID;
    149     }
    150 
    151     const char *
    152     GetName() const
    153     {
    154         return m_executable.GetFilename().GetCString();
    155     }
    156 
    157     size_t
    158     GetNameLength() const
    159     {
    160         return m_executable.GetFilename().GetLength();
    161     }
    162 
    163     FileSpec &
    164     GetExecutableFile ()
    165     {
    166         return m_executable;
    167     }
    168 
    169     void
    170     SetExecutableFile (const FileSpec &exe_file, bool add_exe_file_as_first_arg)
    171     {
    172         if (exe_file)
    173         {
    174             m_executable = exe_file;
    175             if (add_exe_file_as_first_arg)
    176             {
    177                 char filename[PATH_MAX];
    178                 if (exe_file.GetPath(filename, sizeof(filename)))
    179                     m_arguments.InsertArgumentAtIndex (0, filename);
    180             }
    181         }
    182         else
    183         {
    184             m_executable.Clear();
    185         }
    186     }
    187 
    188     const FileSpec &
    189     GetExecutableFile () const
    190     {
    191         return m_executable;
    192     }
    193 
    194     uint32_t
    195     GetUserID() const
    196     {
    197         return m_uid;
    198     }
    199 
    200     uint32_t
    201     GetGroupID() const
    202     {
    203         return m_gid;
    204     }
    205 
    206     bool
    207     UserIDIsValid () const
    208     {
    209         return m_uid != UINT32_MAX;
    210     }
    211 
    212     bool
    213     GroupIDIsValid () const
    214     {
    215         return m_gid != UINT32_MAX;
    216     }
    217 
    218     void
    219     SetUserID (uint32_t uid)
    220     {
    221         m_uid = uid;
    222     }
    223 
    224     void
    225     SetGroupID (uint32_t gid)
    226     {
    227         m_gid = gid;
    228     }
    229 
    230     ArchSpec &
    231     GetArchitecture ()
    232     {
    233         return m_arch;
    234     }
    235 
    236     const ArchSpec &
    237     GetArchitecture () const
    238     {
    239         return m_arch;
    240     }
    241 
    242     lldb::pid_t
    243     GetProcessID () const
    244     {
    245         return m_pid;
    246     }
    247 
    248     void
    249     SetProcessID (lldb::pid_t pid)
    250     {
    251         m_pid = pid;
    252     }
    253 
    254     bool
    255     ProcessIDIsValid() const
    256     {
    257         return m_pid != LLDB_INVALID_PROCESS_ID;
    258     }
    259 
    260     void
    261     Dump (Stream &s, Platform *platform) const;
    262 
    263     Args &
    264     GetArguments ()
    265     {
    266         return m_arguments;
    267     }
    268 
    269     const Args &
    270     GetArguments () const
    271     {
    272         return m_arguments;
    273     }
    274 
    275     const char *
    276     GetArg0 () const
    277     {
    278         if (m_arg0.empty())
    279             return NULL;
    280         return m_arg0.c_str();
    281     }
    282 
    283     void
    284     SetArg0 (const char *arg)
    285     {
    286         if (arg && arg[0])
    287             m_arg0 = arg;
    288         else
    289             m_arg0.clear();
    290     }
    291 
    292     void
    293     SetArguments (const Args& args, bool first_arg_is_executable);
    294 
    295     void
    296     SetArguments (char const **argv, bool first_arg_is_executable);
    297 
    298     Args &
    299     GetEnvironmentEntries ()
    300     {
    301         return m_environment;
    302     }
    303 
    304     const Args &
    305     GetEnvironmentEntries () const
    306     {
    307         return m_environment;
    308     }
    309 
    310 protected:
    311     FileSpec m_executable;
    312     std::string m_arg0; // argv[0] if supported. If empty, then use m_executable.
    313                         // Not all process plug-ins support specifying an argv[0]
    314                         // that differs from the resolved platform executable
    315                         // (which is in m_executable)
    316     Args m_arguments;   // All program arguments except argv[0]
    317     Args m_environment;
    318     uint32_t m_uid;
    319     uint32_t m_gid;
    320     ArchSpec m_arch;
    321     lldb::pid_t m_pid;
    322 };
    323 
    324 //----------------------------------------------------------------------
    325 // ProcessInstanceInfo
    326 //
    327 // Describes an existing process and any discoverable information that
    328 // pertains to that process.
    329 //----------------------------------------------------------------------
    330 class ProcessInstanceInfo : public ProcessInfo
    331 {
    332 public:
    333     ProcessInstanceInfo () :
    334         ProcessInfo (),
    335         m_euid (UINT32_MAX),
    336         m_egid (UINT32_MAX),
    337         m_parent_pid (LLDB_INVALID_PROCESS_ID)
    338     {
    339     }
    340 
    341     ProcessInstanceInfo (const char *name,
    342                  const ArchSpec &arch,
    343                  lldb::pid_t pid) :
    344         ProcessInfo (name, arch, pid),
    345         m_euid (UINT32_MAX),
    346         m_egid (UINT32_MAX),
    347         m_parent_pid (LLDB_INVALID_PROCESS_ID)
    348     {
    349     }
    350 
    351     void
    352     Clear ()
    353     {
    354         ProcessInfo::Clear();
    355         m_euid = UINT32_MAX;
    356         m_egid = UINT32_MAX;
    357         m_parent_pid = LLDB_INVALID_PROCESS_ID;
    358     }
    359 
    360     uint32_t
    361     GetEffectiveUserID() const
    362     {
    363         return m_euid;
    364     }
    365 
    366     uint32_t
    367     GetEffectiveGroupID() const
    368     {
    369         return m_egid;
    370     }
    371 
    372     bool
    373     EffectiveUserIDIsValid () const
    374     {
    375         return m_euid != UINT32_MAX;
    376     }
    377 
    378     bool
    379     EffectiveGroupIDIsValid () const
    380     {
    381         return m_egid != UINT32_MAX;
    382     }
    383 
    384     void
    385     SetEffectiveUserID (uint32_t uid)
    386     {
    387         m_euid = uid;
    388     }
    389 
    390     void
    391     SetEffectiveGroupID (uint32_t gid)
    392     {
    393         m_egid = gid;
    394     }
    395 
    396     lldb::pid_t
    397     GetParentProcessID () const
    398     {
    399         return m_parent_pid;
    400     }
    401 
    402     void
    403     SetParentProcessID (lldb::pid_t pid)
    404     {
    405         m_parent_pid = pid;
    406     }
    407 
    408     bool
    409     ParentProcessIDIsValid() const
    410     {
    411         return m_parent_pid != LLDB_INVALID_PROCESS_ID;
    412     }
    413 
    414     void
    415     Dump (Stream &s, Platform *platform) const;
    416 
    417     static void
    418     DumpTableHeader (Stream &s, Platform *platform, bool show_args, bool verbose);
    419 
    420     void
    421     DumpAsTableRow (Stream &s, Platform *platform, bool show_args, bool verbose) const;
    422 
    423 protected:
    424     uint32_t m_euid;
    425     uint32_t m_egid;
    426     lldb::pid_t m_parent_pid;
    427 };
    428 
    429 
    430 //----------------------------------------------------------------------
    431 // ProcessLaunchInfo
    432 //
    433 // Describes any information that is required to launch a process.
    434 //----------------------------------------------------------------------
    435 
    436 class ProcessLaunchInfo : public ProcessInfo
    437 {
    438 public:
    439 
    440     class FileAction
    441     {
    442     public:
    443         enum Action
    444         {
    445             eFileActionNone,
    446             eFileActionClose,
    447             eFileActionDuplicate,
    448             eFileActionOpen
    449         };
    450 
    451 
    452         FileAction () :
    453             m_action (eFileActionNone),
    454             m_fd (-1),
    455             m_arg (-1),
    456             m_path ()
    457         {
    458         }
    459 
    460         void
    461         Clear()
    462         {
    463             m_action = eFileActionNone;
    464             m_fd = -1;
    465             m_arg = -1;
    466             m_path.clear();
    467         }
    468 
    469         bool
    470         Close (int fd);
    471 
    472         bool
    473         Duplicate (int fd, int dup_fd);
    474 
    475         bool
    476         Open (int fd, const char *path, bool read, bool write);
    477 
    478         static bool
    479         AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions,
    480                                  const FileAction *info,
    481                                  Log *log,
    482                                  Error& error);
    483 
    484         int
    485         GetFD () const
    486         {
    487             return m_fd;
    488         }
    489 
    490         Action
    491         GetAction () const
    492         {
    493             return m_action;
    494         }
    495 
    496         int
    497         GetActionArgument () const
    498         {
    499             return m_arg;
    500         }
    501 
    502         const char *
    503         GetPath () const
    504         {
    505             if (m_path.empty())
    506                 return NULL;
    507             return m_path.c_str();
    508         }
    509 
    510     protected:
    511         Action m_action;    // The action for this file
    512         int m_fd;           // An existing file descriptor
    513         int m_arg;          // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate
    514         std::string m_path; // A file path to use for opening after fork or posix_spawn
    515     };
    516 
    517     ProcessLaunchInfo () :
    518         ProcessInfo(),
    519         m_working_dir (),
    520         m_plugin_name (),
    521         m_shell (),
    522         m_flags (0),
    523         m_file_actions (),
    524         m_pty (),
    525         m_resume_count (0),
    526         m_monitor_callback (NULL),
    527         m_monitor_callback_baton (NULL),
    528         m_monitor_signals (false)
    529     {
    530     }
    531 
    532     ProcessLaunchInfo (const char *stdin_path,
    533                        const char *stdout_path,
    534                        const char *stderr_path,
    535                        const char *working_directory,
    536                        uint32_t launch_flags) :
    537         ProcessInfo(),
    538         m_working_dir (),
    539         m_plugin_name (),
    540         m_shell (),
    541         m_flags (launch_flags),
    542         m_file_actions (),
    543         m_pty (),
    544         m_resume_count (0),
    545         m_monitor_callback (NULL),
    546         m_monitor_callback_baton (NULL),
    547         m_monitor_signals (false)
    548     {
    549         if (stdin_path)
    550         {
    551             ProcessLaunchInfo::FileAction file_action;
    552             const bool read = true;
    553             const bool write = false;
    554             if (file_action.Open(STDIN_FILENO, stdin_path, read, write))
    555                 AppendFileAction (file_action);
    556         }
    557         if (stdout_path)
    558         {
    559             ProcessLaunchInfo::FileAction file_action;
    560             const bool read = false;
    561             const bool write = true;
    562             if (file_action.Open(STDOUT_FILENO, stdout_path, read, write))
    563                 AppendFileAction (file_action);
    564         }
    565         if (stderr_path)
    566         {
    567             ProcessLaunchInfo::FileAction file_action;
    568             const bool read = false;
    569             const bool write = true;
    570             if (file_action.Open(STDERR_FILENO, stderr_path, read, write))
    571                 AppendFileAction (file_action);
    572         }
    573         if (working_directory)
    574             SetWorkingDirectory(working_directory);
    575     }
    576 
    577     void
    578     AppendFileAction (const FileAction &info)
    579     {
    580         m_file_actions.push_back(info);
    581     }
    582 
    583     bool
    584     AppendCloseFileAction (int fd)
    585     {
    586         FileAction file_action;
    587         if (file_action.Close (fd))
    588         {
    589             AppendFileAction (file_action);
    590             return true;
    591         }
    592         return false;
    593     }
    594 
    595     bool
    596     AppendDuplicateFileAction (int fd, int dup_fd)
    597     {
    598         FileAction file_action;
    599         if (file_action.Duplicate (fd, dup_fd))
    600         {
    601             AppendFileAction (file_action);
    602             return true;
    603         }
    604         return false;
    605     }
    606 
    607     bool
    608     AppendOpenFileAction (int fd, const char *path, bool read, bool write)
    609     {
    610         FileAction file_action;
    611         if (file_action.Open (fd, path, read, write))
    612         {
    613             AppendFileAction (file_action);
    614             return true;
    615         }
    616         return false;
    617     }
    618 
    619     bool
    620     AppendSuppressFileAction (int fd, bool read, bool write)
    621     {
    622         FileAction file_action;
    623         if (file_action.Open (fd, "/dev/null", read, write))
    624         {
    625             AppendFileAction (file_action);
    626             return true;
    627         }
    628         return false;
    629     }
    630 
    631     void
    632     FinalizeFileActions (Target *target,
    633                          bool default_to_use_pty);
    634 
    635     size_t
    636     GetNumFileActions () const
    637     {
    638         return m_file_actions.size();
    639     }
    640 
    641     const FileAction *
    642     GetFileActionAtIndex (size_t idx) const
    643     {
    644         if (idx < m_file_actions.size())
    645             return &m_file_actions[idx];
    646         return NULL;
    647     }
    648 
    649     const FileAction *
    650     GetFileActionForFD (int fd) const
    651     {
    652         for (size_t idx=0, count=m_file_actions.size(); idx < count; ++idx)
    653         {
    654             if (m_file_actions[idx].GetFD () == fd)
    655                 return &m_file_actions[idx];
    656         }
    657         return NULL;
    658     }
    659 
    660     Flags &
    661     GetFlags ()
    662     {
    663         return m_flags;
    664     }
    665 
    666     const Flags &
    667     GetFlags () const
    668     {
    669         return m_flags;
    670     }
    671 
    672     const char *
    673     GetWorkingDirectory () const
    674     {
    675         if (m_working_dir.empty())
    676             return NULL;
    677         return m_working_dir.c_str();
    678     }
    679 
    680     void
    681     SetWorkingDirectory (const char *working_dir)
    682     {
    683         if (working_dir && working_dir[0])
    684             m_working_dir.assign (working_dir);
    685         else
    686             m_working_dir.clear();
    687     }
    688 
    689     void
    690     SwapWorkingDirectory (std::string &working_dir)
    691     {
    692         m_working_dir.swap (working_dir);
    693     }
    694 
    695 
    696     const char *
    697     GetProcessPluginName () const
    698     {
    699         if (m_plugin_name.empty())
    700             return NULL;
    701         return m_plugin_name.c_str();
    702     }
    703 
    704     void
    705     SetProcessPluginName (const char *plugin)
    706     {
    707         if (plugin && plugin[0])
    708             m_plugin_name.assign (plugin);
    709         else
    710             m_plugin_name.clear();
    711     }
    712 
    713     const char *
    714     GetShell () const
    715     {
    716         if (m_shell.empty())
    717             return NULL;
    718         return m_shell.c_str();
    719     }
    720 
    721     void
    722     SetShell (const char * path)
    723     {
    724         if (path && path[0])
    725         {
    726             m_shell.assign (path);
    727             m_flags.Set (lldb::eLaunchFlagLaunchInShell);
    728         }
    729         else
    730         {
    731             m_shell.clear();
    732             m_flags.Clear (lldb::eLaunchFlagLaunchInShell);
    733         }
    734     }
    735 
    736     uint32_t
    737     GetResumeCount () const
    738     {
    739         return m_resume_count;
    740     }
    741 
    742     void
    743     SetResumeCount (uint32_t c)
    744     {
    745         m_resume_count = c;
    746     }
    747 
    748     bool
    749     GetLaunchInSeparateProcessGroup ()
    750     {
    751         return m_flags.Test(lldb::eLaunchFlagLaunchInSeparateProcessGroup);
    752     }
    753 
    754     void
    755     SetLaunchInSeparateProcessGroup (bool separate)
    756     {
    757         if (separate)
    758             m_flags.Set(lldb::eLaunchFlagLaunchInSeparateProcessGroup);
    759         else
    760             m_flags.Clear (lldb::eLaunchFlagLaunchInSeparateProcessGroup);
    761 
    762     }
    763 
    764     void
    765     Clear ()
    766     {
    767         ProcessInfo::Clear();
    768         m_working_dir.clear();
    769         m_plugin_name.clear();
    770         m_shell.clear();
    771         m_flags.Clear();
    772         m_file_actions.clear();
    773         m_resume_count = 0;
    774     }
    775 
    776     bool
    777     ConvertArgumentsForLaunchingInShell (Error &error,
    778                                          bool localhost,
    779                                          bool will_debug,
    780                                          bool first_arg_is_full_shell_command);
    781 
    782     void
    783     SetMonitorProcessCallback (Host::MonitorChildProcessCallback callback,
    784                                void *baton,
    785                                bool monitor_signals)
    786     {
    787         m_monitor_callback = callback;
    788         m_monitor_callback_baton = baton;
    789         m_monitor_signals = monitor_signals;
    790     }
    791 
    792     bool
    793     MonitorProcess () const
    794     {
    795         if (m_monitor_callback && ProcessIDIsValid())
    796         {
    797             Host::StartMonitoringChildProcess (m_monitor_callback,
    798                                                m_monitor_callback_baton,
    799                                                GetProcessID(),
    800                                                m_monitor_signals);
    801             return true;
    802         }
    803         return false;
    804     }
    805 
    806     lldb_utility::PseudoTerminal &
    807     GetPTY ()
    808     {
    809         return m_pty;
    810     }
    811 
    812 protected:
    813     std::string m_working_dir;
    814     std::string m_plugin_name;
    815     std::string m_shell;
    816     Flags m_flags;       // Bitwise OR of bits from lldb::LaunchFlags
    817     std::vector<FileAction> m_file_actions; // File actions for any other files
    818     lldb_utility::PseudoTerminal m_pty;
    819     uint32_t m_resume_count; // How many times do we resume after launching
    820     Host::MonitorChildProcessCallback m_monitor_callback;
    821     void *m_monitor_callback_baton;
    822     bool m_monitor_signals;
    823 
    824 };
    825 
    826 //----------------------------------------------------------------------
    827 // ProcessLaunchInfo
    828 //
    829 // Describes any information that is required to launch a process.
    830 //----------------------------------------------------------------------
    831 
    832 class ProcessAttachInfo : public ProcessInstanceInfo
    833 {
    834 public:
    835     ProcessAttachInfo() :
    836         ProcessInstanceInfo(),
    837         m_plugin_name (),
    838         m_resume_count (0),
    839         m_wait_for_launch (false),
    840         m_ignore_existing (true),
    841         m_continue_once_attached (false)
    842     {
    843     }
    844 
    845     ProcessAttachInfo (const ProcessLaunchInfo &launch_info) :
    846         ProcessInstanceInfo(),
    847         m_plugin_name (),
    848         m_resume_count (0),
    849         m_wait_for_launch (false),
    850         m_ignore_existing (true),
    851         m_continue_once_attached (false)
    852     {
    853         ProcessInfo::operator= (launch_info);
    854         SetProcessPluginName (launch_info.GetProcessPluginName());
    855         SetResumeCount (launch_info.GetResumeCount());
    856     }
    857 
    858     bool
    859     GetWaitForLaunch () const
    860     {
    861         return m_wait_for_launch;
    862     }
    863 
    864     void
    865     SetWaitForLaunch (bool b)
    866     {
    867         m_wait_for_launch = b;
    868     }
    869 
    870     bool
    871     GetIgnoreExisting () const
    872     {
    873         return m_ignore_existing;
    874     }
    875 
    876     void
    877     SetIgnoreExisting (bool b)
    878     {
    879         m_ignore_existing = b;
    880     }
    881 
    882     bool
    883     GetContinueOnceAttached () const
    884     {
    885         return m_continue_once_attached;
    886     }
    887 
    888     void
    889     SetContinueOnceAttached (bool b)
    890     {
    891         m_continue_once_attached = b;
    892     }
    893 
    894     uint32_t
    895     GetResumeCount () const
    896     {
    897         return m_resume_count;
    898     }
    899 
    900     void
    901     SetResumeCount (uint32_t c)
    902     {
    903         m_resume_count = c;
    904     }
    905 
    906     const char *
    907     GetProcessPluginName () const
    908     {
    909         if (m_plugin_name.empty())
    910             return NULL;
    911         return m_plugin_name.c_str();
    912     }
    913 
    914     void
    915     SetProcessPluginName (const char *plugin)
    916     {
    917         if (plugin && plugin[0])
    918             m_plugin_name.assign (plugin);
    919         else
    920             m_plugin_name.clear();
    921     }
    922 
    923     void
    924     Clear ()
    925     {
    926         ProcessInstanceInfo::Clear();
    927         m_plugin_name.clear();
    928         m_resume_count = 0;
    929         m_wait_for_launch = false;
    930         m_ignore_existing = true;
    931         m_continue_once_attached = false;
    932     }
    933 
    934     bool
    935     ProcessInfoSpecified () const
    936     {
    937         if (GetExecutableFile())
    938             return true;
    939         if (GetProcessID() != LLDB_INVALID_PROCESS_ID)
    940             return true;
    941         if (GetParentProcessID() != LLDB_INVALID_PROCESS_ID)
    942             return true;
    943         return false;
    944     }
    945 protected:
    946     std::string m_plugin_name;
    947     uint32_t m_resume_count; // How many times do we resume after launching
    948     bool m_wait_for_launch;
    949     bool m_ignore_existing;
    950     bool m_continue_once_attached; // Supports the use-case scenario of immediately continuing the process once attached.
    951 };
    952 
    953 class ProcessLaunchCommandOptions : public Options
    954 {
    955 public:
    956 
    957     ProcessLaunchCommandOptions (CommandInterpreter &interpreter) :
    958         Options(interpreter)
    959     {
    960         // Keep default values of all options in one place: OptionParsingStarting ()
    961         OptionParsingStarting ();
    962     }
    963 
    964     ~ProcessLaunchCommandOptions ()
    965     {
    966     }
    967 
    968     Error
    969     SetOptionValue (uint32_t option_idx, const char *option_arg);
    970 
    971     void
    972     OptionParsingStarting ()
    973     {
    974         launch_info.Clear();
    975     }
    976 
    977     const OptionDefinition*
    978     GetDefinitions ()
    979     {
    980         return g_option_table;
    981     }
    982 
    983     // Options table: Required for subclasses of Options.
    984 
    985     static OptionDefinition g_option_table[];
    986 
    987     // Instance variables to hold the values for command options.
    988 
    989     ProcessLaunchInfo launch_info;
    990 };
    991 
    992 //----------------------------------------------------------------------
    993 // ProcessInstanceInfoMatch
    994 //
    995 // A class to help matching one ProcessInstanceInfo to another.
    996 //----------------------------------------------------------------------
    997 
    998 class ProcessInstanceInfoMatch
    999 {
   1000 public:
   1001     ProcessInstanceInfoMatch () :
   1002         m_match_info (),
   1003         m_name_match_type (eNameMatchIgnore),
   1004         m_match_all_users (false)
   1005     {
   1006     }
   1007 
   1008     ProcessInstanceInfoMatch (const char *process_name,
   1009                               NameMatchType process_name_match_type) :
   1010         m_match_info (),
   1011         m_name_match_type (process_name_match_type),
   1012         m_match_all_users (false)
   1013     {
   1014         m_match_info.GetExecutableFile().SetFile(process_name, false);
   1015     }
   1016 
   1017     ProcessInstanceInfo &
   1018     GetProcessInfo ()
   1019     {
   1020         return m_match_info;
   1021     }
   1022 
   1023     const ProcessInstanceInfo &
   1024     GetProcessInfo () const
   1025     {
   1026         return m_match_info;
   1027     }
   1028 
   1029     bool
   1030     GetMatchAllUsers () const
   1031     {
   1032         return m_match_all_users;
   1033     }
   1034 
   1035     void
   1036     SetMatchAllUsers (bool b)
   1037     {
   1038         m_match_all_users = b;
   1039     }
   1040 
   1041     NameMatchType
   1042     GetNameMatchType () const
   1043     {
   1044         return m_name_match_type;
   1045     }
   1046 
   1047     void
   1048     SetNameMatchType (NameMatchType name_match_type)
   1049     {
   1050         m_name_match_type = name_match_type;
   1051     }
   1052 
   1053     bool
   1054     NameMatches (const char *process_name) const;
   1055 
   1056     bool
   1057     Matches (const ProcessInstanceInfo &proc_info) const;
   1058 
   1059     bool
   1060     MatchAllProcesses () const;
   1061     void
   1062     Clear ();
   1063 
   1064 protected:
   1065     ProcessInstanceInfo m_match_info;
   1066     NameMatchType m_name_match_type;
   1067     bool m_match_all_users;
   1068 };
   1069 
   1070 class ProcessInstanceInfoList
   1071 {
   1072 public:
   1073     ProcessInstanceInfoList () :
   1074         m_infos()
   1075     {
   1076     }
   1077 
   1078     void
   1079     Clear()
   1080     {
   1081         m_infos.clear();
   1082     }
   1083 
   1084     size_t
   1085     GetSize()
   1086     {
   1087         return m_infos.size();
   1088     }
   1089 
   1090     void
   1091     Append (const ProcessInstanceInfo &info)
   1092     {
   1093         m_infos.push_back (info);
   1094     }
   1095 
   1096     const char *
   1097     GetProcessNameAtIndex (size_t idx)
   1098     {
   1099         if (idx < m_infos.size())
   1100             return m_infos[idx].GetName();
   1101         return NULL;
   1102     }
   1103 
   1104     size_t
   1105     GetProcessNameLengthAtIndex (size_t idx)
   1106     {
   1107         if (idx < m_infos.size())
   1108             return m_infos[idx].GetNameLength();
   1109         return 0;
   1110     }
   1111 
   1112     lldb::pid_t
   1113     GetProcessIDAtIndex (size_t idx)
   1114     {
   1115         if (idx < m_infos.size())
   1116             return m_infos[idx].GetProcessID();
   1117         return 0;
   1118     }
   1119 
   1120     bool
   1121     GetInfoAtIndex (size_t idx, ProcessInstanceInfo &info)
   1122     {
   1123         if (idx < m_infos.size())
   1124         {
   1125             info = m_infos[idx];
   1126             return true;
   1127         }
   1128         return false;
   1129     }
   1130 
   1131     // You must ensure "idx" is valid before calling this function
   1132     const ProcessInstanceInfo &
   1133     GetProcessInfoAtIndex (size_t idx) const
   1134     {
   1135         assert (idx < m_infos.size());
   1136         return m_infos[idx];
   1137     }
   1138 
   1139 protected:
   1140     typedef std::vector<ProcessInstanceInfo> collection;
   1141     collection m_infos;
   1142 };
   1143 
   1144 
   1145 // This class tracks the Modification state of the process.  Things that can currently modify
   1146 // the program are running the program (which will up the StopID) and writing memory (which
   1147 // will up the MemoryID.)
   1148 // FIXME: Should we also include modification of register states?
   1149 
   1150 class ProcessModID
   1151 {
   1152 friend bool operator== (const ProcessModID &lhs, const ProcessModID &rhs);
   1153 public:
   1154     ProcessModID () :
   1155         m_stop_id (0),
   1156         m_last_natural_stop_id(0),
   1157         m_resume_id (0),
   1158         m_memory_id (0),
   1159         m_last_user_expression_resume (0),
   1160         m_running_user_expression (false)
   1161     {}
   1162 
   1163     ProcessModID (const ProcessModID &rhs) :
   1164         m_stop_id (rhs.m_stop_id),
   1165         m_memory_id (rhs.m_memory_id)
   1166     {}
   1167 
   1168     const ProcessModID & operator= (const ProcessModID &rhs)
   1169     {
   1170         if (this != &rhs)
   1171         {
   1172             m_stop_id = rhs.m_stop_id;
   1173             m_memory_id = rhs.m_memory_id;
   1174         }
   1175         return *this;
   1176     }
   1177 
   1178     ~ProcessModID () {}
   1179 
   1180     void BumpStopID () {
   1181         m_stop_id++;
   1182         if (!IsLastResumeForUserExpression())
   1183             m_last_natural_stop_id++;
   1184     }
   1185 
   1186     void BumpMemoryID () { m_memory_id++; }
   1187 
   1188     void BumpResumeID () {
   1189         m_resume_id++;
   1190         if (m_running_user_expression > 0)
   1191             m_last_user_expression_resume = m_resume_id;
   1192     }
   1193 
   1194     uint32_t GetStopID() const { return m_stop_id; }
   1195     uint32_t GetLastNaturalStopID() const { return m_last_natural_stop_id; }
   1196     uint32_t GetMemoryID () const { return m_memory_id; }
   1197     uint32_t GetResumeID () const { return m_resume_id; }
   1198     uint32_t GetLastUserExpressionResumeID () const { return m_last_user_expression_resume; }
   1199 
   1200     bool MemoryIDEqual (const ProcessModID &compare) const
   1201     {
   1202         return m_memory_id == compare.m_memory_id;
   1203     }
   1204 
   1205     bool StopIDEqual (const ProcessModID &compare) const
   1206     {
   1207         return m_stop_id == compare.m_stop_id;
   1208     }
   1209 
   1210     void SetInvalid ()
   1211     {
   1212         m_stop_id = UINT32_MAX;
   1213     }
   1214 
   1215     bool IsValid () const
   1216     {
   1217         return m_stop_id != UINT32_MAX;
   1218     }
   1219 
   1220     bool
   1221     IsLastResumeForUserExpression () const
   1222     {
   1223         return m_resume_id == m_last_user_expression_resume;
   1224     }
   1225 
   1226     void
   1227     SetRunningUserExpression (bool on)
   1228     {
   1229         // REMOVEME printf ("Setting running user expression %s at resume id %d - value: %d.\n", on ? "on" : "off", m_resume_id, m_running_user_expression);
   1230         if (on)
   1231             m_running_user_expression++;
   1232         else
   1233             m_running_user_expression--;
   1234     }
   1235 
   1236 private:
   1237     uint32_t m_stop_id;
   1238     uint32_t m_last_natural_stop_id;
   1239     uint32_t m_resume_id;
   1240     uint32_t m_memory_id;
   1241     uint32_t m_last_user_expression_resume;
   1242     uint32_t m_running_user_expression;
   1243 };
   1244 inline bool operator== (const ProcessModID &lhs, const ProcessModID &rhs)
   1245 {
   1246     if (lhs.StopIDEqual (rhs)
   1247         && lhs.MemoryIDEqual (rhs))
   1248         return true;
   1249     else
   1250         return false;
   1251 }
   1252 
   1253 inline bool operator!= (const ProcessModID &lhs, const ProcessModID &rhs)
   1254 {
   1255     if (!lhs.StopIDEqual (rhs)
   1256         || !lhs.MemoryIDEqual (rhs))
   1257         return true;
   1258     else
   1259         return false;
   1260 }
   1261 
   1262 class MemoryRegionInfo
   1263 {
   1264 public:
   1265     typedef Range<lldb::addr_t, lldb::addr_t> RangeType;
   1266 
   1267     enum OptionalBool {
   1268         eDontKnow  = -1,
   1269         eNo         = 0,
   1270         eYes        = 1
   1271     };
   1272 
   1273     MemoryRegionInfo () :
   1274         m_range (),
   1275         m_read (eDontKnow),
   1276         m_write (eDontKnow),
   1277         m_execute (eDontKnow)
   1278     {
   1279     }
   1280 
   1281     ~MemoryRegionInfo ()
   1282     {
   1283     }
   1284 
   1285     RangeType &
   1286     GetRange()
   1287     {
   1288         return m_range;
   1289     }
   1290 
   1291     void
   1292     Clear()
   1293     {
   1294         m_range.Clear();
   1295         m_read = m_write = m_execute = eDontKnow;
   1296     }
   1297 
   1298     const RangeType &
   1299     GetRange() const
   1300     {
   1301         return m_range;
   1302     }
   1303 
   1304     OptionalBool
   1305     GetReadable () const
   1306     {
   1307         return m_read;
   1308     }
   1309 
   1310     OptionalBool
   1311     GetWritable () const
   1312     {
   1313         return m_write;
   1314     }
   1315 
   1316     OptionalBool
   1317     GetExecutable () const
   1318     {
   1319         return m_execute;
   1320     }
   1321 
   1322     void
   1323     SetReadable (OptionalBool val)
   1324     {
   1325         m_read = val;
   1326     }
   1327 
   1328     void
   1329     SetWritable (OptionalBool val)
   1330     {
   1331         m_write = val;
   1332     }
   1333 
   1334     void
   1335     SetExecutable (OptionalBool val)
   1336     {
   1337         m_execute = val;
   1338     }
   1339 
   1340 protected:
   1341     RangeType m_range;
   1342     OptionalBool m_read;
   1343     OptionalBool m_write;
   1344     OptionalBool m_execute;
   1345 };
   1346 
   1347 //----------------------------------------------------------------------
   1348 /// @class Process Process.h "lldb/Target/Process.h"
   1349 /// @brief A plug-in interface definition class for debugging a process.
   1350 //----------------------------------------------------------------------
   1351 class Process :
   1352     public std::enable_shared_from_this<Process>,
   1353     public ProcessProperties,
   1354     public UserID,
   1355     public Broadcaster,
   1356     public ExecutionContextScope,
   1357     public PluginInterface
   1358 {
   1359 friend class ThreadList;
   1360 friend class ClangFunction; // For WaitForStateChangeEventsPrivate
   1361 friend class CommandObjectProcessLaunch;
   1362 friend class ProcessEventData;
   1363 friend class CommandObjectBreakpointCommand;
   1364 friend class StopInfo;
   1365 
   1366 public:
   1367 
   1368     //------------------------------------------------------------------
   1369     /// Broadcaster event bits definitions.
   1370     //------------------------------------------------------------------
   1371     enum
   1372     {
   1373         eBroadcastBitStateChanged   = (1 << 0),
   1374         eBroadcastBitInterrupt      = (1 << 1),
   1375         eBroadcastBitSTDOUT         = (1 << 2),
   1376         eBroadcastBitSTDERR         = (1 << 3),
   1377         eBroadcastBitProfileData    = (1 << 4)
   1378     };
   1379 
   1380     enum
   1381     {
   1382         eBroadcastInternalStateControlStop = (1<<0),
   1383         eBroadcastInternalStateControlPause = (1<<1),
   1384         eBroadcastInternalStateControlResume = (1<<2)
   1385     };
   1386 
   1387     typedef Range<lldb::addr_t, lldb::addr_t> LoadRange;
   1388     // We use a read/write lock to allow on or more clients to
   1389     // access the process state while the process is stopped (reader).
   1390     // We lock the write lock to control access to the process
   1391     // while it is running (readers, or clients that want the process
   1392     // stopped can block waiting for the process to stop, or just
   1393     // try to lock it to see if they can immediately access the stopped
   1394     // process. If the try read lock fails, then the process is running.
   1395     typedef ProcessRunLock::ProcessRunLocker StopLocker;
   1396 
   1397     // These two functions fill out the Broadcaster interface:
   1398 
   1399     static ConstString &GetStaticBroadcasterClass ();
   1400 
   1401     virtual ConstString &GetBroadcasterClass() const
   1402     {
   1403         return GetStaticBroadcasterClass();
   1404     }
   1405 
   1406 
   1407     //------------------------------------------------------------------
   1408     /// A notification structure that can be used by clients to listen
   1409     /// for changes in a process's lifetime.
   1410     ///
   1411     /// @see RegisterNotificationCallbacks (const Notifications&)
   1412     /// @see UnregisterNotificationCallbacks (const Notifications&)
   1413     //------------------------------------------------------------------
   1414 #ifndef SWIG
   1415     typedef struct
   1416     {
   1417         void *baton;
   1418         void (*initialize)(void *baton, Process *process);
   1419         void (*process_state_changed) (void *baton, Process *process, lldb::StateType state);
   1420     } Notifications;
   1421 
   1422     class ProcessEventData :
   1423         public EventData
   1424     {
   1425         friend class Process;
   1426 
   1427         public:
   1428             ProcessEventData ();
   1429             ProcessEventData (const lldb::ProcessSP &process, lldb::StateType state);
   1430 
   1431             virtual ~ProcessEventData();
   1432 
   1433             static const ConstString &
   1434             GetFlavorString ();
   1435 
   1436             virtual const ConstString &
   1437             GetFlavor () const;
   1438 
   1439             const lldb::ProcessSP &
   1440             GetProcessSP() const
   1441             {
   1442                 return m_process_sp;
   1443             }
   1444             lldb::StateType
   1445             GetState() const
   1446             {
   1447                 return m_state;
   1448             }
   1449             bool
   1450             GetRestarted () const
   1451             {
   1452                 return m_restarted;
   1453             }
   1454 
   1455             size_t
   1456             GetNumRestartedReasons ()
   1457             {
   1458                 return m_restarted_reasons.size();
   1459             }
   1460 
   1461             const char *
   1462             GetRestartedReasonAtIndex(size_t idx)
   1463             {
   1464                 if (idx > m_restarted_reasons.size())
   1465                     return NULL;
   1466                 else
   1467                     return m_restarted_reasons[idx].c_str();
   1468             }
   1469 
   1470             bool
   1471             GetInterrupted () const
   1472             {
   1473                 return m_interrupted;
   1474             }
   1475 
   1476             virtual void
   1477             Dump (Stream *s) const;
   1478 
   1479             virtual void
   1480             DoOnRemoval (Event *event_ptr);
   1481 
   1482             static const Process::ProcessEventData *
   1483             GetEventDataFromEvent (const Event *event_ptr);
   1484 
   1485             static lldb::ProcessSP
   1486             GetProcessFromEvent (const Event *event_ptr);
   1487 
   1488             static lldb::StateType
   1489             GetStateFromEvent (const Event *event_ptr);
   1490 
   1491             static bool
   1492             GetRestartedFromEvent (const Event *event_ptr);
   1493 
   1494             static size_t
   1495             GetNumRestartedReasons(const Event *event_ptr);
   1496 
   1497             static const char *
   1498             GetRestartedReasonAtIndex(const Event *event_ptr, size_t idx);
   1499 
   1500             static void
   1501             AddRestartedReason (Event *event_ptr, const char *reason);
   1502 
   1503             static void
   1504             SetRestartedInEvent (Event *event_ptr, bool new_value);
   1505 
   1506             static bool
   1507             GetInterruptedFromEvent (const Event *event_ptr);
   1508 
   1509             static void
   1510             SetInterruptedInEvent (Event *event_ptr, bool new_value);
   1511 
   1512             static bool
   1513             SetUpdateStateOnRemoval (Event *event_ptr);
   1514 
   1515        private:
   1516 
   1517             void
   1518             SetUpdateStateOnRemoval()
   1519             {
   1520                 m_update_state++;
   1521             }
   1522             void
   1523             SetRestarted (bool new_value)
   1524             {
   1525                 m_restarted = new_value;
   1526             }
   1527             void
   1528             SetInterrupted (bool new_value)
   1529             {
   1530                 m_interrupted = new_value;
   1531             }
   1532             void
   1533             AddRestartedReason (const char *reason)
   1534             {
   1535                 m_restarted_reasons.push_back(reason);
   1536             }
   1537 
   1538             lldb::ProcessSP m_process_sp;
   1539             lldb::StateType m_state;
   1540             std::vector<std::string> m_restarted_reasons;
   1541             bool m_restarted;  // For "eStateStopped" events, this is true if the target was automatically restarted.
   1542             int m_update_state;
   1543             bool m_interrupted;
   1544             DISALLOW_COPY_AND_ASSIGN (ProcessEventData);
   1545 
   1546     };
   1547 
   1548 #endif
   1549 
   1550     static void
   1551     SettingsInitialize ();
   1552 
   1553     static void
   1554     SettingsTerminate ();
   1555 
   1556     static const ProcessPropertiesSP &
   1557     GetGlobalProperties();
   1558 
   1559     //------------------------------------------------------------------
   1560     /// Construct with a shared pointer to a target, and the Process listener.
   1561     //------------------------------------------------------------------
   1562     Process(Target &target, Listener &listener);
   1563 
   1564     //------------------------------------------------------------------
   1565     /// Destructor.
   1566     ///
   1567     /// The destructor is virtual since this class is designed to be
   1568     /// inherited from by the plug-in instance.
   1569     //------------------------------------------------------------------
   1570     virtual
   1571     ~Process();
   1572 
   1573     //------------------------------------------------------------------
   1574     /// Find a Process plug-in that can debug \a module using the
   1575     /// currently selected architecture.
   1576     ///
   1577     /// Scans all loaded plug-in interfaces that implement versions of
   1578     /// the Process plug-in interface and returns the first instance
   1579     /// that can debug the file.
   1580     ///
   1581     /// @param[in] module_sp
   1582     ///     The module shared pointer that this process will debug.
   1583     ///
   1584     /// @param[in] plugin_name
   1585     ///     If NULL, select the best plug-in for the binary. If non-NULL
   1586     ///     then look for a plugin whose PluginInfo's name matches
   1587     ///     this string.
   1588     ///
   1589     /// @see Process::CanDebug ()
   1590     //------------------------------------------------------------------
   1591     static lldb::ProcessSP
   1592     FindPlugin (Target &target,
   1593                 const char *plugin_name,
   1594                 Listener &listener,
   1595                 const FileSpec *crash_file_path);
   1596 
   1597 
   1598 
   1599     //------------------------------------------------------------------
   1600     /// Static function that can be used with the \b host function
   1601     /// Host::StartMonitoringChildProcess ().
   1602     ///
   1603     /// This function can be used by lldb_private::Process subclasses
   1604     /// when they want to watch for a local process and have its exit
   1605     /// status automatically set when the host child process exits.
   1606     /// Subclasses should call Host::StartMonitoringChildProcess ()
   1607     /// with:
   1608     ///     callback = Process::SetHostProcessExitStatus
   1609     ///     callback_baton = NULL
   1610     ///     pid = Process::GetID()
   1611     ///     monitor_signals = false
   1612     //------------------------------------------------------------------
   1613     static bool
   1614     SetProcessExitStatus (void *callback_baton,   // The callback baton which should be set to NULL
   1615                           lldb::pid_t pid,        // The process ID we want to monitor
   1616                           bool exited,
   1617                           int signo,              // Zero for no signal
   1618                           int status);            // Exit value of process if signal is zero
   1619 
   1620     lldb::ByteOrder
   1621     GetByteOrder () const;
   1622 
   1623     uint32_t
   1624     GetAddressByteSize () const;
   1625 
   1626     uint32_t
   1627     GetUniqueID() const
   1628     {
   1629         return m_process_unique_id;
   1630     }
   1631     //------------------------------------------------------------------
   1632     /// Check if a plug-in instance can debug the file in \a module.
   1633     ///
   1634     /// Each plug-in is given a chance to say whether it can debug
   1635     /// the file in \a module. If the Process plug-in instance can
   1636     /// debug a file on the current system, it should return \b true.
   1637     ///
   1638     /// @return
   1639     ///     Returns \b true if this Process plug-in instance can
   1640     ///     debug the executable, \b false otherwise.
   1641     //------------------------------------------------------------------
   1642     virtual bool
   1643     CanDebug (Target &target,
   1644               bool plugin_specified_by_name) = 0;
   1645 
   1646 
   1647     //------------------------------------------------------------------
   1648     /// This object is about to be destroyed, do any necessary cleanup.
   1649     ///
   1650     /// Subclasses that override this method should always call this
   1651     /// superclass method.
   1652     //------------------------------------------------------------------
   1653     virtual void
   1654     Finalize();
   1655 
   1656 
   1657     //------------------------------------------------------------------
   1658     /// Return whether this object is valid (i.e. has not been finalized.)
   1659     ///
   1660     /// @return
   1661     ///     Returns \b true if this Process has not been finalized
   1662     ///     and \b false otherwise.
   1663     //------------------------------------------------------------------
   1664     bool
   1665     IsValid() const
   1666     {
   1667         return !m_finalize_called;
   1668     }
   1669 
   1670     //------------------------------------------------------------------
   1671     /// Return a multi-word command object that can be used to expose
   1672     /// plug-in specific commands.
   1673     ///
   1674     /// This object will be used to resolve plug-in commands and can be
   1675     /// triggered by a call to:
   1676     ///
   1677     ///     (lldb) process commmand <args>
   1678     ///
   1679     /// @return
   1680     ///     A CommandObject which can be one of the concrete subclasses
   1681     ///     of CommandObject like CommandObjectRaw, CommandObjectParsed,
   1682     ///     or CommandObjectMultiword.
   1683     //------------------------------------------------------------------
   1684     virtual CommandObject *
   1685     GetPluginCommandObject()
   1686     {
   1687         return NULL;
   1688     }
   1689 
   1690     //------------------------------------------------------------------
   1691     /// Launch a new process.
   1692     ///
   1693     /// Launch a new process by spawning a new process using the
   1694     /// target object's executable module's file as the file to launch.
   1695     /// Arguments are given in \a argv, and the environment variables
   1696     /// are in \a envp. Standard input and output files can be
   1697     /// optionally re-directed to \a stdin_path, \a stdout_path, and
   1698     /// \a stderr_path.
   1699     ///
   1700     /// This function is not meant to be overridden by Process
   1701     /// subclasses. It will first call Process::WillLaunch (Module *)
   1702     /// and if that returns \b true, Process::DoLaunch (Module*,
   1703     /// char const *[],char const *[],const char *,const char *,
   1704     /// const char *) will be called to actually do the launching. If
   1705     /// DoLaunch returns \b true, then Process::DidLaunch() will be
   1706     /// called.
   1707     ///
   1708     /// @param[in] argv
   1709     ///     The argument array.
   1710     ///
   1711     /// @param[in] envp
   1712     ///     The environment array.
   1713     ///
   1714     /// @param[in] launch_flags
   1715     ///     Flags to modify the launch (@see lldb::LaunchFlags)
   1716     ///
   1717     /// @param[in] stdin_path
   1718     ///     The path to use when re-directing the STDIN of the new
   1719     ///     process. If all stdXX_path arguments are NULL, a pseudo
   1720     ///     terminal will be used.
   1721     ///
   1722     /// @param[in] stdout_path
   1723     ///     The path to use when re-directing the STDOUT of the new
   1724     ///     process. If all stdXX_path arguments are NULL, a pseudo
   1725     ///     terminal will be used.
   1726     ///
   1727     /// @param[in] stderr_path
   1728     ///     The path to use when re-directing the STDERR of the new
   1729     ///     process. If all stdXX_path arguments are NULL, a pseudo
   1730     ///     terminal will be used.
   1731     ///
   1732     /// @param[in] working_directory
   1733     ///     The working directory to have the child process run in
   1734     ///
   1735     /// @return
   1736     ///     An error object. Call GetID() to get the process ID if
   1737     ///     the error object is success.
   1738     //------------------------------------------------------------------
   1739     virtual Error
   1740     Launch (const ProcessLaunchInfo &launch_info);
   1741 
   1742     virtual Error
   1743     LoadCore ();
   1744 
   1745     virtual Error
   1746     DoLoadCore ()
   1747     {
   1748         Error error;
   1749         error.SetErrorStringWithFormat("error: %s does not support loading core files.", GetPluginName().GetCString());
   1750         return error;
   1751     }
   1752 
   1753     //------------------------------------------------------------------
   1754     /// Get the dynamic loader plug-in for this process.
   1755     ///
   1756     /// The default action is to let the DynamicLoader plug-ins check
   1757     /// the main executable and the DynamicLoader will select itself
   1758     /// automatically. Subclasses can override this if inspecting the
   1759     /// executable is not desired, or if Process subclasses can only
   1760     /// use a specific DynamicLoader plug-in.
   1761     //------------------------------------------------------------------
   1762     virtual DynamicLoader *
   1763     GetDynamicLoader ();
   1764 
   1765     //------------------------------------------------------------------
   1766     /// Attach to an existing process using the process attach info.
   1767     ///
   1768     /// This function is not meant to be overridden by Process
   1769     /// subclasses. It will first call WillAttach (lldb::pid_t)
   1770     /// or WillAttach (const char *), and if that returns \b
   1771     /// true, DoAttach (lldb::pid_t) or DoAttach (const char *) will
   1772     /// be called to actually do the attach. If DoAttach returns \b
   1773     /// true, then Process::DidAttach() will be called.
   1774     ///
   1775     /// @param[in] pid
   1776     ///     The process ID that we should attempt to attach to.
   1777     ///
   1778     /// @return
   1779     ///     Returns \a pid if attaching was successful, or
   1780     ///     LLDB_INVALID_PROCESS_ID if attaching fails.
   1781     //------------------------------------------------------------------
   1782     virtual Error
   1783     Attach (ProcessAttachInfo &attach_info);
   1784 
   1785     //------------------------------------------------------------------
   1786     /// Attach to a remote system via a URL
   1787     ///
   1788     /// @param[in] strm
   1789     ///     A stream where output intended for the user
   1790     ///     (if the driver has a way to display that) generated during
   1791     ///     the connection.  This may be NULL if no output is needed.A
   1792     ///
   1793     /// @param[in] remote_url
   1794     ///     The URL format that we are connecting to.
   1795     ///
   1796     /// @return
   1797     ///     Returns an error object.
   1798     //------------------------------------------------------------------
   1799     virtual Error
   1800     ConnectRemote (Stream *strm, const char *remote_url);
   1801 
   1802     bool
   1803     GetShouldDetach () const
   1804     {
   1805         return m_should_detach;
   1806     }
   1807 
   1808     void
   1809     SetShouldDetach (bool b)
   1810     {
   1811         m_should_detach = b;
   1812     }
   1813 
   1814     //------------------------------------------------------------------
   1815     /// Get the image information address for the current process.
   1816     ///
   1817     /// Some runtimes have system functions that can help dynamic
   1818     /// loaders locate the dynamic loader information needed to observe
   1819     /// shared libraries being loaded or unloaded. This function is
   1820     /// in the Process interface (as opposed to the DynamicLoader
   1821     /// interface) to ensure that remote debugging can take advantage of
   1822     /// this functionality.
   1823     ///
   1824     /// @return
   1825     ///     The address of the dynamic loader information, or
   1826     ///     LLDB_INVALID_ADDRESS if this is not supported by this
   1827     ///     interface.
   1828     //------------------------------------------------------------------
   1829     virtual lldb::addr_t
   1830     GetImageInfoAddress ();
   1831 
   1832     //------------------------------------------------------------------
   1833     /// Load a shared library into this process.
   1834     ///
   1835     /// Try and load a shared library into the current process. This
   1836     /// call might fail in the dynamic loader plug-in says it isn't safe
   1837     /// to try and load shared libraries at the moment.
   1838     ///
   1839     /// @param[in] image_spec
   1840     ///     The image file spec that points to the shared library that
   1841     ///     you want to load.
   1842     ///
   1843     /// @param[out] error
   1844     ///     An error object that gets filled in with any errors that
   1845     ///     might occur when trying to load the shared library.
   1846     ///
   1847     /// @return
   1848     ///     A token that represents the shared library that can be
   1849     ///     later used to unload the shared library. A value of
   1850     ///     LLDB_INVALID_IMAGE_TOKEN will be returned if the shared
   1851     ///     library can't be opened.
   1852     //------------------------------------------------------------------
   1853     virtual uint32_t
   1854     LoadImage (const FileSpec &image_spec, Error &error);
   1855 
   1856     virtual Error
   1857     UnloadImage (uint32_t image_token);
   1858 
   1859     //------------------------------------------------------------------
   1860     /// Register for process and thread notifications.
   1861     ///
   1862     /// Clients can register nofication callbacks by filling out a
   1863     /// Process::Notifications structure and calling this function.
   1864     ///
   1865     /// @param[in] callbacks
   1866     ///     A structure that contains the notification baton and
   1867     ///     callback functions.
   1868     ///
   1869     /// @see Process::Notifications
   1870     //------------------------------------------------------------------
   1871 #ifndef SWIG
   1872     void
   1873     RegisterNotificationCallbacks (const Process::Notifications& callbacks);
   1874 #endif
   1875     //------------------------------------------------------------------
   1876     /// Unregister for process and thread notifications.
   1877     ///
   1878     /// Clients can unregister nofication callbacks by passing a copy of
   1879     /// the original baton and callbacks in \a callbacks.
   1880     ///
   1881     /// @param[in] callbacks
   1882     ///     A structure that contains the notification baton and
   1883     ///     callback functions.
   1884     ///
   1885     /// @return
   1886     ///     Returns \b true if the notification callbacks were
   1887     ///     successfully removed from the process, \b false otherwise.
   1888     ///
   1889     /// @see Process::Notifications
   1890     //------------------------------------------------------------------
   1891 #ifndef SWIG
   1892     bool
   1893     UnregisterNotificationCallbacks (const Process::Notifications& callbacks);
   1894 #endif
   1895     //==================================================================
   1896     // Built in Process Control functions
   1897     //==================================================================
   1898     //------------------------------------------------------------------
   1899     /// Resumes all of a process's threads as configured using the
   1900     /// Thread run control functions.
   1901     ///
   1902     /// Threads for a process should be updated with one of the run
   1903     /// control actions (resume, step, or suspend) that they should take
   1904     /// when the process is resumed. If no run control action is given
   1905     /// to a thread it will be resumed by default.
   1906     ///
   1907     /// This function is not meant to be overridden by Process
   1908     /// subclasses. This function will take care of disabling any
   1909     /// breakpoints that threads may be stopped at, single stepping, and
   1910     /// re-enabling breakpoints, and enabling the basic flow control
   1911     /// that the plug-in instances need not worry about.
   1912     ///
   1913     /// N.B. This function also sets the Write side of the Run Lock,
   1914     /// which is unset when the corresponding stop event is pulled off
   1915     /// the Public Event Queue.  If you need to resume the process without
   1916     /// setting the Run Lock, use PrivateResume (though you should only do
   1917     /// that from inside the Process class.
   1918     ///
   1919     /// @return
   1920     ///     Returns an error object.
   1921     ///
   1922     /// @see Thread:Resume()
   1923     /// @see Thread:Step()
   1924     /// @see Thread:Suspend()
   1925     //------------------------------------------------------------------
   1926     Error
   1927     Resume();
   1928 
   1929     //------------------------------------------------------------------
   1930     /// Halts a running process.
   1931     ///
   1932     /// This function is not meant to be overridden by Process
   1933     /// subclasses.
   1934     /// If the process is successfully halted, a eStateStopped
   1935     /// process event with GetInterrupted will be broadcast.  If false, we will
   1936     /// halt the process with no events generated by the halt.
   1937     ///
   1938     /// @param[in] clear_thread_plans
   1939     ///     If true, when the process stops, clear all thread plans.
   1940     ///
   1941     /// @return
   1942     ///     Returns an error object.  If the error is empty, the process is halted.
   1943     ///     otherwise the halt has failed.
   1944     //------------------------------------------------------------------
   1945     Error
   1946     Halt (bool clear_thread_plans = false);
   1947 
   1948     //------------------------------------------------------------------
   1949     /// Detaches from a running or stopped process.
   1950     ///
   1951     /// This function is not meant to be overridden by Process
   1952     /// subclasses.
   1953     ///
   1954     /// @param[in] keep_stopped
   1955     ///     If true, don't resume the process on detach.
   1956     ///
   1957     /// @return
   1958     ///     Returns an error object.
   1959     //------------------------------------------------------------------
   1960     Error
   1961     Detach (bool keep_stopped);
   1962 
   1963     //------------------------------------------------------------------
   1964     /// Kills the process and shuts down all threads that were spawned
   1965     /// to track and monitor the process.
   1966     ///
   1967     /// This function is not meant to be overridden by Process
   1968     /// subclasses.
   1969     ///
   1970     /// @return
   1971     ///     Returns an error object.
   1972     //------------------------------------------------------------------
   1973     Error
   1974     Destroy();
   1975 
   1976     //------------------------------------------------------------------
   1977     /// Sends a process a UNIX signal \a signal.
   1978     ///
   1979     /// This function is not meant to be overridden by Process
   1980     /// subclasses.
   1981     ///
   1982     /// @return
   1983     ///     Returns an error object.
   1984     //------------------------------------------------------------------
   1985     Error
   1986     Signal (int signal);
   1987 
   1988     virtual UnixSignals &
   1989     GetUnixSignals ()
   1990     {
   1991         return m_unix_signals;
   1992     }
   1993 
   1994     //==================================================================
   1995     // Plug-in Process Control Overrides
   1996     //==================================================================
   1997 
   1998     //------------------------------------------------------------------
   1999     /// Called before attaching to a process.
   2000     ///
   2001     /// Allow Process plug-ins to execute some code before attaching a
   2002     /// process.
   2003     ///
   2004     /// @return
   2005     ///     Returns an error object.
   2006     //------------------------------------------------------------------
   2007     virtual Error
   2008     WillAttachToProcessWithID (lldb::pid_t pid)
   2009     {
   2010         return Error();
   2011     }
   2012 
   2013     //------------------------------------------------------------------
   2014     /// Called before attaching to a process.
   2015     ///
   2016     /// Allow Process plug-ins to execute some code before attaching a
   2017     /// process.
   2018     ///
   2019     /// @return
   2020     ///     Returns an error object.
   2021     //------------------------------------------------------------------
   2022     virtual Error
   2023     WillAttachToProcessWithName (const char *process_name, bool wait_for_launch)
   2024     {
   2025         return Error();
   2026     }
   2027 
   2028     //------------------------------------------------------------------
   2029     /// Attach to a remote system via a URL
   2030     ///
   2031     /// @param[in] strm
   2032     ///     A stream where output intended for the user
   2033     ///     (if the driver has a way to display that) generated during
   2034     ///     the connection.  This may be NULL if no output is needed.A
   2035     ///
   2036     /// @param[in] remote_url
   2037     ///     The URL format that we are connecting to.
   2038     ///
   2039     /// @return
   2040     ///     Returns an error object.
   2041     //------------------------------------------------------------------
   2042     virtual Error
   2043     DoConnectRemote (Stream *strm, const char *remote_url)
   2044     {
   2045         Error error;
   2046         error.SetErrorString ("remote connections are not supported");
   2047         return error;
   2048     }
   2049 
   2050     //------------------------------------------------------------------
   2051     /// Attach to an existing process using a process ID.
   2052     ///
   2053     /// @param[in] pid
   2054     ///     The process ID that we should attempt to attach to.
   2055     ///
   2056     /// @return
   2057     ///     Returns \a pid if attaching was successful, or
   2058     ///     LLDB_INVALID_PROCESS_ID if attaching fails.
   2059     //------------------------------------------------------------------
   2060     virtual Error
   2061     DoAttachToProcessWithID (lldb::pid_t pid)
   2062     {
   2063         Error error;
   2064         error.SetErrorStringWithFormat("error: %s does not support attaching to a process by pid", GetPluginName().GetCString());
   2065         return error;
   2066     }
   2067 
   2068     //------------------------------------------------------------------
   2069     /// Attach to an existing process using a process ID.
   2070     ///
   2071     /// @param[in] pid
   2072     ///     The process ID that we should attempt to attach to.
   2073     ///
   2074     /// @param[in] attach_info
   2075     ///     Information on how to do the attach. For example, GetUserID()
   2076     ///     will return the uid to attach as.
   2077     ///
   2078     /// @return
   2079     ///     Returns \a pid if attaching was successful, or
   2080     ///     LLDB_INVALID_PROCESS_ID if attaching fails.
   2081     /// hanming : need flag
   2082     //------------------------------------------------------------------
   2083     virtual Error
   2084     DoAttachToProcessWithID (lldb::pid_t pid,  const ProcessAttachInfo &attach_info)
   2085     {
   2086         Error error;
   2087         error.SetErrorStringWithFormat("error: %s does not support attaching to a process by pid", GetPluginName().GetCString());
   2088         return error;
   2089     }
   2090 
   2091     //------------------------------------------------------------------
   2092     /// Attach to an existing process using a partial process name.
   2093     ///
   2094     /// @param[in] process_name
   2095     ///     The name of the process to attach to.
   2096     ///
   2097     /// @param[in] wait_for_launch
   2098     ///     If \b true, wait for the process to be launched and attach
   2099     ///     as soon as possible after it does launch. If \b false, then
   2100     ///     search for a matching process the currently exists.
   2101     ///
   2102     /// @param[in] attach_info
   2103     ///     Information on how to do the attach. For example, GetUserID()
   2104     ///     will return the uid to attach as.
   2105     ///
   2106     /// @return
   2107     ///     Returns \a pid if attaching was successful, or
   2108     ///     LLDB_INVALID_PROCESS_ID if attaching fails.
   2109     //------------------------------------------------------------------
   2110     virtual Error
   2111     DoAttachToProcessWithName (const char *process_name, bool wait_for_launch, const ProcessAttachInfo &attach_info)
   2112     {
   2113         Error error;
   2114         error.SetErrorString("attach by name is not supported");
   2115         return error;
   2116     }
   2117 
   2118     //------------------------------------------------------------------
   2119     /// Called after attaching a process.
   2120     ///
   2121     /// Allow Process plug-ins to execute some code after attaching to
   2122     /// a process.
   2123     //------------------------------------------------------------------
   2124     virtual void
   2125     DidAttach () {}
   2126 
   2127 
   2128     //------------------------------------------------------------------
   2129     /// Called after a process re-execs itself.
   2130     ///
   2131     /// Allow Process plug-ins to execute some code after a process has
   2132     /// exec'ed itself. Subclasses typically should override DoDidExec()
   2133     /// as the lldb_private::Process class needs to remove its dynamic
   2134     /// loader, runtime, ABI and other plug-ins, as well as unload all
   2135     /// shared libraries.
   2136     //------------------------------------------------------------------
   2137     virtual void
   2138     DidExec ();
   2139 
   2140     //------------------------------------------------------------------
   2141     /// Subclasses of Process should implement this function if they
   2142     /// need to do anything after a process exec's itself.
   2143     //------------------------------------------------------------------
   2144     virtual void
   2145     DoDidExec ()
   2146     {
   2147     }
   2148 
   2149     //------------------------------------------------------------------
   2150     /// Called before launching to a process.
   2151     ///
   2152     /// Allow Process plug-ins to execute some code before launching a
   2153     /// process.
   2154     ///
   2155     /// @return
   2156     ///     Returns an error object.
   2157     //------------------------------------------------------------------
   2158     virtual Error
   2159     WillLaunch (Module* module)
   2160     {
   2161         return Error();
   2162     }
   2163 
   2164     //------------------------------------------------------------------
   2165     /// Launch a new process.
   2166     ///
   2167     /// Launch a new process by spawning a new process using \a module's
   2168     /// file as the file to launch. Arguments are given in \a argv,
   2169     /// and the environment variables are in \a envp. Standard input
   2170     /// and output files can be optionally re-directed to \a stdin_path,
   2171     /// \a stdout_path, and \a stderr_path.
   2172     ///
   2173     /// @param[in] module
   2174     ///     The module from which to extract the file specification and
   2175     ///     launch.
   2176     ///
   2177     /// @param[in] argv
   2178     ///     The argument array.
   2179     ///
   2180     /// @param[in] envp
   2181     ///     The environment array.
   2182     ///
   2183     /// @param[in] launch_flags
   2184     ///     Flags to modify the launch (@see lldb::LaunchFlags)
   2185     ///
   2186     /// @param[in] stdin_path
   2187     ///     The path to use when re-directing the STDIN of the new
   2188     ///     process. If all stdXX_path arguments are NULL, a pseudo
   2189     ///     terminal will be used.
   2190     ///
   2191     /// @param[in] stdout_path
   2192     ///     The path to use when re-directing the STDOUT of the new
   2193     ///     process. If all stdXX_path arguments are NULL, a pseudo
   2194     ///     terminal will be used.
   2195     ///
   2196     /// @param[in] stderr_path
   2197     ///     The path to use when re-directing the STDERR of the new
   2198     ///     process. If all stdXX_path arguments are NULL, a pseudo
   2199     ///     terminal will be used.
   2200     ///
   2201     /// @param[in] working_directory
   2202     ///     The working directory to have the child process run in
   2203     ///
   2204     /// @return
   2205     ///     A new valid process ID, or LLDB_INVALID_PROCESS_ID if
   2206     ///     launching fails.
   2207     //------------------------------------------------------------------
   2208     virtual Error
   2209     DoLaunch (Module *exe_module,
   2210               const ProcessLaunchInfo &launch_info)
   2211     {
   2212         Error error;
   2213         error.SetErrorStringWithFormat("error: %s does not support launching processes", GetPluginName().GetCString());
   2214         return error;
   2215     }
   2216 
   2217 
   2218     //------------------------------------------------------------------
   2219     /// Called after launching a process.
   2220     ///
   2221     /// Allow Process plug-ins to execute some code after launching
   2222     /// a process.
   2223     //------------------------------------------------------------------
   2224     virtual void
   2225     DidLaunch () {}
   2226 
   2227 
   2228 
   2229     //------------------------------------------------------------------
   2230     /// Called before resuming to a process.
   2231     ///
   2232     /// Allow Process plug-ins to execute some code before resuming a
   2233     /// process.
   2234     ///
   2235     /// @return
   2236     ///     Returns an error object.
   2237     //------------------------------------------------------------------
   2238     virtual Error
   2239     WillResume () { return Error(); }
   2240 
   2241     //------------------------------------------------------------------
   2242     /// Resumes all of a process's threads as configured using the
   2243     /// Thread run control functions.
   2244     ///
   2245     /// Threads for a process should be updated with one of the run
   2246     /// control actions (resume, step, or suspend) that they should take
   2247     /// when the process is resumed. If no run control action is given
   2248     /// to a thread it will be resumed by default.
   2249     ///
   2250     /// @return
   2251     ///     Returns \b true if the process successfully resumes using
   2252     ///     the thread run control actions, \b false otherwise.
   2253     ///
   2254     /// @see Thread:Resume()
   2255     /// @see Thread:Step()
   2256     /// @see Thread:Suspend()
   2257     //------------------------------------------------------------------
   2258     virtual Error
   2259     DoResume ()
   2260     {
   2261         Error error;
   2262         error.SetErrorStringWithFormat("error: %s does not support resuming processes", GetPluginName().GetCString());
   2263         return error;
   2264     }
   2265 
   2266 
   2267     //------------------------------------------------------------------
   2268     /// Called after resuming a process.
   2269     ///
   2270     /// Allow Process plug-ins to execute some code after resuming
   2271     /// a process.
   2272     //------------------------------------------------------------------
   2273     virtual void
   2274     DidResume () {}
   2275 
   2276 
   2277     //------------------------------------------------------------------
   2278     /// Called before halting to a process.
   2279     ///
   2280     /// Allow Process plug-ins to execute some code before halting a
   2281     /// process.
   2282     ///
   2283     /// @return
   2284     ///     Returns an error object.
   2285     //------------------------------------------------------------------
   2286     virtual Error
   2287     WillHalt () { return Error(); }
   2288 
   2289     //------------------------------------------------------------------
   2290     /// Halts a running process.
   2291     ///
   2292     /// DoHalt must produce one and only one stop StateChanged event if it actually
   2293     /// stops the process.  If the stop happens through some natural event (for
   2294     /// instance a SIGSTOP), then forwarding that event will do.  Otherwise, you must
   2295     /// generate the event manually.  Note also, the private event thread is stopped when
   2296     /// DoHalt is run to prevent the events generated while halting to trigger
   2297     /// other state changes before the halt is complete.
   2298     ///
   2299     /// @param[out] caused_stop
   2300     ///     If true, then this Halt caused the stop, otherwise, the
   2301     ///     process was already stopped.
   2302     ///
   2303     /// @return
   2304     ///     Returns \b true if the process successfully halts, \b false
   2305     ///     otherwise.
   2306     //------------------------------------------------------------------
   2307     virtual Error
   2308     DoHalt (bool &caused_stop)
   2309     {
   2310         Error error;
   2311         error.SetErrorStringWithFormat("error: %s does not support halting processes", GetPluginName().GetCString());
   2312         return error;
   2313     }
   2314 
   2315 
   2316     //------------------------------------------------------------------
   2317     /// Called after halting a process.
   2318     ///
   2319     /// Allow Process plug-ins to execute some code after halting
   2320     /// a process.
   2321     //------------------------------------------------------------------
   2322     virtual void
   2323     DidHalt () {}
   2324 
   2325     //------------------------------------------------------------------
   2326     /// Called before detaching from a process.
   2327     ///
   2328     /// Allow Process plug-ins to execute some code before detaching
   2329     /// from a process.
   2330     ///
   2331     /// @return
   2332     ///     Returns an error object.
   2333     //------------------------------------------------------------------
   2334     virtual Error
   2335     WillDetach ()
   2336     {
   2337         return Error();
   2338     }
   2339 
   2340     //------------------------------------------------------------------
   2341     /// Detaches from a running or stopped process.
   2342     ///
   2343     /// @return
   2344     ///     Returns \b true if the process successfully detaches, \b
   2345     ///     false otherwise.
   2346     //------------------------------------------------------------------
   2347     virtual Error
   2348     DoDetach (bool keep_stopped)
   2349     {
   2350         Error error;
   2351         error.SetErrorStringWithFormat("error: %s does not support detaching from processes", GetPluginName().GetCString());
   2352         return error;
   2353     }
   2354 
   2355 
   2356     //------------------------------------------------------------------
   2357     /// Called after detaching from a process.
   2358     ///
   2359     /// Allow Process plug-ins to execute some code after detaching
   2360     /// from a process.
   2361     //------------------------------------------------------------------
   2362     virtual void
   2363     DidDetach () {}
   2364 
   2365     virtual bool
   2366     DetachRequiresHalt() { return false; }
   2367 
   2368     //------------------------------------------------------------------
   2369     /// Called before sending a signal to a process.
   2370     ///
   2371     /// Allow Process plug-ins to execute some code before sending a
   2372     /// signal to a process.
   2373     ///
   2374     /// @return
   2375     ///     Returns no error if it is safe to proceed with a call to
   2376     ///     Process::DoSignal(int), otherwise an error describing what
   2377     ///     prevents the signal from being sent.
   2378     //------------------------------------------------------------------
   2379     virtual Error
   2380     WillSignal () { return Error(); }
   2381 
   2382     //------------------------------------------------------------------
   2383     /// Sends a process a UNIX signal \a signal.
   2384     ///
   2385     /// @return
   2386     ///     Returns an error object.
   2387     //------------------------------------------------------------------
   2388     virtual Error
   2389     DoSignal (int signal)
   2390     {
   2391         Error error;
   2392         error.SetErrorStringWithFormat("error: %s does not support senging signals to processes", GetPluginName().GetCString());
   2393         return error;
   2394     }
   2395 
   2396     virtual Error
   2397     WillDestroy () { return Error(); }
   2398 
   2399     virtual Error
   2400     DoDestroy () = 0;
   2401 
   2402     virtual void
   2403     DidDestroy () { }
   2404 
   2405     virtual bool
   2406     DestroyRequiresHalt() { return true; }
   2407 
   2408 
   2409     //------------------------------------------------------------------
   2410     /// Called after sending a signal to a process.
   2411     ///
   2412     /// Allow Process plug-ins to execute some code after sending a
   2413     /// signal to a process.
   2414     //------------------------------------------------------------------
   2415     virtual void
   2416     DidSignal () {}
   2417 
   2418     //------------------------------------------------------------------
   2419     /// Currently called as part of ShouldStop.
   2420     /// FIXME: Should really happen when the target stops before the
   2421     /// event is taken from the queue...
   2422     ///
   2423     /// This callback is called as the event
   2424     /// is about to be queued up to allow Process plug-ins to execute
   2425     /// some code prior to clients being notified that a process was
   2426     /// stopped. Common operations include updating the thread list,
   2427     /// invalidating any thread state (registers, stack, etc) prior to
   2428     /// letting the notification go out.
   2429     ///
   2430     //------------------------------------------------------------------
   2431     virtual void
   2432     RefreshStateAfterStop () = 0;
   2433 
   2434     //------------------------------------------------------------------
   2435     /// Get the target object pointer for this module.
   2436     ///
   2437     /// @return
   2438     ///     A Target object pointer to the target that owns this
   2439     ///     module.
   2440     //------------------------------------------------------------------
   2441     Target &
   2442     GetTarget ()
   2443     {
   2444         return m_target;
   2445     }
   2446 
   2447     //------------------------------------------------------------------
   2448     /// Get the const target object pointer for this module.
   2449     ///
   2450     /// @return
   2451     ///     A const Target object pointer to the target that owns this
   2452     ///     module.
   2453     //------------------------------------------------------------------
   2454     const Target &
   2455     GetTarget () const
   2456     {
   2457         return m_target;
   2458     }
   2459 
   2460     //------------------------------------------------------------------
   2461     /// Flush all data in the process.
   2462     ///
   2463     /// Flush the memory caches, all threads, and any other cached data
   2464     /// in the process.
   2465     ///
   2466     /// This function can be called after a world changing event like
   2467     /// adding a new symbol file, or after the process makes a large
   2468     /// context switch (from boot ROM to booted into an OS).
   2469     //------------------------------------------------------------------
   2470     void
   2471     Flush ();
   2472 
   2473     //------------------------------------------------------------------
   2474     /// Get accessor for the current process state.
   2475     ///
   2476     /// @return
   2477     ///     The current state of the process.
   2478     ///
   2479     /// @see lldb::StateType
   2480     //------------------------------------------------------------------
   2481     lldb::StateType
   2482     GetState ();
   2483 
   2484     ExecutionResults
   2485     RunThreadPlan (ExecutionContext &exe_ctx,
   2486                     lldb::ThreadPlanSP &thread_plan_sp,
   2487                     bool stop_others,
   2488                     bool run_others,
   2489                     bool unwind_on_error,
   2490                     bool ignore_breakpoints,
   2491                     uint32_t timeout_usec,
   2492                     Stream &errors);
   2493 
   2494     static const char *
   2495     ExecutionResultAsCString (ExecutionResults result);
   2496 
   2497     void
   2498     GetStatus (Stream &ostrm);
   2499 
   2500     size_t
   2501     GetThreadStatus (Stream &ostrm,
   2502                      bool only_threads_with_stop_reason,
   2503                      uint32_t start_frame,
   2504                      uint32_t num_frames,
   2505                      uint32_t num_frames_with_source);
   2506 
   2507     void
   2508     SendAsyncInterrupt ();
   2509 
   2510 protected:
   2511 
   2512     void
   2513     SetState (lldb::EventSP &event_sp);
   2514 
   2515     lldb::StateType
   2516     GetPrivateState ();
   2517 
   2518     //------------------------------------------------------------------
   2519     /// The "private" side of resuming a process.  This doesn't alter the
   2520     /// state of m_run_lock, but just causes the process to resume.
   2521     ///
   2522     /// @return
   2523     ///     An Error object describing the success or failure of the resume.
   2524     //------------------------------------------------------------------
   2525     Error
   2526     PrivateResume ();
   2527 
   2528     //------------------------------------------------------------------
   2529     // Called internally
   2530     //------------------------------------------------------------------
   2531     void
   2532     CompleteAttach ();
   2533 
   2534 public:
   2535     //------------------------------------------------------------------
   2536     /// Get the exit status for a process.
   2537     ///
   2538     /// @return
   2539     ///     The process's return code, or -1 if the current process
   2540     ///     state is not eStateExited.
   2541     //------------------------------------------------------------------
   2542     int
   2543     GetExitStatus ();
   2544 
   2545     //------------------------------------------------------------------
   2546     /// Get a textual description of what the process exited.
   2547     ///
   2548     /// @return
   2549     ///     The textual description of why the process exited, or NULL
   2550     ///     if there is no description available.
   2551     //------------------------------------------------------------------
   2552     const char *
   2553     GetExitDescription ();
   2554 
   2555 
   2556     virtual void
   2557     DidExit ()
   2558     {
   2559     }
   2560 
   2561     //------------------------------------------------------------------
   2562     /// Get the Modification ID of the process.
   2563     ///
   2564     /// @return
   2565     ///     The modification ID of the process.
   2566     //------------------------------------------------------------------
   2567     ProcessModID
   2568     GetModID () const
   2569     {
   2570         return m_mod_id;
   2571     }
   2572 
   2573     const ProcessModID &
   2574     GetModIDRef () const
   2575     {
   2576         return m_mod_id;
   2577     }
   2578 
   2579     uint32_t
   2580     GetStopID () const
   2581     {
   2582         return m_mod_id.GetStopID();
   2583     }
   2584 
   2585     uint32_t
   2586     GetResumeID () const
   2587     {
   2588         return m_mod_id.GetResumeID();
   2589     }
   2590 
   2591     uint32_t
   2592     GetLastUserExpressionResumeID () const
   2593     {
   2594         return m_mod_id.GetLastUserExpressionResumeID();
   2595     }
   2596 
   2597     uint32_t
   2598     GetLastNaturalStopID()
   2599     {
   2600         return m_mod_id.GetLastNaturalStopID();
   2601     }
   2602 
   2603     //------------------------------------------------------------------
   2604     /// Set accessor for the process exit status (return code).
   2605     ///
   2606     /// Sometimes a child exits and the exit can be detected by global
   2607     /// functions (signal handler for SIGCHLD for example). This
   2608     /// accessor allows the exit status to be set from an external
   2609     /// source.
   2610     ///
   2611     /// Setting this will cause a eStateExited event to be posted to
   2612     /// the process event queue.
   2613     ///
   2614     /// @param[in] exit_status
   2615     ///     The value for the process's return code.
   2616     ///
   2617     /// @see lldb::StateType
   2618     //------------------------------------------------------------------
   2619     virtual bool
   2620     SetExitStatus (int exit_status, const char *cstr);
   2621 
   2622     //------------------------------------------------------------------
   2623     /// Check if a process is still alive.
   2624     ///
   2625     /// @return
   2626     ///     Returns \b true if the process is still valid, \b false
   2627     ///     otherwise.
   2628     //------------------------------------------------------------------
   2629     virtual bool
   2630     IsAlive () = 0;
   2631 
   2632     //------------------------------------------------------------------
   2633     /// Before lldb detaches from a process, it warns the user that they are about to lose their debug session.
   2634     /// In some cases, this warning doesn't need to be emitted -- for instance, with core file debugging where
   2635     /// the user can reconstruct the "state" by simply re-running the debugger on the core file.
   2636     ///
   2637     /// @return
   2638     //      true if the user should be warned about detaching from this process.
   2639     //------------------------------------------------------------------
   2640     virtual bool
   2641     WarnBeforeDetach () const
   2642     {
   2643         return true;
   2644     }
   2645 
   2646     //------------------------------------------------------------------
   2647     /// Actually do the reading of memory from a process.
   2648     ///
   2649     /// Subclasses must override this function and can return fewer
   2650     /// bytes than requested when memory requests are too large. This
   2651     /// class will break up the memory requests and keep advancing the
   2652     /// arguments along as needed.
   2653     ///
   2654     /// @param[in] vm_addr
   2655     ///     A virtual load address that indicates where to start reading
   2656     ///     memory from.
   2657     ///
   2658     /// @param[in] size
   2659     ///     The number of bytes to read.
   2660     ///
   2661     /// @param[out] buf
   2662     ///     A byte buffer that is at least \a size bytes long that
   2663     ///     will receive the memory bytes.
   2664     ///
   2665     /// @return
   2666     ///     The number of bytes that were actually read into \a buf.
   2667     //------------------------------------------------------------------
   2668     virtual size_t
   2669     DoReadMemory (lldb::addr_t vm_addr,
   2670                   void *buf,
   2671                   size_t size,
   2672                   Error &error) = 0;
   2673 
   2674     //------------------------------------------------------------------
   2675     /// Read of memory from a process.
   2676     ///
   2677     /// This function will read memory from the current process's
   2678     /// address space and remove any traps that may have been inserted
   2679     /// into the memory.
   2680     ///
   2681     /// This function is not meant to be overridden by Process
   2682     /// subclasses, the subclasses should implement
   2683     /// Process::DoReadMemory (lldb::addr_t, size_t, void *).
   2684     ///
   2685     /// @param[in] vm_addr
   2686     ///     A virtual load address that indicates where to start reading
   2687     ///     memory from.
   2688     ///
   2689     /// @param[out] buf
   2690     ///     A byte buffer that is at least \a size bytes long that
   2691     ///     will receive the memory bytes.
   2692     ///
   2693     /// @param[in] size
   2694     ///     The number of bytes to read.
   2695     ///
   2696     /// @return
   2697     ///     The number of bytes that were actually read into \a buf. If
   2698     ///     the returned number is greater than zero, yet less than \a
   2699     ///     size, then this function will get called again with \a
   2700     ///     vm_addr, \a buf, and \a size updated appropriately. Zero is
   2701     ///     returned to indicate an error.
   2702     //------------------------------------------------------------------
   2703     virtual size_t
   2704     ReadMemory (lldb::addr_t vm_addr,
   2705                 void *buf,
   2706                 size_t size,
   2707                 Error &error);
   2708 
   2709     //------------------------------------------------------------------
   2710     /// Read a NULL terminated string from memory
   2711     ///
   2712     /// This function will read a cache page at a time until a NULL
   2713     /// string terminator is found. It will stop reading if an aligned
   2714     /// sequence of NULL termination \a type_width bytes is not found
   2715     /// before reading \a cstr_max_len bytes.  The results are always
   2716     /// guaranteed to be NULL terminated, and that no more than
   2717     /// (max_bytes - type_width) bytes will be read.
   2718     ///
   2719     /// @param[in] vm_addr
   2720     ///     The virtual load address to start the memory read.
   2721     ///
   2722     /// @param[in] str
   2723     ///     A character buffer containing at least max_bytes.
   2724     ///
   2725     /// @param[in] max_bytes
   2726     ///     The maximum number of bytes to read.
   2727     ///
   2728     /// @param[in] error
   2729     ///     The error status of the read operation.
   2730     ///
   2731     /// @param[in] type_width
   2732     ///     The size of the null terminator (1 to 4 bytes per
   2733     ///     character).  Defaults to 1.
   2734     ///
   2735     /// @return
   2736     ///     The error status or the number of bytes prior to the null terminator.
   2737     //------------------------------------------------------------------
   2738     size_t
   2739     ReadStringFromMemory (lldb::addr_t vm_addr,
   2740                            char *str,
   2741                            size_t max_bytes,
   2742                            Error &error,
   2743                            size_t type_width = 1);
   2744 
   2745     //------------------------------------------------------------------
   2746     /// Read a NULL terminated C string from memory
   2747     ///
   2748     /// This function will read a cache page at a time until the NULL
   2749     /// C string terminator is found. It will stop reading if the NULL
   2750     /// termination byte isn't found before reading \a cstr_max_len
   2751     /// bytes, and the results are always guaranteed to be NULL
   2752     /// terminated (at most cstr_max_len - 1 bytes will be read).
   2753     //------------------------------------------------------------------
   2754     size_t
   2755     ReadCStringFromMemory (lldb::addr_t vm_addr,
   2756                            char *cstr,
   2757                            size_t cstr_max_len,
   2758                            Error &error);
   2759 
   2760     size_t
   2761     ReadCStringFromMemory (lldb::addr_t vm_addr,
   2762                            std::string &out_str,
   2763                            Error &error);
   2764 
   2765     size_t
   2766     ReadMemoryFromInferior (lldb::addr_t vm_addr,
   2767                             void *buf,
   2768                             size_t size,
   2769                             Error &error);
   2770 
   2771     //------------------------------------------------------------------
   2772     /// Reads an unsigned integer of the specified byte size from
   2773     /// process memory.
   2774     ///
   2775     /// @param[in] load_addr
   2776     ///     A load address of the integer to read.
   2777     ///
   2778     /// @param[in] byte_size
   2779     ///     The size in byte of the integer to read.
   2780     ///
   2781     /// @param[in] fail_value
   2782     ///     The value to return if we fail to read an integer.
   2783     ///
   2784     /// @param[out] error
   2785     ///     An error that indicates the success or failure of this
   2786     ///     operation. If error indicates success (error.Success()),
   2787     ///     then the value returned can be trusted, otherwise zero
   2788     ///     will be returned.
   2789     ///
   2790     /// @return
   2791     ///     The unsigned integer that was read from the process memory
   2792     ///     space. If the integer was smaller than a uint64_t, any
   2793     ///     unused upper bytes will be zero filled. If the process
   2794     ///     byte order differs from the host byte order, the integer
   2795     ///     value will be appropriately byte swapped into host byte
   2796     ///     order.
   2797     //------------------------------------------------------------------
   2798     uint64_t
   2799     ReadUnsignedIntegerFromMemory (lldb::addr_t load_addr,
   2800                                    size_t byte_size,
   2801                                    uint64_t fail_value,
   2802                                    Error &error);
   2803 
   2804     lldb::addr_t
   2805     ReadPointerFromMemory (lldb::addr_t vm_addr,
   2806                            Error &error);
   2807 
   2808     bool
   2809     WritePointerToMemory (lldb::addr_t vm_addr,
   2810                           lldb::addr_t ptr_value,
   2811                           Error &error);
   2812 
   2813     //------------------------------------------------------------------
   2814     /// Actually do the writing of memory to a process.
   2815     ///
   2816     /// @param[in] vm_addr
   2817     ///     A virtual load address that indicates where to start writing
   2818     ///     memory to.
   2819     ///
   2820     /// @param[in] buf
   2821     ///     A byte buffer that is at least \a size bytes long that
   2822     ///     contains the data to write.
   2823     ///
   2824     /// @param[in] size
   2825     ///     The number of bytes to write.
   2826     ///
   2827     /// @param[out] error
   2828     ///     An error value in case the memory write fails.
   2829     ///
   2830     /// @return
   2831     ///     The number of bytes that were actually written.
   2832     //------------------------------------------------------------------
   2833     virtual size_t
   2834     DoWriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error)
   2835     {
   2836         error.SetErrorStringWithFormat("error: %s does not support writing to processes", GetPluginName().GetCString());
   2837         return 0;
   2838     }
   2839 
   2840 
   2841     //------------------------------------------------------------------
   2842     /// Write all or part of a scalar value to memory.
   2843     ///
   2844     /// The value contained in \a scalar will be swapped to match the
   2845     /// byte order of the process that is being debugged. If \a size is
   2846     /// less than the size of scalar, the least significate \a size bytes
   2847     /// from scalar will be written. If \a size is larger than the byte
   2848     /// size of scalar, then the extra space will be padded with zeros
   2849     /// and the scalar value will be placed in the least significant
   2850     /// bytes in memory.
   2851     ///
   2852     /// @param[in] vm_addr
   2853     ///     A virtual load address that indicates where to start writing
   2854     ///     memory to.
   2855     ///
   2856     /// @param[in] scalar
   2857     ///     The scalar to write to the debugged process.
   2858     ///
   2859     /// @param[in] size
   2860     ///     This value can be smaller or larger than the scalar value
   2861     ///     itself. If \a size is smaller than the size of \a scalar,
   2862     ///     the least significant bytes in \a scalar will be used. If
   2863     ///     \a size is larger than the byte size of \a scalar, then
   2864     ///     the extra space will be padded with zeros. If \a size is
   2865     ///     set to UINT32_MAX, then the size of \a scalar will be used.
   2866     ///
   2867     /// @param[out] error
   2868     ///     An error value in case the memory write fails.
   2869     ///
   2870     /// @return
   2871     ///     The number of bytes that were actually written.
   2872     //------------------------------------------------------------------
   2873     size_t
   2874     WriteScalarToMemory (lldb::addr_t vm_addr,
   2875                          const Scalar &scalar,
   2876                          size_t size,
   2877                          Error &error);
   2878 
   2879     size_t
   2880     ReadScalarIntegerFromMemory (lldb::addr_t addr,
   2881                                  uint32_t byte_size,
   2882                                  bool is_signed,
   2883                                  Scalar &scalar,
   2884                                  Error &error);
   2885 
   2886     //------------------------------------------------------------------
   2887     /// Write memory to a process.
   2888     ///
   2889     /// This function will write memory to the current process's
   2890     /// address space and maintain any traps that might be present due
   2891     /// to software breakpoints.
   2892     ///
   2893     /// This function is not meant to be overridden by Process
   2894     /// subclasses, the subclasses should implement
   2895     /// Process::DoWriteMemory (lldb::addr_t, size_t, void *).
   2896     ///
   2897     /// @param[in] vm_addr
   2898     ///     A virtual load address that indicates where to start writing
   2899     ///     memory to.
   2900     ///
   2901     /// @param[in] buf
   2902     ///     A byte buffer that is at least \a size bytes long that
   2903     ///     contains the data to write.
   2904     ///
   2905     /// @param[in] size
   2906     ///     The number of bytes to write.
   2907     ///
   2908     /// @return
   2909     ///     The number of bytes that were actually written.
   2910     //------------------------------------------------------------------
   2911     size_t
   2912     WriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error);
   2913 
   2914 
   2915     //------------------------------------------------------------------
   2916     /// Actually allocate memory in the process.
   2917     ///
   2918     /// This function will allocate memory in the process's address
   2919     /// space.  This can't rely on the generic function calling mechanism,
   2920     /// since that requires this function.
   2921     ///
   2922     /// @param[in] size
   2923     ///     The size of the allocation requested.
   2924     ///
   2925     /// @return
   2926     ///     The address of the allocated buffer in the process, or
   2927     ///     LLDB_INVALID_ADDRESS if the allocation failed.
   2928     //------------------------------------------------------------------
   2929 
   2930     virtual lldb::addr_t
   2931     DoAllocateMemory (size_t size, uint32_t permissions, Error &error)
   2932     {
   2933         error.SetErrorStringWithFormat("error: %s does not support allocating in the debug process", GetPluginName().GetCString());
   2934         return LLDB_INVALID_ADDRESS;
   2935     }
   2936 
   2937 
   2938     //------------------------------------------------------------------
   2939     /// The public interface to allocating memory in the process.
   2940     ///
   2941     /// This function will allocate memory in the process's address
   2942     /// space.  This can't rely on the generic function calling mechanism,
   2943     /// since that requires this function.
   2944     ///
   2945     /// @param[in] size
   2946     ///     The size of the allocation requested.
   2947     ///
   2948     /// @param[in] permissions
   2949     ///     Or together any of the lldb::Permissions bits.  The permissions on
   2950     ///     a given memory allocation can't be changed after allocation.  Note
   2951     ///     that a block that isn't set writable can still be written on from lldb,
   2952     ///     just not by the process itself.
   2953     ///
   2954     /// @param[in/out] error
   2955     ///     An error object to fill in if things go wrong.
   2956     /// @return
   2957     ///     The address of the allocated buffer in the process, or
   2958     ///     LLDB_INVALID_ADDRESS if the allocation failed.
   2959     //------------------------------------------------------------------
   2960 
   2961     lldb::addr_t
   2962     AllocateMemory (size_t size, uint32_t permissions, Error &error);
   2963 
   2964 
   2965     //------------------------------------------------------------------
   2966     /// Resolve dynamically loaded indirect functions.
   2967     ///
   2968     /// @param[in] address
   2969     ///     The load address of the indirect function to resolve.
   2970     ///
   2971     /// @param[out] error
   2972     ///     An error value in case the resolve fails.
   2973     ///
   2974     /// @return
   2975     ///     The address of the resolved function.
   2976     ///     LLDB_INVALID_ADDRESS if the resolution failed.
   2977     //------------------------------------------------------------------
   2978 
   2979     virtual lldb::addr_t
   2980     ResolveIndirectFunction(const Address *address, Error &error)
   2981     {
   2982         error.SetErrorStringWithFormat("error: %s does not support indirect functions in the debug process", GetPluginName().GetCString());
   2983         return LLDB_INVALID_ADDRESS;
   2984     }
   2985 
   2986     virtual Error
   2987     GetMemoryRegionInfo (lldb::addr_t load_addr,
   2988                         MemoryRegionInfo &range_info)
   2989     {
   2990         Error error;
   2991         error.SetErrorString ("Process::GetMemoryRegionInfo() not supported");
   2992         return error;
   2993     }
   2994 
   2995     virtual Error
   2996     GetWatchpointSupportInfo (uint32_t &num)
   2997     {
   2998         Error error;
   2999         num = 0;
   3000         error.SetErrorString ("Process::GetWatchpointSupportInfo() not supported");
   3001         return error;
   3002     }
   3003 
   3004     virtual Error
   3005     GetWatchpointSupportInfo (uint32_t &num, bool& after)
   3006     {
   3007         Error error;
   3008         num = 0;
   3009         after = true;
   3010         error.SetErrorString ("Process::GetWatchpointSupportInfo() not supported");
   3011         return error;
   3012     }
   3013 
   3014     lldb::ModuleSP
   3015     ReadModuleFromMemory (const FileSpec& file_spec,
   3016                           lldb::addr_t header_addr);
   3017 
   3018     //------------------------------------------------------------------
   3019     /// Attempt to get the attributes for a region of memory in the process.
   3020     ///
   3021     /// It may be possible for the remote debug server to inspect attributes
   3022     /// for a region of memory in the process, such as whether there is a
   3023     /// valid page of memory at a given address or whether that page is
   3024     /// readable/writable/executable by the process.
   3025     ///
   3026     /// @param[in] load_addr
   3027     ///     The address of interest in the process.
   3028     ///
   3029     /// @param[out] permissions
   3030     ///     If this call returns successfully, this bitmask will have
   3031     ///     its Permissions bits set to indicate whether the region is
   3032     ///     readable/writable/executable.  If this call fails, the
   3033     ///     bitmask values are undefined.
   3034     ///
   3035     /// @return
   3036     ///     Returns true if it was able to determine the attributes of the
   3037     ///     memory region.  False if not.
   3038     //------------------------------------------------------------------
   3039 
   3040     virtual bool
   3041     GetLoadAddressPermissions (lldb::addr_t load_addr, uint32_t &permissions)
   3042     {
   3043         MemoryRegionInfo range_info;
   3044         permissions = 0;
   3045         Error error (GetMemoryRegionInfo (load_addr, range_info));
   3046         if (!error.Success())
   3047             return false;
   3048         if (range_info.GetReadable() == MemoryRegionInfo::eDontKnow
   3049             || range_info.GetWritable() == MemoryRegionInfo::eDontKnow
   3050             || range_info.GetExecutable() == MemoryRegionInfo::eDontKnow)
   3051         {
   3052             return false;
   3053         }
   3054 
   3055         if (range_info.GetReadable() == MemoryRegionInfo::eYes)
   3056             permissions |= lldb::ePermissionsReadable;
   3057 
   3058         if (range_info.GetWritable() == MemoryRegionInfo::eYes)
   3059             permissions |= lldb::ePermissionsWritable;
   3060 
   3061         if (range_info.GetExecutable() == MemoryRegionInfo::eYes)
   3062             permissions |= lldb::ePermissionsExecutable;
   3063 
   3064         return true;
   3065     }
   3066 
   3067     //------------------------------------------------------------------
   3068     /// Determines whether executing JIT-compiled code in this process
   3069     /// is possible.
   3070     ///
   3071     /// @return
   3072     ///     True if execution of JIT code is possible; false otherwise.
   3073     //------------------------------------------------------------------
   3074     bool CanJIT ();
   3075 
   3076     //------------------------------------------------------------------
   3077     /// Sets whether executing JIT-compiled code in this process
   3078     /// is possible.
   3079     ///
   3080     /// @param[in] can_jit
   3081     ///     True if execution of JIT code is possible; false otherwise.
   3082     //------------------------------------------------------------------
   3083     void SetCanJIT (bool can_jit);
   3084 
   3085     //------------------------------------------------------------------
   3086     /// Actually deallocate memory in the process.
   3087     ///
   3088     /// This function will deallocate memory in the process's address
   3089     /// space that was allocated with AllocateMemory.
   3090     ///
   3091     /// @param[in] ptr
   3092     ///     A return value from AllocateMemory, pointing to the memory you
   3093     ///     want to deallocate.
   3094     ///
   3095     /// @return
   3096     ///     \btrue if the memory was deallocated, \bfalse otherwise.
   3097     //------------------------------------------------------------------
   3098 
   3099     virtual Error
   3100     DoDeallocateMemory (lldb::addr_t ptr)
   3101     {
   3102         Error error;
   3103         error.SetErrorStringWithFormat("error: %s does not support deallocating in the debug process", GetPluginName().GetCString());
   3104         return error;
   3105     }
   3106 
   3107 
   3108     //------------------------------------------------------------------
   3109     /// The public interface to deallocating memory in the process.
   3110     ///
   3111     /// This function will deallocate memory in the process's address
   3112     /// space that was allocated with AllocateMemory.
   3113     ///
   3114     /// @param[in] ptr
   3115     ///     A return value from AllocateMemory, pointing to the memory you
   3116     ///     want to deallocate.
   3117     ///
   3118     /// @return
   3119     ///     \btrue if the memory was deallocated, \bfalse otherwise.
   3120     //------------------------------------------------------------------
   3121 
   3122     Error
   3123     DeallocateMemory (lldb::addr_t ptr);
   3124 
   3125     //------------------------------------------------------------------
   3126     /// Get any available STDOUT.
   3127     ///
   3128     /// If the process was launched without supplying valid file paths
   3129     /// for stdin, stdout, and stderr, then the Process class might
   3130     /// try to cache the STDOUT for the process if it is able. Events
   3131     /// will be queued indicating that there is STDOUT available that
   3132     /// can be retrieved using this function.
   3133     ///
   3134     /// @param[out] buf
   3135     ///     A buffer that will receive any STDOUT bytes that are
   3136     ///     currently available.
   3137     ///
   3138     /// @param[out] buf_size
   3139     ///     The size in bytes for the buffer \a buf.
   3140     ///
   3141     /// @return
   3142     ///     The number of bytes written into \a buf. If this value is
   3143     ///     equal to \a buf_size, another call to this function should
   3144     ///     be made to retrieve more STDOUT data.
   3145     //------------------------------------------------------------------
   3146     virtual size_t
   3147     GetSTDOUT (char *buf, size_t buf_size, Error &error);
   3148 
   3149     //------------------------------------------------------------------
   3150     /// Get any available STDERR.
   3151     ///
   3152     /// If the process was launched without supplying valid file paths
   3153     /// for stdin, stdout, and stderr, then the Process class might
   3154     /// try to cache the STDERR for the process if it is able. Events
   3155     /// will be queued indicating that there is STDERR available that
   3156     /// can be retrieved using this function.
   3157     ///
   3158     /// @param[out] buf
   3159     ///     A buffer that will receive any STDERR bytes that are
   3160     ///     currently available.
   3161     ///
   3162     /// @param[out] buf_size
   3163     ///     The size in bytes for the buffer \a buf.
   3164     ///
   3165     /// @return
   3166     ///     The number of bytes written into \a buf. If this value is
   3167     ///     equal to \a buf_size, another call to this function should
   3168     ///     be made to retrieve more STDERR data.
   3169     //------------------------------------------------------------------
   3170     virtual size_t
   3171     GetSTDERR (char *buf, size_t buf_size, Error &error);
   3172 
   3173     virtual size_t
   3174     PutSTDIN (const char *buf, size_t buf_size, Error &error)
   3175     {
   3176         error.SetErrorString("stdin unsupported");
   3177         return 0;
   3178     }
   3179 
   3180     //------------------------------------------------------------------
   3181     /// Get any available profile data.
   3182     ///
   3183     /// @param[out] buf
   3184     ///     A buffer that will receive any profile data bytes that are
   3185     ///     currently available.
   3186     ///
   3187     /// @param[out] buf_size
   3188     ///     The size in bytes for the buffer \a buf.
   3189     ///
   3190     /// @return
   3191     ///     The number of bytes written into \a buf. If this value is
   3192     ///     equal to \a buf_size, another call to this function should
   3193     ///     be made to retrieve more profile data.
   3194     //------------------------------------------------------------------
   3195     virtual size_t
   3196     GetAsyncProfileData (char *buf, size_t buf_size, Error &error);
   3197 
   3198     //----------------------------------------------------------------------
   3199     // Process Breakpoints
   3200     //----------------------------------------------------------------------
   3201     size_t
   3202     GetSoftwareBreakpointTrapOpcode (BreakpointSite* bp_site);
   3203 
   3204     virtual Error
   3205     EnableBreakpointSite (BreakpointSite *bp_site)
   3206     {
   3207         Error error;
   3208         error.SetErrorStringWithFormat("error: %s does not support enabling breakpoints", GetPluginName().GetCString());
   3209         return error;
   3210     }
   3211 
   3212 
   3213     virtual Error
   3214     DisableBreakpointSite (BreakpointSite *bp_site)
   3215     {
   3216         Error error;
   3217         error.SetErrorStringWithFormat("error: %s does not support disabling breakpoints", GetPluginName().GetCString());
   3218         return error;
   3219     }
   3220 
   3221 
   3222     // This is implemented completely using the lldb::Process API. Subclasses
   3223     // don't need to implement this function unless the standard flow of
   3224     // read existing opcode, write breakpoint opcode, verify breakpoint opcode
   3225     // doesn't work for a specific process plug-in.
   3226     virtual Error
   3227     EnableSoftwareBreakpoint (BreakpointSite *bp_site);
   3228 
   3229     // This is implemented completely using the lldb::Process API. Subclasses
   3230     // don't need to implement this function unless the standard flow of
   3231     // restoring original opcode in memory and verifying the restored opcode
   3232     // doesn't work for a specific process plug-in.
   3233     virtual Error
   3234     DisableSoftwareBreakpoint (BreakpointSite *bp_site);
   3235 
   3236     BreakpointSiteList &
   3237     GetBreakpointSiteList();
   3238 
   3239     const BreakpointSiteList &
   3240     GetBreakpointSiteList() const;
   3241 
   3242     void
   3243     DisableAllBreakpointSites ();
   3244 
   3245     Error
   3246     ClearBreakpointSiteByID (lldb::user_id_t break_id);
   3247 
   3248     lldb::break_id_t
   3249     CreateBreakpointSite (const lldb::BreakpointLocationSP &owner,
   3250                           bool use_hardware);
   3251 
   3252     Error
   3253     DisableBreakpointSiteByID (lldb::user_id_t break_id);
   3254 
   3255     Error
   3256     EnableBreakpointSiteByID (lldb::user_id_t break_id);
   3257 
   3258 
   3259     // BreakpointLocations use RemoveOwnerFromBreakpointSite to remove
   3260     // themselves from the owner's list of this breakpoint sites.
   3261     void
   3262     RemoveOwnerFromBreakpointSite (lldb::user_id_t owner_id,
   3263                                    lldb::user_id_t owner_loc_id,
   3264                                    lldb::BreakpointSiteSP &bp_site_sp);
   3265 
   3266     //----------------------------------------------------------------------
   3267     // Process Watchpoints (optional)
   3268     //----------------------------------------------------------------------
   3269     virtual Error
   3270     EnableWatchpoint (Watchpoint *wp, bool notify = true);
   3271 
   3272     virtual Error
   3273     DisableWatchpoint (Watchpoint *wp, bool notify = true);
   3274 
   3275     //------------------------------------------------------------------
   3276     // Thread Queries
   3277     //------------------------------------------------------------------
   3278     virtual bool
   3279     UpdateThreadList (ThreadList &old_thread_list, ThreadList &new_thread_list) = 0;
   3280 
   3281     void
   3282     UpdateThreadListIfNeeded ();
   3283 
   3284     ThreadList &
   3285     GetThreadList ()
   3286     {
   3287         return m_thread_list;
   3288     }
   3289 
   3290     uint32_t
   3291     GetNextThreadIndexID (uint64_t thread_id);
   3292 
   3293     lldb::ThreadSP
   3294     CreateOSPluginThread (lldb::tid_t tid, lldb::addr_t context);
   3295 
   3296     // Returns true if an index id has been assigned to a thread.
   3297     bool
   3298     HasAssignedIndexIDToThread(uint64_t sb_thread_id);
   3299 
   3300     // Given a thread_id, it will assign a more reasonable index id for display to the user.
   3301     // If the thread_id has previously been assigned, the same index id will be used.
   3302     uint32_t
   3303     AssignIndexIDToThread(uint64_t thread_id);
   3304 
   3305     //------------------------------------------------------------------
   3306     // Event Handling
   3307     //------------------------------------------------------------------
   3308     lldb::StateType
   3309     GetNextEvent (lldb::EventSP &event_sp);
   3310 
   3311     lldb::StateType
   3312     WaitForProcessToStop (const TimeValue *timeout, lldb::EventSP *event_sp_ptr = NULL);
   3313 
   3314     lldb::StateType
   3315     WaitForStateChangedEvents (const TimeValue *timeout, lldb::EventSP &event_sp);
   3316 
   3317     Event *
   3318     PeekAtStateChangedEvents ();
   3319 
   3320 
   3321     class
   3322     ProcessEventHijacker
   3323     {
   3324     public:
   3325         ProcessEventHijacker (Process &process, Listener *listener) :
   3326             m_process (process)
   3327         {
   3328             m_process.HijackProcessEvents (listener);
   3329         }
   3330         ~ProcessEventHijacker ()
   3331         {
   3332             m_process.RestoreProcessEvents();
   3333         }
   3334 
   3335     private:
   3336         Process &m_process;
   3337     };
   3338     friend class ProcessEventHijacker;
   3339     //------------------------------------------------------------------
   3340     /// If you need to ensure that you and only you will hear about some public
   3341     /// event, then make a new listener, set to listen to process events, and
   3342     /// then call this with that listener.  Then you will have to wait on that
   3343     /// listener explicitly for events (rather than using the GetNextEvent & WaitFor*
   3344     /// calls above.  Be sure to call RestoreProcessEvents when you are done.
   3345     ///
   3346     /// @param[in] listener
   3347     ///     This is the new listener to whom all process events will be delivered.
   3348     ///
   3349     /// @return
   3350     ///     Returns \b true if the new listener could be installed,
   3351     ///     \b false otherwise.
   3352     //------------------------------------------------------------------
   3353     bool
   3354     HijackProcessEvents (Listener *listener);
   3355 
   3356     //------------------------------------------------------------------
   3357     /// Restores the process event broadcasting to its normal state.
   3358     ///
   3359     //------------------------------------------------------------------
   3360     void
   3361     RestoreProcessEvents ();
   3362 
   3363 private:
   3364     //------------------------------------------------------------------
   3365     /// This is the part of the event handling that for a process event.
   3366     /// It decides what to do with the event and returns true if the
   3367     /// event needs to be propagated to the user, and false otherwise.
   3368     /// If the event is not propagated, this call will most likely set
   3369     /// the target to executing again.
   3370     /// There is only one place where this call should be called, HandlePrivateEvent.
   3371     /// Don't call it from anywhere else...
   3372     ///
   3373     /// @param[in] event_ptr
   3374     ///     This is the event we are handling.
   3375     ///
   3376     /// @return
   3377     ///     Returns \b true if the event should be reported to the
   3378     ///     user, \b false otherwise.
   3379     //------------------------------------------------------------------
   3380     bool
   3381     ShouldBroadcastEvent (Event *event_ptr);
   3382 
   3383 public:
   3384     const lldb::ABISP &
   3385     GetABI ();
   3386 
   3387     OperatingSystem *
   3388     GetOperatingSystem ()
   3389     {
   3390         return m_os_ap.get();
   3391     }
   3392 
   3393 
   3394     virtual LanguageRuntime *
   3395     GetLanguageRuntime (lldb::LanguageType language, bool retry_if_null = true);
   3396 
   3397     virtual CPPLanguageRuntime *
   3398     GetCPPLanguageRuntime (bool retry_if_null = true);
   3399 
   3400     virtual ObjCLanguageRuntime *
   3401     GetObjCLanguageRuntime (bool retry_if_null = true);
   3402 
   3403     bool
   3404     IsPossibleDynamicValue (ValueObject& in_value);
   3405 
   3406     bool
   3407     IsRunning () const;
   3408 
   3409     DynamicCheckerFunctions *GetDynamicCheckers()
   3410     {
   3411         return m_dynamic_checkers_ap.get();
   3412     }
   3413 
   3414     void SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers)
   3415     {
   3416         m_dynamic_checkers_ap.reset(dynamic_checkers);
   3417     }
   3418 
   3419     //------------------------------------------------------------------
   3420     /// Call this to set the lldb in the mode where it breaks on new thread
   3421     /// creations, and then auto-restarts.  This is useful when you are trying
   3422     /// to run only one thread, but either that thread or the kernel is creating
   3423     /// new threads in the process.  If you stop when the thread is created, you
   3424     /// can immediately suspend it, and keep executing only the one thread you intend.
   3425     ///
   3426     /// @return
   3427     ///     Returns \b true if we were able to start up the notification
   3428     ///     \b false otherwise.
   3429     //------------------------------------------------------------------
   3430     virtual bool
   3431     StartNoticingNewThreads()
   3432     {
   3433         return true;
   3434     }
   3435 
   3436     //------------------------------------------------------------------
   3437     /// Call this to turn off the stop & notice new threads mode.
   3438     ///
   3439     /// @return
   3440     ///     Returns \b true if we were able to start up the notification
   3441     ///     \b false otherwise.
   3442     //------------------------------------------------------------------
   3443     virtual bool
   3444     StopNoticingNewThreads()
   3445     {
   3446         return true;
   3447     }
   3448 
   3449     void
   3450     SetRunningUserExpression (bool on);
   3451 
   3452     //------------------------------------------------------------------
   3453     // lldb::ExecutionContextScope pure virtual functions
   3454     //------------------------------------------------------------------
   3455     virtual lldb::TargetSP
   3456     CalculateTarget ();
   3457 
   3458     virtual lldb::ProcessSP
   3459     CalculateProcess ()
   3460     {
   3461         return shared_from_this();
   3462     }
   3463 
   3464     virtual lldb::ThreadSP
   3465     CalculateThread ()
   3466     {
   3467         return lldb::ThreadSP();
   3468     }
   3469 
   3470     virtual lldb::StackFrameSP
   3471     CalculateStackFrame ()
   3472     {
   3473         return lldb::StackFrameSP();
   3474     }
   3475 
   3476     virtual void
   3477     CalculateExecutionContext (ExecutionContext &exe_ctx);
   3478 
   3479     void
   3480     SetSTDIOFileDescriptor (int file_descriptor);
   3481 
   3482     //------------------------------------------------------------------
   3483     // Add a permanent region of memory that should never be read or
   3484     // written to. This can be used to ensure that memory reads or writes
   3485     // to certain areas of memory never end up being sent to the
   3486     // DoReadMemory or DoWriteMemory functions which can improve
   3487     // performance.
   3488     //------------------------------------------------------------------
   3489     void
   3490     AddInvalidMemoryRegion (const LoadRange &region);
   3491 
   3492     //------------------------------------------------------------------
   3493     // Remove a permanent region of memory that should never be read or
   3494     // written to that was previously added with AddInvalidMemoryRegion.
   3495     //------------------------------------------------------------------
   3496     bool
   3497     RemoveInvalidMemoryRange (const LoadRange &region);
   3498 
   3499     //------------------------------------------------------------------
   3500     // If the setup code of a thread plan needs to do work that might involve
   3501     // calling a function in the target, it should not do that work directly
   3502     // in one of the thread plan functions (DidPush/WillResume) because
   3503     // such work needs to be handled carefully.  Instead, put that work in
   3504     // a PreResumeAction callback, and register it with the process.  It will
   3505     // get done before the actual "DoResume" gets called.
   3506     //------------------------------------------------------------------
   3507 
   3508     typedef bool (PreResumeActionCallback)(void *);
   3509 
   3510     void
   3511     AddPreResumeAction (PreResumeActionCallback callback, void *baton);
   3512 
   3513     bool
   3514     RunPreResumeActions ();
   3515 
   3516     void
   3517     ClearPreResumeActions ();
   3518 
   3519     ProcessRunLock &
   3520     GetRunLock ()
   3521     {
   3522         if (Host::GetCurrentThread() == m_private_state_thread)
   3523             return m_private_run_lock;
   3524         else
   3525             return m_public_run_lock;
   3526     }
   3527 
   3528 protected:
   3529     //------------------------------------------------------------------
   3530     // NextEventAction provides a way to register an action on the next
   3531     // event that is delivered to this process.  There is currently only
   3532     // one next event action allowed in the process at one time.  If a
   3533     // new "NextEventAction" is added while one is already present, the
   3534     // old action will be discarded (with HandleBeingUnshipped called
   3535     // after it is discarded.)
   3536     //
   3537     // If you want to resume the process as a result of a resume action,
   3538     // call RequestResume, don't call Resume directly.
   3539     //------------------------------------------------------------------
   3540     class NextEventAction
   3541     {
   3542     public:
   3543         typedef enum EventActionResult
   3544         {
   3545             eEventActionSuccess,
   3546             eEventActionRetry,
   3547             eEventActionExit
   3548         } EventActionResult;
   3549 
   3550         NextEventAction (Process *process) :
   3551             m_process(process)
   3552         {
   3553         }
   3554 
   3555         virtual
   3556         ~NextEventAction()
   3557         {
   3558         }
   3559 
   3560         virtual EventActionResult PerformAction (lldb::EventSP &event_sp) = 0;
   3561         virtual void HandleBeingUnshipped () {}
   3562         virtual EventActionResult HandleBeingInterrupted () = 0;
   3563         virtual const char *GetExitString() = 0;
   3564         void RequestResume()
   3565         {
   3566             m_process->m_resume_requested = true;
   3567         }
   3568     protected:
   3569         Process *m_process;
   3570     };
   3571 
   3572     void SetNextEventAction (Process::NextEventAction *next_event_action)
   3573     {
   3574         if (m_next_event_action_ap.get())
   3575             m_next_event_action_ap->HandleBeingUnshipped();
   3576 
   3577         m_next_event_action_ap.reset(next_event_action);
   3578     }
   3579 
   3580     // This is the completer for Attaching:
   3581     class AttachCompletionHandler : public NextEventAction
   3582     {
   3583     public:
   3584         AttachCompletionHandler (Process *process, uint32_t exec_count) :
   3585             NextEventAction (process),
   3586             m_exec_count (exec_count)
   3587         {
   3588         }
   3589 
   3590         virtual
   3591         ~AttachCompletionHandler()
   3592         {
   3593         }
   3594 
   3595         virtual EventActionResult PerformAction (lldb::EventSP &event_sp);
   3596         virtual EventActionResult HandleBeingInterrupted ();
   3597         virtual const char *GetExitString();
   3598     private:
   3599         uint32_t m_exec_count;
   3600         std::string m_exit_string;
   3601     };
   3602 
   3603     bool
   3604     HijackPrivateProcessEvents (Listener *listener);
   3605 
   3606     void
   3607     RestorePrivateProcessEvents ();
   3608 
   3609     bool
   3610     PrivateStateThreadIsValid () const
   3611     {
   3612         return IS_VALID_LLDB_HOST_THREAD(m_private_state_thread);
   3613     }
   3614 
   3615     //------------------------------------------------------------------
   3616     // Type definitions
   3617     //------------------------------------------------------------------
   3618     typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP> LanguageRuntimeCollection;
   3619 
   3620     struct PreResumeCallbackAndBaton
   3621     {
   3622         bool (*callback) (void *);
   3623         void *baton;
   3624         PreResumeCallbackAndBaton (PreResumeActionCallback in_callback, void *in_baton) :
   3625             callback (in_callback),
   3626             baton (in_baton)
   3627         {
   3628         }
   3629     };
   3630 
   3631     //------------------------------------------------------------------
   3632     // Member variables
   3633     //------------------------------------------------------------------
   3634     Target &                    m_target;               ///< The target that owns this process.
   3635     ThreadSafeValue<lldb::StateType>  m_public_state;
   3636     ThreadSafeValue<lldb::StateType>  m_private_state; // The actual state of our process
   3637     Broadcaster                 m_private_state_broadcaster;  // This broadcaster feeds state changed events into the private state thread's listener.
   3638     Broadcaster                 m_private_state_control_broadcaster; // This is the control broadcaster, used to pause, resume & stop the private state thread.
   3639     Listener                    m_private_state_listener;     // This is the listener for the private state thread.
   3640     Predicate<bool>             m_private_state_control_wait; /// This Predicate is used to signal that a control operation is complete.
   3641     lldb::thread_t              m_private_state_thread;  // Thread ID for the thread that watches interal state events
   3642     ProcessModID                m_mod_id;               ///< Tracks the state of the process over stops and other alterations.
   3643     uint32_t                    m_process_unique_id;    ///< Each lldb_private::Process class that is created gets a unique integer ID that increments with each new instance
   3644     uint32_t                    m_thread_index_id;      ///< Each thread is created with a 1 based index that won't get re-used.
   3645     std::map<uint64_t, uint32_t> m_thread_id_to_index_id_map;
   3646     int                         m_exit_status;          ///< The exit status of the process, or -1 if not set.
   3647     std::string                 m_exit_string;          ///< A textual description of why a process exited.
   3648     Mutex                       m_thread_mutex;
   3649     ThreadList                  m_thread_list_real;     ///< The threads for this process as are known to the protocol we are debugging with
   3650     ThreadList                  m_thread_list;          ///< The threads for this process as the user will see them. This is usually the same as
   3651                                                         ///< m_thread_list_real, but might be different if there is an OS plug-in creating memory threads
   3652     std::vector<Notifications>  m_notifications;        ///< The list of notifications that this process can deliver.
   3653     std::vector<lldb::addr_t>   m_image_tokens;
   3654     Listener                    &m_listener;
   3655     BreakpointSiteList          m_breakpoint_site_list; ///< This is the list of breakpoint locations we intend to insert in the target.
   3656     std::unique_ptr<DynamicLoader> m_dyld_ap;
   3657     std::unique_ptr<DynamicCheckerFunctions> m_dynamic_checkers_ap; ///< The functions used by the expression parser to validate data that expressions use.
   3658     std::unique_ptr<OperatingSystem> m_os_ap;
   3659     UnixSignals                 m_unix_signals;         /// This is the current signal set for this process.
   3660     lldb::ABISP                 m_abi_sp;
   3661     lldb::InputReaderSP         m_process_input_reader;
   3662     Communication               m_stdio_communication;
   3663     Mutex                       m_stdio_communication_mutex;
   3664     std::string                 m_stdout_data;
   3665     std::string                 m_stderr_data;
   3666     Mutex                       m_profile_data_comm_mutex;
   3667     std::vector<std::string>    m_profile_data;
   3668     MemoryCache                 m_memory_cache;
   3669     AllocatedMemoryCache        m_allocated_memory_cache;
   3670     bool                        m_should_detach;   /// Should we detach if the process object goes away with an explicit call to Kill or Detach?
   3671     LanguageRuntimeCollection   m_language_runtimes;
   3672     std::unique_ptr<NextEventAction> m_next_event_action_ap;
   3673     std::vector<PreResumeCallbackAndBaton> m_pre_resume_actions;
   3674     ProcessRunLock              m_public_run_lock;
   3675     ProcessRunLock              m_private_run_lock;
   3676     Predicate<bool>             m_currently_handling_event; // This predicate is set in HandlePrivateEvent while all its business is being done.
   3677     bool                        m_currently_handling_do_on_removals;
   3678     bool                        m_resume_requested;         // If m_currently_handling_event or m_currently_handling_do_on_removals are true, Resume will only request a resume, using this flag to check.
   3679     bool                        m_finalize_called;
   3680     bool                        m_clear_thread_plans_on_stop;
   3681     lldb::StateType             m_last_broadcast_state;   /// This helps with the Public event coalescing in ShouldBroadcastEvent.
   3682     bool m_destroy_in_process;
   3683 
   3684     enum {
   3685         eCanJITDontKnow= 0,
   3686         eCanJITYes,
   3687         eCanJITNo
   3688     } m_can_jit;
   3689 
   3690     size_t
   3691     RemoveBreakpointOpcodesFromBuffer (lldb::addr_t addr, size_t size, uint8_t *buf) const;
   3692 
   3693     void
   3694     SynchronouslyNotifyStateChanged (lldb::StateType state);
   3695 
   3696     void
   3697     SetPublicState (lldb::StateType new_state, bool restarted);
   3698 
   3699     void
   3700     SetPrivateState (lldb::StateType state);
   3701 
   3702     bool
   3703     StartPrivateStateThread (bool force = false);
   3704 
   3705     void
   3706     StopPrivateStateThread ();
   3707 
   3708     void
   3709     PausePrivateStateThread ();
   3710 
   3711     void
   3712     ResumePrivateStateThread ();
   3713 
   3714     static void *
   3715     PrivateStateThread (void *arg);
   3716 
   3717     void *
   3718     RunPrivateStateThread ();
   3719 
   3720     void
   3721     HandlePrivateEvent (lldb::EventSP &event_sp);
   3722 
   3723     lldb::StateType
   3724     WaitForProcessStopPrivate (const TimeValue *timeout, lldb::EventSP &event_sp);
   3725 
   3726     // This waits for both the state change broadcaster, and the control broadcaster.
   3727     // If control_only, it only waits for the control broadcaster.
   3728 
   3729     bool
   3730     WaitForEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp, bool control_only);
   3731 
   3732     lldb::StateType
   3733     WaitForStateChangedEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp);
   3734 
   3735     lldb::StateType
   3736     WaitForState (const TimeValue *timeout,
   3737                   const lldb::StateType *match_states,
   3738                   const uint32_t num_match_states);
   3739 
   3740     size_t
   3741     WriteMemoryPrivate (lldb::addr_t addr, const void *buf, size_t size, Error &error);
   3742 
   3743     void
   3744     AppendSTDOUT (const char *s, size_t len);
   3745 
   3746     void
   3747     AppendSTDERR (const char *s, size_t len);
   3748 
   3749     void
   3750     BroadcastAsyncProfileData(const std::string &one_profile_data);
   3751 
   3752     static void
   3753     STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len);
   3754 
   3755     void
   3756     PushProcessInputReader ();
   3757 
   3758     void
   3759     PopProcessInputReader ();
   3760 
   3761     void
   3762     ResetProcessInputReader ();
   3763 
   3764     static size_t
   3765     ProcessInputReaderCallback (void *baton,
   3766                                 InputReader &reader,
   3767                                 lldb::InputReaderAction notification,
   3768                                 const char *bytes,
   3769                                 size_t bytes_len);
   3770 
   3771     Error
   3772     HaltForDestroyOrDetach(lldb::EventSP &exit_event_sp);
   3773 
   3774 private:
   3775     //------------------------------------------------------------------
   3776     // For Process only
   3777     //------------------------------------------------------------------
   3778     void ControlPrivateStateThread (uint32_t signal);
   3779 
   3780     DISALLOW_COPY_AND_ASSIGN (Process);
   3781 
   3782 };
   3783 
   3784 } // namespace lldb_private
   3785 
   3786 #endif  // liblldb_Process_h_
   3787