Process.h revision cf88b95d435873bd312e716da5701cf3882c5da4
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
49namespace lldb_private {
50
51//----------------------------------------------------------------------
52// ProcessProperties
53//----------------------------------------------------------------------
54class ProcessProperties : public Properties
55{
56public:
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
102typedef 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//----------------------------------------------------------------------
112class ProcessInfo
113{
114public:
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
310protected:
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//----------------------------------------------------------------------
330class ProcessInstanceInfo : public ProcessInfo
331{
332public:
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
423protected:
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
436class ProcessLaunchInfo : public ProcessInfo
437{
438public:
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
812protected:
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
832class ProcessAttachInfo : public ProcessInstanceInfo
833{
834public:
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    }
945protected:
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
953class ProcessLaunchCommandOptions : public Options
954{
955public:
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
998class ProcessInstanceInfoMatch
999{
1000public:
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
1064protected:
1065    ProcessInstanceInfo m_match_info;
1066    NameMatchType m_name_match_type;
1067    bool m_match_all_users;
1068};
1069
1070class ProcessInstanceInfoList
1071{
1072public:
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
1139protected:
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
1150class ProcessModID
1151{
1152friend bool operator== (const ProcessModID &lhs, const ProcessModID &rhs);
1153public:
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
1236private:
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};
1244inline 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
1253inline 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
1262class MemoryRegionInfo
1263{
1264public:
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
1340protected:
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//----------------------------------------------------------------------
1351class 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{
1359friend class ThreadList;
1360friend class ClangFunction; // For WaitForStateChangeEventsPrivate
1361friend class CommandObjectProcessLaunch;
1362friend class ProcessEventData;
1363friend class CommandObjectBreakpointCommand;
1364friend class StopInfo;
1365
1366public:
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
2510protected:
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
2534public:
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
3363private:
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
3383public:
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
3528protected:
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
3774private:
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