1 //===-- Process.cpp ---------------------------------------------*- 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 #include "lldb/lldb-python.h"
11 
12 #include "lldb/Target/Process.h"
13 #include "lldb/Breakpoint/StoppointCallbackContext.h"
14 #include "lldb/Breakpoint/BreakpointLocation.h"
15 #include "lldb/Core/Event.h"
16 #include "lldb/Core/Debugger.h"
17 #include "lldb/Core/Log.h"
18 #include "lldb/Core/Module.h"
19 #include "lldb/Core/ModuleSpec.h"
20 #include "lldb/Core/PluginManager.h"
21 #include "lldb/Core/State.h"
22 #include "lldb/Core/StreamFile.h"
23 #include "lldb/Expression/ClangUserExpression.h"
24 #include "lldb/Expression/IRDynamicChecks.h"
25 #include "lldb/Host/ConnectionFileDescriptor.h"
26 #include "lldb/Host/Host.h"
27 #include "lldb/Host/HostInfo.h"
28 #include "lldb/Host/Pipe.h"
29 #include "lldb/Host/Terminal.h"
30 #include "lldb/Host/ThreadLauncher.h"
31 #include "lldb/Interpreter/CommandInterpreter.h"
32 #include "lldb/Interpreter/OptionValueProperties.h"
33 #include "lldb/Symbol/Symbol.h"
34 #include "lldb/Target/ABI.h"
35 #include "lldb/Target/DynamicLoader.h"
36 #include "lldb/Target/InstrumentationRuntime.h"
37 #include "lldb/Target/JITLoader.h"
38 #include "lldb/Target/JITLoaderList.h"
39 #include "lldb/Target/MemoryHistory.h"
40 #include "lldb/Target/MemoryRegionInfo.h"
41 #include "lldb/Target/OperatingSystem.h"
42 #include "lldb/Target/LanguageRuntime.h"
43 #include "lldb/Target/CPPLanguageRuntime.h"
44 #include "lldb/Target/ObjCLanguageRuntime.h"
45 #include "lldb/Target/Platform.h"
46 #include "lldb/Target/RegisterContext.h"
47 #include "lldb/Target/StopInfo.h"
48 #include "lldb/Target/SystemRuntime.h"
49 #include "lldb/Target/Target.h"
50 #include "lldb/Target/TargetList.h"
51 #include "lldb/Target/Thread.h"
52 #include "lldb/Target/ThreadPlan.h"
53 #include "lldb/Target/ThreadPlanBase.h"
54 #include "lldb/Target/UnixSignals.h"
55 #include "lldb/Utility/NameMatches.h"
56 #include "Plugins/Process/Utility/InferiorCallPOSIX.h"
57 
58 using namespace lldb;
59 using namespace lldb_private;
60 
61 
62 // Comment out line below to disable memory caching, overriding the process setting
63 // target.process.disable-memory-cache
64 #define ENABLE_MEMORY_CACHING
65 
66 #ifdef ENABLE_MEMORY_CACHING
67 #define DISABLE_MEM_CACHE_DEFAULT false
68 #else
69 #define DISABLE_MEM_CACHE_DEFAULT true
70 #endif
71 
72 class ProcessOptionValueProperties : public OptionValueProperties
73 {
74 public:
75     ProcessOptionValueProperties (const ConstString &name) :
76         OptionValueProperties (name)
77     {
78     }
79 
80     // This constructor is used when creating ProcessOptionValueProperties when it
81     // is part of a new lldb_private::Process instance. It will copy all current
82     // global property values as needed
83     ProcessOptionValueProperties (ProcessProperties *global_properties) :
84         OptionValueProperties(*global_properties->GetValueProperties())
85     {
86     }
87 
88     virtual const Property *
89     GetPropertyAtIndex (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const
90     {
91         // When getting the value for a key from the process options, we will always
92         // try and grab the setting from the current process if there is one. Else we just
93         // use the one from this instance.
94         if (exe_ctx)
95         {
96             Process *process = exe_ctx->GetProcessPtr();
97             if (process)
98             {
99                 ProcessOptionValueProperties *instance_properties = static_cast<ProcessOptionValueProperties *>(process->GetValueProperties().get());
100                 if (this != instance_properties)
101                     return instance_properties->ProtectedGetPropertyAtIndex (idx);
102             }
103         }
104         return ProtectedGetPropertyAtIndex (idx);
105     }
106 };
107 
108 static PropertyDefinition
109 g_properties[] =
110 {
111     { "disable-memory-cache" , OptionValue::eTypeBoolean, false, DISABLE_MEM_CACHE_DEFAULT, NULL, NULL, "Disable reading and caching of memory in fixed-size units." },
112     { "extra-startup-command", OptionValue::eTypeArray  , false, OptionValue::eTypeString, NULL, NULL, "A list containing extra commands understood by the particular process plugin used.  "
113                                                                                                        "For instance, to turn on debugserver logging set this to \"QSetLogging:bitmask=LOG_DEFAULT;\"" },
114     { "ignore-breakpoints-in-expressions", OptionValue::eTypeBoolean, true, true, NULL, NULL, "If true, breakpoints will be ignored during expression evaluation." },
115     { "unwind-on-error-in-expressions", OptionValue::eTypeBoolean, true, true, NULL, NULL, "If true, errors in expression evaluation will unwind the stack back to the state before the call." },
116     { "python-os-plugin-path", OptionValue::eTypeFileSpec, false, true, NULL, NULL, "A path to a python OS plug-in module file that contains a OperatingSystemPlugIn class." },
117     { "stop-on-sharedlibrary-events" , OptionValue::eTypeBoolean, true, false, NULL, NULL, "If true, stop when a shared library is loaded or unloaded." },
118     { "detach-keeps-stopped" , OptionValue::eTypeBoolean, true, false, NULL, NULL, "If true, detach will attempt to keep the process stopped." },
119     { "memory-cache-line-size" , OptionValue::eTypeUInt64, false, 512, NULL, NULL, "The memory cache line size" },
120     {  NULL                  , OptionValue::eTypeInvalid, false, 0, NULL, NULL, NULL  }
121 };
122 
123 enum {
124     ePropertyDisableMemCache,
125     ePropertyExtraStartCommand,
126     ePropertyIgnoreBreakpointsInExpressions,
127     ePropertyUnwindOnErrorInExpressions,
128     ePropertyPythonOSPluginPath,
129     ePropertyStopOnSharedLibraryEvents,
130     ePropertyDetachKeepsStopped,
131     ePropertyMemCacheLineSize
132 };
133 
134 ProcessProperties::ProcessProperties (lldb_private::Process *process) :
135     Properties (),
136     m_process (process) // Can be NULL for global ProcessProperties
137 {
138     if (process == NULL)
139     {
140         // Global process properties, set them up one time
141         m_collection_sp.reset (new ProcessOptionValueProperties(ConstString("process")));
142         m_collection_sp->Initialize(g_properties);
143         m_collection_sp->AppendProperty(ConstString("thread"),
144                                         ConstString("Settings specific to threads."),
145                                         true,
146                                         Thread::GetGlobalProperties()->GetValueProperties());
147     }
148     else
149     {
150         m_collection_sp.reset (new ProcessOptionValueProperties(Process::GetGlobalProperties().get()));
151         m_collection_sp->SetValueChangedCallback(ePropertyPythonOSPluginPath, ProcessProperties::OptionValueChangedCallback, this);
152     }
153 }
154 
155 ProcessProperties::~ProcessProperties()
156 {
157 }
158 
159 void
160 ProcessProperties::OptionValueChangedCallback (void *baton, OptionValue *option_value)
161 {
162     ProcessProperties *properties = (ProcessProperties *)baton;
163     if (properties->m_process)
164         properties->m_process->LoadOperatingSystemPlugin(true);
165 }
166 
167 bool
168 ProcessProperties::GetDisableMemoryCache() const
169 {
170     const uint32_t idx = ePropertyDisableMemCache;
171     return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
172 }
173 
174 uint64_t
175 ProcessProperties::GetMemoryCacheLineSize() const
176 {
177     const uint32_t idx = ePropertyMemCacheLineSize;
178     return m_collection_sp->GetPropertyAtIndexAsUInt64 (NULL, idx, g_properties[idx].default_uint_value);
179 }
180 
181 Args
182 ProcessProperties::GetExtraStartupCommands () const
183 {
184     Args args;
185     const uint32_t idx = ePropertyExtraStartCommand;
186     m_collection_sp->GetPropertyAtIndexAsArgs(NULL, idx, args);
187     return args;
188 }
189 
190 void
191 ProcessProperties::SetExtraStartupCommands (const Args &args)
192 {
193     const uint32_t idx = ePropertyExtraStartCommand;
194     m_collection_sp->SetPropertyAtIndexFromArgs(NULL, idx, args);
195 }
196 
197 FileSpec
198 ProcessProperties::GetPythonOSPluginPath () const
199 {
200     const uint32_t idx = ePropertyPythonOSPluginPath;
201     return m_collection_sp->GetPropertyAtIndexAsFileSpec(NULL, idx);
202 }
203 
204 void
205 ProcessProperties::SetPythonOSPluginPath (const FileSpec &file)
206 {
207     const uint32_t idx = ePropertyPythonOSPluginPath;
208     m_collection_sp->SetPropertyAtIndexAsFileSpec(NULL, idx, file);
209 }
210 
211 
212 bool
213 ProcessProperties::GetIgnoreBreakpointsInExpressions () const
214 {
215     const uint32_t idx = ePropertyIgnoreBreakpointsInExpressions;
216     return m_collection_sp->GetPropertyAtIndexAsBoolean(NULL, idx, g_properties[idx].default_uint_value != 0);
217 }
218 
219 void
220 ProcessProperties::SetIgnoreBreakpointsInExpressions (bool ignore)
221 {
222     const uint32_t idx = ePropertyIgnoreBreakpointsInExpressions;
223     m_collection_sp->SetPropertyAtIndexAsBoolean(NULL, idx, ignore);
224 }
225 
226 bool
227 ProcessProperties::GetUnwindOnErrorInExpressions () const
228 {
229     const uint32_t idx = ePropertyUnwindOnErrorInExpressions;
230     return m_collection_sp->GetPropertyAtIndexAsBoolean(NULL, idx, g_properties[idx].default_uint_value != 0);
231 }
232 
233 void
234 ProcessProperties::SetUnwindOnErrorInExpressions (bool ignore)
235 {
236     const uint32_t idx = ePropertyUnwindOnErrorInExpressions;
237     m_collection_sp->SetPropertyAtIndexAsBoolean(NULL, idx, ignore);
238 }
239 
240 bool
241 ProcessProperties::GetStopOnSharedLibraryEvents () const
242 {
243     const uint32_t idx = ePropertyStopOnSharedLibraryEvents;
244     return m_collection_sp->GetPropertyAtIndexAsBoolean(NULL, idx, g_properties[idx].default_uint_value != 0);
245 }
246 
247 void
248 ProcessProperties::SetStopOnSharedLibraryEvents (bool stop)
249 {
250     const uint32_t idx = ePropertyStopOnSharedLibraryEvents;
251     m_collection_sp->SetPropertyAtIndexAsBoolean(NULL, idx, stop);
252 }
253 
254 bool
255 ProcessProperties::GetDetachKeepsStopped () const
256 {
257     const uint32_t idx = ePropertyDetachKeepsStopped;
258     return m_collection_sp->GetPropertyAtIndexAsBoolean(NULL, idx, g_properties[idx].default_uint_value != 0);
259 }
260 
261 void
262 ProcessProperties::SetDetachKeepsStopped (bool stop)
263 {
264     const uint32_t idx = ePropertyDetachKeepsStopped;
265     m_collection_sp->SetPropertyAtIndexAsBoolean(NULL, idx, stop);
266 }
267 
268 void
269 ProcessInstanceInfo::Dump (Stream &s, Platform *platform) const
270 {
271     const char *cstr;
272     if (m_pid != LLDB_INVALID_PROCESS_ID)
273         s.Printf ("    pid = %" PRIu64 "\n", m_pid);
274 
275     if (m_parent_pid != LLDB_INVALID_PROCESS_ID)
276         s.Printf (" parent = %" PRIu64 "\n", m_parent_pid);
277 
278     if (m_executable)
279     {
280         s.Printf ("   name = %s\n", m_executable.GetFilename().GetCString());
281         s.PutCString ("   file = ");
282         m_executable.Dump(&s);
283         s.EOL();
284     }
285     const uint32_t argc = m_arguments.GetArgumentCount();
286     if (argc > 0)
287     {
288         for (uint32_t i=0; i<argc; i++)
289         {
290             const char *arg = m_arguments.GetArgumentAtIndex(i);
291             if (i < 10)
292                 s.Printf (" arg[%u] = %s\n", i, arg);
293             else
294                 s.Printf ("arg[%u] = %s\n", i, arg);
295         }
296     }
297 
298     const uint32_t envc = m_environment.GetArgumentCount();
299     if (envc > 0)
300     {
301         for (uint32_t i=0; i<envc; i++)
302         {
303             const char *env = m_environment.GetArgumentAtIndex(i);
304             if (i < 10)
305                 s.Printf (" env[%u] = %s\n", i, env);
306             else
307                 s.Printf ("env[%u] = %s\n", i, env);
308         }
309     }
310 
311     if (m_arch.IsValid())
312         s.Printf ("   arch = %s\n", m_arch.GetTriple().str().c_str());
313 
314     if (m_uid != UINT32_MAX)
315     {
316         cstr = platform->GetUserName (m_uid);
317         s.Printf ("    uid = %-5u (%s)\n", m_uid, cstr ? cstr : "");
318     }
319     if (m_gid != UINT32_MAX)
320     {
321         cstr = platform->GetGroupName (m_gid);
322         s.Printf ("    gid = %-5u (%s)\n", m_gid, cstr ? cstr : "");
323     }
324     if (m_euid != UINT32_MAX)
325     {
326         cstr = platform->GetUserName (m_euid);
327         s.Printf ("   euid = %-5u (%s)\n", m_euid, cstr ? cstr : "");
328     }
329     if (m_egid != UINT32_MAX)
330     {
331         cstr = platform->GetGroupName (m_egid);
332         s.Printf ("   egid = %-5u (%s)\n", m_egid, cstr ? cstr : "");
333     }
334 }
335 
336 void
337 ProcessInstanceInfo::DumpTableHeader (Stream &s, Platform *platform, bool show_args, bool verbose)
338 {
339     const char *label;
340     if (show_args || verbose)
341         label = "ARGUMENTS";
342     else
343         label = "NAME";
344 
345     if (verbose)
346     {
347         s.Printf     ("PID    PARENT USER       GROUP      EFF USER   EFF GROUP  TRIPLE                   %s\n", label);
348         s.PutCString ("====== ====== ========== ========== ========== ========== ======================== ============================\n");
349     }
350     else
351     {
352         s.Printf     ("PID    PARENT USER       TRIPLE                   %s\n", label);
353         s.PutCString ("====== ====== ========== ======================== ============================\n");
354     }
355 }
356 
357 void
358 ProcessInstanceInfo::DumpAsTableRow (Stream &s, Platform *platform, bool show_args, bool verbose) const
359 {
360     if (m_pid != LLDB_INVALID_PROCESS_ID)
361     {
362         const char *cstr;
363         s.Printf ("%-6" PRIu64 " %-6" PRIu64 " ", m_pid, m_parent_pid);
364 
365 
366         if (verbose)
367         {
368             cstr = platform->GetUserName (m_uid);
369             if (cstr && cstr[0]) // Watch for empty string that indicates lookup failed
370                 s.Printf ("%-10s ", cstr);
371             else
372                 s.Printf ("%-10u ", m_uid);
373 
374             cstr = platform->GetGroupName (m_gid);
375             if (cstr && cstr[0]) // Watch for empty string that indicates lookup failed
376                 s.Printf ("%-10s ", cstr);
377             else
378                 s.Printf ("%-10u ", m_gid);
379 
380             cstr = platform->GetUserName (m_euid);
381             if (cstr && cstr[0]) // Watch for empty string that indicates lookup failed
382                 s.Printf ("%-10s ", cstr);
383             else
384                 s.Printf ("%-10u ", m_euid);
385 
386             cstr = platform->GetGroupName (m_egid);
387             if (cstr && cstr[0]) // Watch for empty string that indicates lookup failed
388                 s.Printf ("%-10s ", cstr);
389             else
390                 s.Printf ("%-10u ", m_egid);
391             s.Printf ("%-24s ", m_arch.IsValid() ? m_arch.GetTriple().str().c_str() : "");
392         }
393         else
394         {
395             s.Printf ("%-10s %-24s ",
396                       platform->GetUserName (m_euid),
397                       m_arch.IsValid() ? m_arch.GetTriple().str().c_str() : "");
398         }
399 
400         if (verbose || show_args)
401         {
402             const uint32_t argc = m_arguments.GetArgumentCount();
403             if (argc > 0)
404             {
405                 for (uint32_t i=0; i<argc; i++)
406                 {
407                     if (i > 0)
408                         s.PutChar (' ');
409                     s.PutCString (m_arguments.GetArgumentAtIndex(i));
410                 }
411             }
412         }
413         else
414         {
415             s.PutCString (GetName());
416         }
417 
418         s.EOL();
419     }
420 }
421 
422 Error
423 ProcessLaunchCommandOptions::SetOptionValue (uint32_t option_idx, const char *option_arg)
424 {
425     Error error;
426     const int short_option = m_getopt_table[option_idx].val;
427 
428     switch (short_option)
429     {
430         case 's':   // Stop at program entry point
431             launch_info.GetFlags().Set (eLaunchFlagStopAtEntry);
432             break;
433 
434         case 'i':   // STDIN for read only
435         {
436             FileAction action;
437             if (action.Open (STDIN_FILENO, option_arg, true, false))
438                 launch_info.AppendFileAction (action);
439             break;
440         }
441 
442         case 'o':   // Open STDOUT for write only
443         {
444             FileAction action;
445             if (action.Open (STDOUT_FILENO, option_arg, false, true))
446                 launch_info.AppendFileAction (action);
447             break;
448         }
449 
450         case 'e':   // STDERR for write only
451         {
452             FileAction action;
453             if (action.Open (STDERR_FILENO, option_arg, false, true))
454                 launch_info.AppendFileAction (action);
455             break;
456         }
457 
458         case 'p':   // Process plug-in name
459             launch_info.SetProcessPluginName (option_arg);
460             break;
461 
462         case 'n':   // Disable STDIO
463         {
464             FileAction action;
465             if (action.Open (STDIN_FILENO, "/dev/null", true, false))
466                 launch_info.AppendFileAction (action);
467             if (action.Open (STDOUT_FILENO, "/dev/null", false, true))
468                 launch_info.AppendFileAction (action);
469             if (action.Open (STDERR_FILENO, "/dev/null", false, true))
470                 launch_info.AppendFileAction (action);
471             break;
472         }
473 
474         case 'w':
475             launch_info.SetWorkingDirectory (option_arg);
476             break;
477 
478         case 't':   // Open process in new terminal window
479             launch_info.GetFlags().Set (eLaunchFlagLaunchInTTY);
480             break;
481 
482         case 'a':
483             if (!launch_info.GetArchitecture().SetTriple (option_arg, m_interpreter.GetPlatform(true).get()))
484                 launch_info.GetArchitecture().SetTriple (option_arg);
485             break;
486 
487         case 'A':   // Disable ASLR.
488         {
489             bool success;
490             const bool disable_aslr_arg = Args::StringToBoolean (option_arg, true, &success);
491             if (success)
492                 disable_aslr = disable_aslr_arg ? eLazyBoolYes : eLazyBoolNo;
493             else
494                 error.SetErrorStringWithFormat ("Invalid boolean value for disable-aslr option: '%s'", option_arg ? option_arg : "<null>");
495             break;
496         }
497 
498         case 'X':   // shell expand args.
499         {
500             bool success;
501             const bool expand_args = Args::StringToBoolean (option_arg, true, &success);
502             if (success)
503                 launch_info.SetShellExpandArguments(expand_args);
504             else
505                 error.SetErrorStringWithFormat ("Invalid boolean value for shell-expand-args option: '%s'", option_arg ? option_arg : "<null>");
506             break;
507         }
508 
509         case 'c':
510             if (option_arg && option_arg[0])
511                 launch_info.SetShell (FileSpec(option_arg, false));
512             else
513                 launch_info.SetShell (HostInfo::GetDefaultShell());
514             break;
515 
516         case 'v':
517             launch_info.GetEnvironmentEntries().AppendArgument(option_arg);
518             break;
519 
520         default:
521             error.SetErrorStringWithFormat("unrecognized short option character '%c'", short_option);
522             break;
523     }
524     return error;
525 }
526 
527 OptionDefinition
528 ProcessLaunchCommandOptions::g_option_table[] =
529 {
530 { LLDB_OPT_SET_ALL, false, "stop-at-entry", 's', OptionParser::eNoArgument,       NULL, NULL, 0, eArgTypeNone,          "Stop at the entry point of the program when launching a process."},
531 { LLDB_OPT_SET_ALL, false, "disable-aslr",  'A', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeBoolean,          "Set whether to disable address space layout randomization when launching a process."},
532 { LLDB_OPT_SET_ALL, false, "plugin",        'p', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypePlugin,        "Name of the process plugin you want to use."},
533 { LLDB_OPT_SET_ALL, false, "working-dir",   'w', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeDirectoryName,          "Set the current working directory to <path> when running the inferior."},
534 { LLDB_OPT_SET_ALL, false, "arch",          'a', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeArchitecture,  "Set the architecture for the process to launch when ambiguous."},
535 { LLDB_OPT_SET_ALL, false, "environment",   'v', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeNone,          "Specify an environment variable name/value string (--environment NAME=VALUE). Can be specified multiple times for subsequent environment entries."},
536 { LLDB_OPT_SET_1|LLDB_OPT_SET_2|LLDB_OPT_SET_3, false, "shell",         'c', OptionParser::eOptionalArgument, NULL, NULL, 0, eArgTypeFilename,          "Run the process in a shell (not supported on all platforms)."},
537 
538 { LLDB_OPT_SET_1  , false, "stdin",         'i', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeFilename,    "Redirect stdin for the process to <filename>."},
539 { LLDB_OPT_SET_1  , false, "stdout",        'o', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeFilename,    "Redirect stdout for the process to <filename>."},
540 { LLDB_OPT_SET_1  , false, "stderr",        'e', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeFilename,    "Redirect stderr for the process to <filename>."},
541 
542 { LLDB_OPT_SET_2  , false, "tty",           't', OptionParser::eNoArgument,       NULL, NULL, 0, eArgTypeNone,    "Start the process in a terminal (not supported on all platforms)."},
543 
544 { LLDB_OPT_SET_3  , false, "no-stdio",      'n', OptionParser::eNoArgument,       NULL, NULL, 0, eArgTypeNone,    "Do not set up for terminal I/O to go to running process."},
545 { LLDB_OPT_SET_4,   false, "shell-expand-args",       'X', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeBoolean,          "Set whether to shell expand arguments to the process when launching."},
546 { 0               , false, NULL,             0,  0,                 NULL, NULL, 0, eArgTypeNone,    NULL }
547 };
548 
549 
550 
551 bool
552 ProcessInstanceInfoMatch::NameMatches (const char *process_name) const
553 {
554     if (m_name_match_type == eNameMatchIgnore || process_name == NULL)
555         return true;
556     const char *match_name = m_match_info.GetName();
557     if (!match_name)
558         return true;
559 
560     return lldb_private::NameMatches (process_name, m_name_match_type, match_name);
561 }
562 
563 bool
564 ProcessInstanceInfoMatch::Matches (const ProcessInstanceInfo &proc_info) const
565 {
566     if (!NameMatches (proc_info.GetName()))
567         return false;
568 
569     if (m_match_info.ProcessIDIsValid() &&
570         m_match_info.GetProcessID() != proc_info.GetProcessID())
571         return false;
572 
573     if (m_match_info.ParentProcessIDIsValid() &&
574         m_match_info.GetParentProcessID() != proc_info.GetParentProcessID())
575         return false;
576 
577     if (m_match_info.UserIDIsValid () &&
578         m_match_info.GetUserID() != proc_info.GetUserID())
579         return false;
580 
581     if (m_match_info.GroupIDIsValid () &&
582         m_match_info.GetGroupID() != proc_info.GetGroupID())
583         return false;
584 
585     if (m_match_info.EffectiveUserIDIsValid () &&
586         m_match_info.GetEffectiveUserID() != proc_info.GetEffectiveUserID())
587         return false;
588 
589     if (m_match_info.EffectiveGroupIDIsValid () &&
590         m_match_info.GetEffectiveGroupID() != proc_info.GetEffectiveGroupID())
591         return false;
592 
593     if (m_match_info.GetArchitecture().IsValid() &&
594         !m_match_info.GetArchitecture().IsCompatibleMatch(proc_info.GetArchitecture()))
595         return false;
596     return true;
597 }
598 
599 bool
600 ProcessInstanceInfoMatch::MatchAllProcesses () const
601 {
602     if (m_name_match_type != eNameMatchIgnore)
603         return false;
604 
605     if (m_match_info.ProcessIDIsValid())
606         return false;
607 
608     if (m_match_info.ParentProcessIDIsValid())
609         return false;
610 
611     if (m_match_info.UserIDIsValid ())
612         return false;
613 
614     if (m_match_info.GroupIDIsValid ())
615         return false;
616 
617     if (m_match_info.EffectiveUserIDIsValid ())
618         return false;
619 
620     if (m_match_info.EffectiveGroupIDIsValid ())
621         return false;
622 
623     if (m_match_info.GetArchitecture().IsValid())
624         return false;
625 
626     if (m_match_all_users)
627         return false;
628 
629     return true;
630 
631 }
632 
633 void
634 ProcessInstanceInfoMatch::Clear()
635 {
636     m_match_info.Clear();
637     m_name_match_type = eNameMatchIgnore;
638     m_match_all_users = false;
639 }
640 
641 ProcessSP
642 Process::FindPlugin (Target &target, const char *plugin_name, Listener &listener, const FileSpec *crash_file_path)
643 {
644     static uint32_t g_process_unique_id = 0;
645 
646     ProcessSP process_sp;
647     ProcessCreateInstance create_callback = NULL;
648     if (plugin_name)
649     {
650         ConstString const_plugin_name(plugin_name);
651         create_callback  = PluginManager::GetProcessCreateCallbackForPluginName (const_plugin_name);
652         if (create_callback)
653         {
654             process_sp = create_callback(target, listener, crash_file_path);
655             if (process_sp)
656             {
657                 if (process_sp->CanDebug(target, true))
658                 {
659                     process_sp->m_process_unique_id = ++g_process_unique_id;
660                 }
661                 else
662                     process_sp.reset();
663             }
664         }
665     }
666     else
667     {
668         for (uint32_t idx = 0; (create_callback = PluginManager::GetProcessCreateCallbackAtIndex(idx)) != NULL; ++idx)
669         {
670             process_sp = create_callback(target, listener, crash_file_path);
671             if (process_sp)
672             {
673                 if (process_sp->CanDebug(target, false))
674                 {
675                     process_sp->m_process_unique_id = ++g_process_unique_id;
676                     break;
677                 }
678                 else
679                     process_sp.reset();
680             }
681         }
682     }
683     return process_sp;
684 }
685 
686 ConstString &
687 Process::GetStaticBroadcasterClass ()
688 {
689     static ConstString class_name ("lldb.process");
690     return class_name;
691 }
692 
693 //----------------------------------------------------------------------
694 // Process constructor
695 //----------------------------------------------------------------------
696 Process::Process(Target &target, Listener &listener) :
697     Process(target, listener, Host::GetUnixSignals ())
698 {
699     // This constructor just delegates to the full Process constructor,
700     // defaulting to using the Host's UnixSignals.
701 }
702 
703 Process::Process(Target &target, Listener &listener, const UnixSignalsSP &unix_signals_sp) :
704     ProcessProperties (this),
705     UserID (LLDB_INVALID_PROCESS_ID),
706     Broadcaster (&(target.GetDebugger()), Process::GetStaticBroadcasterClass().AsCString()),
707     m_target (target),
708     m_public_state (eStateUnloaded),
709     m_private_state (eStateUnloaded),
710     m_private_state_broadcaster (NULL, "lldb.process.internal_state_broadcaster"),
711     m_private_state_control_broadcaster (NULL, "lldb.process.internal_state_control_broadcaster"),
712     m_private_state_listener ("lldb.process.internal_state_listener"),
713     m_private_state_control_wait(),
714     m_mod_id (),
715     m_process_unique_id(0),
716     m_thread_index_id (0),
717     m_thread_id_to_index_id_map (),
718     m_exit_status (-1),
719     m_exit_string (),
720     m_exit_status_mutex(),
721     m_thread_mutex (Mutex::eMutexTypeRecursive),
722     m_thread_list_real (this),
723     m_thread_list (this),
724     m_extended_thread_list (this),
725     m_extended_thread_stop_id (0),
726     m_queue_list (this),
727     m_queue_list_stop_id (0),
728     m_notifications (),
729     m_image_tokens (),
730     m_listener (listener),
731     m_breakpoint_site_list (),
732     m_dynamic_checkers_ap (),
733     m_unix_signals_sp (unix_signals_sp),
734     m_abi_sp (),
735     m_process_input_reader (),
736     m_stdio_communication ("process.stdio"),
737     m_stdio_communication_mutex (Mutex::eMutexTypeRecursive),
738     m_stdin_forward (false),
739     m_stdout_data (),
740     m_stderr_data (),
741     m_profile_data_comm_mutex (Mutex::eMutexTypeRecursive),
742     m_profile_data (),
743     m_iohandler_sync (false),
744     m_memory_cache (*this),
745     m_allocated_memory_cache (*this),
746     m_should_detach (false),
747     m_next_event_action_ap(),
748     m_public_run_lock (),
749     m_private_run_lock (),
750     m_currently_handling_event(false),
751     m_stop_info_override_callback (NULL),
752     m_finalizing (false),
753     m_finalize_called (false),
754     m_clear_thread_plans_on_stop (false),
755     m_force_next_event_delivery (false),
756     m_last_broadcast_state (eStateInvalid),
757     m_destroy_in_process (false),
758     m_can_jit(eCanJITDontKnow)
759 {
760     CheckInWithManager ();
761 
762     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
763     if (log)
764         log->Printf ("%p Process::Process()", static_cast<void*>(this));
765 
766     if (!m_unix_signals_sp)
767         m_unix_signals_sp.reset (new UnixSignals ());
768 
769     SetEventName (eBroadcastBitStateChanged, "state-changed");
770     SetEventName (eBroadcastBitInterrupt, "interrupt");
771     SetEventName (eBroadcastBitSTDOUT, "stdout-available");
772     SetEventName (eBroadcastBitSTDERR, "stderr-available");
773     SetEventName (eBroadcastBitProfileData, "profile-data-available");
774 
775     m_private_state_control_broadcaster.SetEventName (eBroadcastInternalStateControlStop  , "control-stop"  );
776     m_private_state_control_broadcaster.SetEventName (eBroadcastInternalStateControlPause , "control-pause" );
777     m_private_state_control_broadcaster.SetEventName (eBroadcastInternalStateControlResume, "control-resume");
778 
779     listener.StartListeningForEvents (this,
780                                       eBroadcastBitStateChanged |
781                                       eBroadcastBitInterrupt |
782                                       eBroadcastBitSTDOUT |
783                                       eBroadcastBitSTDERR |
784                                       eBroadcastBitProfileData);
785 
786     m_private_state_listener.StartListeningForEvents(&m_private_state_broadcaster,
787                                                      eBroadcastBitStateChanged |
788                                                      eBroadcastBitInterrupt);
789 
790     m_private_state_listener.StartListeningForEvents(&m_private_state_control_broadcaster,
791                                                      eBroadcastInternalStateControlStop |
792                                                      eBroadcastInternalStateControlPause |
793                                                      eBroadcastInternalStateControlResume);
794     // We need something valid here, even if just the default UnixSignalsSP.
795     assert (m_unix_signals_sp && "null m_unix_signals_sp after initialization");
796 }
797 
798 //----------------------------------------------------------------------
799 // Destructor
800 //----------------------------------------------------------------------
801 Process::~Process()
802 {
803     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
804     if (log)
805         log->Printf ("%p Process::~Process()", static_cast<void*>(this));
806     StopPrivateStateThread();
807 
808     // ThreadList::Clear() will try to acquire this process's mutex, so
809     // explicitly clear the thread list here to ensure that the mutex
810     // is not destroyed before the thread list.
811     m_thread_list.Clear();
812 }
813 
814 const ProcessPropertiesSP &
815 Process::GetGlobalProperties()
816 {
817     static ProcessPropertiesSP g_settings_sp;
818     if (!g_settings_sp)
819         g_settings_sp.reset (new ProcessProperties (NULL));
820     return g_settings_sp;
821 }
822 
823 void
824 Process::Finalize()
825 {
826     m_finalizing = true;
827 
828     // Destroy this process if needed
829     switch (GetPrivateState())
830     {
831         case eStateConnected:
832         case eStateAttaching:
833         case eStateLaunching:
834         case eStateStopped:
835         case eStateRunning:
836         case eStateStepping:
837         case eStateCrashed:
838         case eStateSuspended:
839             Destroy(false);
840             break;
841 
842         case eStateInvalid:
843         case eStateUnloaded:
844         case eStateDetached:
845         case eStateExited:
846             break;
847     }
848 
849     // Clear our broadcaster before we proceed with destroying
850     Broadcaster::Clear();
851 
852     // Do any cleanup needed prior to being destructed... Subclasses
853     // that override this method should call this superclass method as well.
854 
855     // We need to destroy the loader before the derived Process class gets destroyed
856     // since it is very likely that undoing the loader will require access to the real process.
857     m_dynamic_checkers_ap.reset();
858     m_abi_sp.reset();
859     m_os_ap.reset();
860     m_system_runtime_ap.reset();
861     m_dyld_ap.reset();
862     m_jit_loaders_ap.reset();
863     m_thread_list_real.Destroy();
864     m_thread_list.Destroy();
865     m_extended_thread_list.Destroy();
866     m_queue_list.Clear();
867     m_queue_list_stop_id = 0;
868     std::vector<Notifications> empty_notifications;
869     m_notifications.swap(empty_notifications);
870     m_image_tokens.clear();
871     m_memory_cache.Clear();
872     m_allocated_memory_cache.Clear();
873     m_language_runtimes.clear();
874     m_instrumentation_runtimes.clear();
875     m_next_event_action_ap.reset();
876     m_stop_info_override_callback = NULL;
877 //#ifdef LLDB_CONFIGURATION_DEBUG
878 //    StreamFile s(stdout, false);
879 //    EventSP event_sp;
880 //    while (m_private_state_listener.GetNextEvent(event_sp))
881 //    {
882 //        event_sp->Dump (&s);
883 //        s.EOL();
884 //    }
885 //#endif
886     // We have to be very careful here as the m_private_state_listener might
887     // contain events that have ProcessSP values in them which can keep this
888     // process around forever. These events need to be cleared out.
889     m_private_state_listener.Clear();
890     m_public_run_lock.TrySetRunning(); // This will do nothing if already locked
891     m_public_run_lock.SetStopped();
892     m_private_run_lock.TrySetRunning(); // This will do nothing if already locked
893     m_private_run_lock.SetStopped();
894     m_finalize_called = true;
895 }
896 
897 void
898 Process::RegisterNotificationCallbacks (const Notifications& callbacks)
899 {
900     m_notifications.push_back(callbacks);
901     if (callbacks.initialize != NULL)
902         callbacks.initialize (callbacks.baton, this);
903 }
904 
905 bool
906 Process::UnregisterNotificationCallbacks(const Notifications& callbacks)
907 {
908     std::vector<Notifications>::iterator pos, end = m_notifications.end();
909     for (pos = m_notifications.begin(); pos != end; ++pos)
910     {
911         if (pos->baton == callbacks.baton &&
912             pos->initialize == callbacks.initialize &&
913             pos->process_state_changed == callbacks.process_state_changed)
914         {
915             m_notifications.erase(pos);
916             return true;
917         }
918     }
919     return false;
920 }
921 
922 void
923 Process::SynchronouslyNotifyStateChanged (StateType state)
924 {
925     std::vector<Notifications>::iterator notification_pos, notification_end = m_notifications.end();
926     for (notification_pos = m_notifications.begin(); notification_pos != notification_end; ++notification_pos)
927     {
928         if (notification_pos->process_state_changed)
929             notification_pos->process_state_changed (notification_pos->baton, this, state);
930     }
931 }
932 
933 // FIXME: We need to do some work on events before the general Listener sees them.
934 // For instance if we are continuing from a breakpoint, we need to ensure that we do
935 // the little "insert real insn, step & stop" trick.  But we can't do that when the
936 // event is delivered by the broadcaster - since that is done on the thread that is
937 // waiting for new events, so if we needed more than one event for our handling, we would
938 // stall.  So instead we do it when we fetch the event off of the queue.
939 //
940 
941 StateType
942 Process::GetNextEvent (EventSP &event_sp)
943 {
944     StateType state = eStateInvalid;
945 
946     if (m_listener.GetNextEventForBroadcaster (this, event_sp) && event_sp)
947         state = Process::ProcessEventData::GetStateFromEvent (event_sp.get());
948 
949     return state;
950 }
951 
952 bool
953 Process::SyncIOHandler (uint64_t timeout_msec)
954 {
955     bool timed_out = false;
956 
957     // don't sync (potentially context switch) in case where there is no process IO
958     if (m_process_input_reader)
959     {
960         TimeValue timeout = TimeValue::Now();
961         timeout.OffsetWithMicroSeconds(timeout_msec*1000);
962 
963         m_iohandler_sync.WaitForValueEqualTo(true, &timeout, &timed_out);
964 
965         Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
966         if(log)
967         {
968             if(timed_out)
969                 log->Printf ("Process::%s pid %" PRIu64 " (timeout=%" PRIu64 "ms): FAIL", __FUNCTION__, GetID (), timeout_msec);
970             else
971                 log->Printf ("Process::%s pid %" PRIu64 ": SUCCESS", __FUNCTION__, GetID ());
972         }
973 
974         // reset sync one-shot so it will be ready for next launch
975         m_iohandler_sync.SetValue(false, eBroadcastNever);
976     }
977 
978     return !timed_out;
979 }
980 
981 StateType
982 Process::WaitForProcessToStop (const TimeValue *timeout,
983                                EventSP *event_sp_ptr,
984                                bool wait_always,
985                                Listener *hijack_listener,
986                                Stream *stream)
987 {
988     // We can't just wait for a "stopped" event, because the stopped event may have restarted the target.
989     // We have to actually check each event, and in the case of a stopped event check the restarted flag
990     // on the event.
991     if (event_sp_ptr)
992         event_sp_ptr->reset();
993     StateType state = GetState();
994     // If we are exited or detached, we won't ever get back to any
995     // other valid state...
996     if (state == eStateDetached || state == eStateExited)
997         return state;
998 
999     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1000     if (log)
1001         log->Printf ("Process::%s (timeout = %p)", __FUNCTION__,
1002                      static_cast<const void*>(timeout));
1003 
1004     if (!wait_always &&
1005         StateIsStoppedState(state, true) &&
1006         StateIsStoppedState(GetPrivateState(), true))
1007     {
1008         if (log)
1009             log->Printf("Process::%s returning without waiting for events; process private and public states are already 'stopped'.",
1010                         __FUNCTION__);
1011         // We need to toggle the run lock as this won't get done in
1012         // SetPublicState() if the process is hijacked.
1013         if (hijack_listener)
1014             m_public_run_lock.SetStopped();
1015         return state;
1016     }
1017 
1018     while (state != eStateInvalid)
1019     {
1020         EventSP event_sp;
1021         state = WaitForStateChangedEvents (timeout, event_sp, hijack_listener);
1022         if (event_sp_ptr && event_sp)
1023             *event_sp_ptr = event_sp;
1024 
1025         bool pop_process_io_handler = hijack_listener != NULL;
1026         Process::HandleProcessStateChangedEvent (event_sp, stream, pop_process_io_handler);
1027 
1028         switch (state)
1029         {
1030         case eStateCrashed:
1031         case eStateDetached:
1032         case eStateExited:
1033         case eStateUnloaded:
1034             // We need to toggle the run lock as this won't get done in
1035             // SetPublicState() if the process is hijacked.
1036             if (hijack_listener)
1037                 m_public_run_lock.SetStopped();
1038             return state;
1039         case eStateStopped:
1040             if (Process::ProcessEventData::GetRestartedFromEvent(event_sp.get()))
1041                 continue;
1042             else
1043             {
1044                 // We need to toggle the run lock as this won't get done in
1045                 // SetPublicState() if the process is hijacked.
1046                 if (hijack_listener)
1047                     m_public_run_lock.SetStopped();
1048                 return state;
1049             }
1050         default:
1051             continue;
1052         }
1053     }
1054     return state;
1055 }
1056 
1057 bool
1058 Process::HandleProcessStateChangedEvent (const EventSP &event_sp,
1059                                          Stream *stream,
1060                                          bool &pop_process_io_handler)
1061 {
1062     const bool handle_pop = pop_process_io_handler == true;
1063 
1064     pop_process_io_handler = false;
1065     ProcessSP process_sp = Process::ProcessEventData::GetProcessFromEvent(event_sp.get());
1066 
1067     if (!process_sp)
1068         return false;
1069 
1070     StateType event_state = Process::ProcessEventData::GetStateFromEvent (event_sp.get());
1071     if (event_state == eStateInvalid)
1072         return false;
1073 
1074     switch (event_state)
1075     {
1076         case eStateInvalid:
1077         case eStateUnloaded:
1078         case eStateAttaching:
1079         case eStateLaunching:
1080         case eStateStepping:
1081         case eStateDetached:
1082             {
1083                 if (stream)
1084                     stream->Printf ("Process %" PRIu64 " %s\n",
1085                                     process_sp->GetID(),
1086                                     StateAsCString (event_state));
1087 
1088                 if (event_state == eStateDetached)
1089                     pop_process_io_handler = true;
1090             }
1091             break;
1092 
1093         case eStateConnected:
1094         case eStateRunning:
1095             // Don't be chatty when we run...
1096             break;
1097 
1098         case eStateExited:
1099             if (stream)
1100                 process_sp->GetStatus(*stream);
1101             pop_process_io_handler = true;
1102             break;
1103 
1104         case eStateStopped:
1105         case eStateCrashed:
1106         case eStateSuspended:
1107             // Make sure the program hasn't been auto-restarted:
1108             if (Process::ProcessEventData::GetRestartedFromEvent (event_sp.get()))
1109             {
1110                 if (stream)
1111                 {
1112                     size_t num_reasons = Process::ProcessEventData::GetNumRestartedReasons(event_sp.get());
1113                     if (num_reasons > 0)
1114                     {
1115                         // FIXME: Do we want to report this, or would that just be annoyingly chatty?
1116                         if (num_reasons == 1)
1117                         {
1118                             const char *reason = Process::ProcessEventData::GetRestartedReasonAtIndex (event_sp.get(), 0);
1119                             stream->Printf ("Process %" PRIu64 " stopped and restarted: %s\n",
1120                                             process_sp->GetID(),
1121                                             reason ? reason : "<UNKNOWN REASON>");
1122                         }
1123                         else
1124                         {
1125                             stream->Printf ("Process %" PRIu64 " stopped and restarted, reasons:\n",
1126                                             process_sp->GetID());
1127 
1128 
1129                             for (size_t i = 0; i < num_reasons; i++)
1130                             {
1131                                 const char *reason = Process::ProcessEventData::GetRestartedReasonAtIndex (event_sp.get(), i);
1132                                 stream->Printf("\t%s\n", reason ? reason : "<UNKNOWN REASON>");
1133                             }
1134                         }
1135                     }
1136                 }
1137             }
1138             else
1139             {
1140                 // Lock the thread list so it doesn't change on us, this is the scope for the locker:
1141                 {
1142                     ThreadList &thread_list = process_sp->GetThreadList();
1143                     Mutex::Locker locker (thread_list.GetMutex());
1144 
1145                     ThreadSP curr_thread (thread_list.GetSelectedThread());
1146                     ThreadSP thread;
1147                     StopReason curr_thread_stop_reason = eStopReasonInvalid;
1148                     if (curr_thread)
1149                         curr_thread_stop_reason = curr_thread->GetStopReason();
1150                     if (!curr_thread ||
1151                         !curr_thread->IsValid() ||
1152                         curr_thread_stop_reason == eStopReasonInvalid ||
1153                         curr_thread_stop_reason == eStopReasonNone)
1154                     {
1155                         // Prefer a thread that has just completed its plan over another thread as current thread.
1156                         ThreadSP plan_thread;
1157                         ThreadSP other_thread;
1158                         const size_t num_threads = thread_list.GetSize();
1159                         size_t i;
1160                         for (i = 0; i < num_threads; ++i)
1161                         {
1162                             thread = thread_list.GetThreadAtIndex(i);
1163                             StopReason thread_stop_reason = thread->GetStopReason();
1164                             switch (thread_stop_reason)
1165                             {
1166                                 case eStopReasonInvalid:
1167                                 case eStopReasonNone:
1168                                     break;
1169 
1170                                 case eStopReasonTrace:
1171                                 case eStopReasonBreakpoint:
1172                                 case eStopReasonWatchpoint:
1173                                 case eStopReasonSignal:
1174                                 case eStopReasonException:
1175                                 case eStopReasonExec:
1176                                 case eStopReasonThreadExiting:
1177                                 case eStopReasonInstrumentation:
1178                                     if (!other_thread)
1179                                         other_thread = thread;
1180                                     break;
1181                                 case eStopReasonPlanComplete:
1182                                     if (!plan_thread)
1183                                         plan_thread = thread;
1184                                     break;
1185                             }
1186                         }
1187                         if (plan_thread)
1188                             thread_list.SetSelectedThreadByID (plan_thread->GetID());
1189                         else if (other_thread)
1190                             thread_list.SetSelectedThreadByID (other_thread->GetID());
1191                         else
1192                         {
1193                             if (curr_thread && curr_thread->IsValid())
1194                                 thread = curr_thread;
1195                             else
1196                                 thread = thread_list.GetThreadAtIndex(0);
1197 
1198                             if (thread)
1199                                 thread_list.SetSelectedThreadByID (thread->GetID());
1200                         }
1201                     }
1202                 }
1203                 // Drop the ThreadList mutex by here, since GetThreadStatus below might have to run code,
1204                 // e.g. for Data formatters, and if we hold the ThreadList mutex, then the process is going to
1205                 // have a hard time restarting the process.
1206                 if (stream)
1207                 {
1208                     Debugger &debugger = process_sp->GetTarget().GetDebugger();
1209                     if (debugger.GetTargetList().GetSelectedTarget().get() == &process_sp->GetTarget())
1210                     {
1211                         const bool only_threads_with_stop_reason = true;
1212                         const uint32_t start_frame = 0;
1213                         const uint32_t num_frames = 1;
1214                         const uint32_t num_frames_with_source = 1;
1215                         process_sp->GetStatus(*stream);
1216                         process_sp->GetThreadStatus (*stream,
1217                                                      only_threads_with_stop_reason,
1218                                                      start_frame,
1219                                                      num_frames,
1220                                                      num_frames_with_source);
1221                     }
1222                     else
1223                     {
1224                         uint32_t target_idx = debugger.GetTargetList().GetIndexOfTarget(process_sp->GetTarget().shared_from_this());
1225                         if (target_idx != UINT32_MAX)
1226                             stream->Printf ("Target %d: (", target_idx);
1227                         else
1228                             stream->Printf ("Target <unknown index>: (");
1229                         process_sp->GetTarget().Dump (stream, eDescriptionLevelBrief);
1230                         stream->Printf (") stopped.\n");
1231                     }
1232                 }
1233 
1234                 // Pop the process IO handler
1235                 pop_process_io_handler = true;
1236             }
1237             break;
1238     }
1239 
1240     if (handle_pop && pop_process_io_handler)
1241         process_sp->PopProcessIOHandler();
1242 
1243     return true;
1244 }
1245 
1246 
1247 StateType
1248 Process::WaitForState
1249 (
1250     const TimeValue *timeout,
1251     const StateType *match_states,
1252     const uint32_t num_match_states
1253 )
1254 {
1255     EventSP event_sp;
1256     uint32_t i;
1257     StateType state = GetState();
1258     while (state != eStateInvalid)
1259     {
1260         // If we are exited or detached, we won't ever get back to any
1261         // other valid state...
1262         if (state == eStateDetached || state == eStateExited)
1263             return state;
1264 
1265         state = WaitForStateChangedEvents (timeout, event_sp, NULL);
1266 
1267         for (i=0; i<num_match_states; ++i)
1268         {
1269             if (match_states[i] == state)
1270                 return state;
1271         }
1272     }
1273     return state;
1274 }
1275 
1276 bool
1277 Process::HijackProcessEvents (Listener *listener)
1278 {
1279     if (listener != NULL)
1280     {
1281         return HijackBroadcaster(listener, eBroadcastBitStateChanged | eBroadcastBitInterrupt);
1282     }
1283     else
1284         return false;
1285 }
1286 
1287 void
1288 Process::RestoreProcessEvents ()
1289 {
1290     RestoreBroadcaster();
1291 }
1292 
1293 bool
1294 Process::HijackPrivateProcessEvents (Listener *listener)
1295 {
1296     if (listener != NULL)
1297     {
1298         return m_private_state_broadcaster.HijackBroadcaster(listener, eBroadcastBitStateChanged | eBroadcastBitInterrupt);
1299     }
1300     else
1301         return false;
1302 }
1303 
1304 void
1305 Process::RestorePrivateProcessEvents ()
1306 {
1307     m_private_state_broadcaster.RestoreBroadcaster();
1308 }
1309 
1310 StateType
1311 Process::WaitForStateChangedEvents (const TimeValue *timeout, EventSP &event_sp, Listener *hijack_listener)
1312 {
1313     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1314 
1315     if (log)
1316         log->Printf ("Process::%s (timeout = %p, event_sp)...", __FUNCTION__,
1317                      static_cast<const void*>(timeout));
1318 
1319     Listener *listener = hijack_listener;
1320     if (listener == NULL)
1321         listener = &m_listener;
1322 
1323     StateType state = eStateInvalid;
1324     if (listener->WaitForEventForBroadcasterWithType (timeout,
1325                                                       this,
1326                                                       eBroadcastBitStateChanged | eBroadcastBitInterrupt,
1327                                                       event_sp))
1328     {
1329         if (event_sp && event_sp->GetType() == eBroadcastBitStateChanged)
1330             state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
1331         else if (log)
1332             log->Printf ("Process::%s got no event or was interrupted.", __FUNCTION__);
1333     }
1334 
1335     if (log)
1336         log->Printf ("Process::%s (timeout = %p, event_sp) => %s",
1337                      __FUNCTION__, static_cast<const void*>(timeout),
1338                      StateAsCString(state));
1339     return state;
1340 }
1341 
1342 Event *
1343 Process::PeekAtStateChangedEvents ()
1344 {
1345     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1346 
1347     if (log)
1348         log->Printf ("Process::%s...", __FUNCTION__);
1349 
1350     Event *event_ptr;
1351     event_ptr = m_listener.PeekAtNextEventForBroadcasterWithType (this,
1352                                                                   eBroadcastBitStateChanged);
1353     if (log)
1354     {
1355         if (event_ptr)
1356         {
1357             log->Printf ("Process::%s (event_ptr) => %s",
1358                          __FUNCTION__,
1359                          StateAsCString(ProcessEventData::GetStateFromEvent (event_ptr)));
1360         }
1361         else
1362         {
1363             log->Printf ("Process::%s no events found",
1364                          __FUNCTION__);
1365         }
1366     }
1367     return event_ptr;
1368 }
1369 
1370 StateType
1371 Process::WaitForStateChangedEventsPrivate (const TimeValue *timeout, EventSP &event_sp)
1372 {
1373     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1374 
1375     if (log)
1376         log->Printf ("Process::%s (timeout = %p, event_sp)...", __FUNCTION__,
1377                      static_cast<const void*>(timeout));
1378 
1379     StateType state = eStateInvalid;
1380     if (m_private_state_listener.WaitForEventForBroadcasterWithType (timeout,
1381                                                                      &m_private_state_broadcaster,
1382                                                                      eBroadcastBitStateChanged | eBroadcastBitInterrupt,
1383                                                                      event_sp))
1384         if (event_sp && event_sp->GetType() == eBroadcastBitStateChanged)
1385             state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
1386 
1387     // This is a bit of a hack, but when we wait here we could very well return
1388     // to the command-line, and that could disable the log, which would render the
1389     // log we got above invalid.
1390     if (log)
1391         log->Printf ("Process::%s (timeout = %p, event_sp) => %s",
1392                      __FUNCTION__, static_cast<const void *>(timeout),
1393                      state == eStateInvalid ? "TIMEOUT" : StateAsCString(state));
1394     return state;
1395 }
1396 
1397 bool
1398 Process::WaitForEventsPrivate (const TimeValue *timeout, EventSP &event_sp, bool control_only)
1399 {
1400     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1401 
1402     if (log)
1403         log->Printf ("Process::%s (timeout = %p, event_sp)...", __FUNCTION__,
1404                      static_cast<const void*>(timeout));
1405 
1406     if (control_only)
1407         return m_private_state_listener.WaitForEventForBroadcaster(timeout, &m_private_state_control_broadcaster, event_sp);
1408     else
1409         return m_private_state_listener.WaitForEvent(timeout, event_sp);
1410 }
1411 
1412 bool
1413 Process::IsRunning () const
1414 {
1415     return StateIsRunningState (m_public_state.GetValue());
1416 }
1417 
1418 int
1419 Process::GetExitStatus ()
1420 {
1421     Mutex::Locker locker (m_exit_status_mutex);
1422 
1423     if (m_public_state.GetValue() == eStateExited)
1424         return m_exit_status;
1425     return -1;
1426 }
1427 
1428 
1429 const char *
1430 Process::GetExitDescription ()
1431 {
1432     Mutex::Locker locker (m_exit_status_mutex);
1433 
1434     if (m_public_state.GetValue() == eStateExited && !m_exit_string.empty())
1435         return m_exit_string.c_str();
1436     return NULL;
1437 }
1438 
1439 bool
1440 Process::SetExitStatus (int status, const char *cstr)
1441 {
1442     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STATE | LIBLLDB_LOG_PROCESS));
1443     if (log)
1444         log->Printf("Process::SetExitStatus (status=%i (0x%8.8x), description=%s%s%s)",
1445                     status, status,
1446                     cstr ? "\"" : "",
1447                     cstr ? cstr : "NULL",
1448                     cstr ? "\"" : "");
1449 
1450     // We were already in the exited state
1451     if (m_private_state.GetValue() == eStateExited)
1452     {
1453         if (log)
1454             log->Printf("Process::SetExitStatus () ignoring exit status because state was already set to eStateExited");
1455         return false;
1456     }
1457 
1458     // use a mutex to protect the status and string during updating
1459     {
1460         Mutex::Locker locker (m_exit_status_mutex);
1461 
1462         m_exit_status = status;
1463         if (cstr)
1464             m_exit_string = cstr;
1465         else
1466             m_exit_string.clear();
1467     }
1468 
1469     // When we exit, we no longer need to the communication channel
1470     m_stdio_communication.StopReadThread();
1471     m_stdio_communication.Disconnect();
1472     m_stdin_forward = false;
1473 
1474     // And we don't need the input reader anymore as well
1475     if (m_process_input_reader)
1476     {
1477         m_process_input_reader->SetIsDone(true);
1478         m_process_input_reader->Cancel();
1479         m_process_input_reader.reset();
1480     }
1481 
1482     SetPrivateState (eStateExited);
1483 
1484     // Allow subclasses to do some cleanup
1485     DidExit ();
1486 
1487     return true;
1488 }
1489 
1490 // This static callback can be used to watch for local child processes on
1491 // the current host. The child process exits, the process will be
1492 // found in the global target list (we want to be completely sure that the
1493 // lldb_private::Process doesn't go away before we can deliver the signal.
1494 bool
1495 Process::SetProcessExitStatus (void *callback_baton,
1496                                lldb::pid_t pid,
1497                                bool exited,
1498                                int signo,          // Zero for no signal
1499                                int exit_status     // Exit value of process if signal is zero
1500 )
1501 {
1502     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_PROCESS));
1503     if (log)
1504         log->Printf ("Process::SetProcessExitStatus (baton=%p, pid=%" PRIu64 ", exited=%i, signal=%i, exit_status=%i)\n",
1505                      callback_baton,
1506                      pid,
1507                      exited,
1508                      signo,
1509                      exit_status);
1510 
1511     if (exited)
1512     {
1513         TargetSP target_sp(Debugger::FindTargetWithProcessID (pid));
1514         if (target_sp)
1515         {
1516             ProcessSP process_sp (target_sp->GetProcessSP());
1517             if (process_sp)
1518             {
1519                 const char *signal_cstr = NULL;
1520                 if (signo)
1521                     signal_cstr = process_sp->GetUnixSignals().GetSignalAsCString (signo);
1522 
1523                 process_sp->SetExitStatus (exit_status, signal_cstr);
1524             }
1525         }
1526         return true;
1527     }
1528     return false;
1529 }
1530 
1531 
1532 void
1533 Process::UpdateThreadListIfNeeded ()
1534 {
1535     const uint32_t stop_id = GetStopID();
1536     if (m_thread_list.GetSize(false) == 0 || stop_id != m_thread_list.GetStopID())
1537     {
1538         const StateType state = GetPrivateState();
1539         if (StateIsStoppedState (state, true))
1540         {
1541             Mutex::Locker locker (m_thread_list.GetMutex ());
1542             // m_thread_list does have its own mutex, but we need to
1543             // hold onto the mutex between the call to UpdateThreadList(...)
1544             // and the os->UpdateThreadList(...) so it doesn't change on us
1545             ThreadList &old_thread_list = m_thread_list;
1546             ThreadList real_thread_list(this);
1547             ThreadList new_thread_list(this);
1548             // Always update the thread list with the protocol specific
1549             // thread list, but only update if "true" is returned
1550             if (UpdateThreadList (m_thread_list_real, real_thread_list))
1551             {
1552                 // Don't call into the OperatingSystem to update the thread list if we are shutting down, since
1553                 // that may call back into the SBAPI's, requiring the API lock which is already held by whoever is
1554                 // shutting us down, causing a deadlock.
1555                 if (!m_destroy_in_process)
1556                 {
1557                     OperatingSystem *os = GetOperatingSystem ();
1558                     if (os)
1559                     {
1560                         // Clear any old backing threads where memory threads might have been
1561                         // backed by actual threads from the lldb_private::Process subclass
1562                         size_t num_old_threads = old_thread_list.GetSize(false);
1563                         for (size_t i=0; i<num_old_threads; ++i)
1564                             old_thread_list.GetThreadAtIndex(i, false)->ClearBackingThread();
1565 
1566                         // Turn off dynamic types to ensure we don't run any expressions. Objective C
1567                         // can run an expression to determine if a SBValue is a dynamic type or not
1568                         // and we need to avoid this. OperatingSystem plug-ins can't run expressions
1569                         // that require running code...
1570 
1571                         Target &target = GetTarget();
1572                         const lldb::DynamicValueType saved_prefer_dynamic = target.GetPreferDynamicValue ();
1573                         if (saved_prefer_dynamic != lldb::eNoDynamicValues)
1574                             target.SetPreferDynamicValue(lldb::eNoDynamicValues);
1575 
1576                         // Now let the OperatingSystem plug-in update the thread list
1577 
1578                         os->UpdateThreadList (old_thread_list,  // Old list full of threads created by OS plug-in
1579                                               real_thread_list, // The actual thread list full of threads created by each lldb_private::Process subclass
1580                                               new_thread_list); // The new thread list that we will show to the user that gets filled in
1581 
1582                         if (saved_prefer_dynamic != lldb::eNoDynamicValues)
1583                             target.SetPreferDynamicValue(saved_prefer_dynamic);
1584                     }
1585                     else
1586                     {
1587                         // No OS plug-in, the new thread list is the same as the real thread list
1588                         new_thread_list = real_thread_list;
1589                     }
1590                 }
1591 
1592                 m_thread_list_real.Update(real_thread_list);
1593                 m_thread_list.Update (new_thread_list);
1594                 m_thread_list.SetStopID (stop_id);
1595 
1596                 if (GetLastNaturalStopID () != m_extended_thread_stop_id)
1597                 {
1598                     // Clear any extended threads that we may have accumulated previously
1599                     m_extended_thread_list.Clear();
1600                     m_extended_thread_stop_id = GetLastNaturalStopID ();
1601 
1602                     m_queue_list.Clear();
1603                     m_queue_list_stop_id = GetLastNaturalStopID ();
1604                 }
1605             }
1606         }
1607     }
1608 }
1609 
1610 void
1611 Process::UpdateQueueListIfNeeded ()
1612 {
1613     if (m_system_runtime_ap.get())
1614     {
1615         if (m_queue_list.GetSize() == 0 || m_queue_list_stop_id != GetLastNaturalStopID())
1616         {
1617             const StateType state = GetPrivateState();
1618             if (StateIsStoppedState (state, true))
1619             {
1620                 m_system_runtime_ap->PopulateQueueList (m_queue_list);
1621                 m_queue_list_stop_id = GetLastNaturalStopID();
1622             }
1623         }
1624     }
1625 }
1626 
1627 ThreadSP
1628 Process::CreateOSPluginThread (lldb::tid_t tid, lldb::addr_t context)
1629 {
1630     OperatingSystem *os = GetOperatingSystem ();
1631     if (os)
1632         return os->CreateThread(tid, context);
1633     return ThreadSP();
1634 }
1635 
1636 uint32_t
1637 Process::GetNextThreadIndexID (uint64_t thread_id)
1638 {
1639     return AssignIndexIDToThread(thread_id);
1640 }
1641 
1642 bool
1643 Process::HasAssignedIndexIDToThread(uint64_t thread_id)
1644 {
1645     std::map<uint64_t, uint32_t>::iterator iterator = m_thread_id_to_index_id_map.find(thread_id);
1646     if (iterator == m_thread_id_to_index_id_map.end())
1647     {
1648         return false;
1649     }
1650     else
1651     {
1652         return true;
1653     }
1654 }
1655 
1656 uint32_t
1657 Process::AssignIndexIDToThread(uint64_t thread_id)
1658 {
1659     uint32_t result = 0;
1660     std::map<uint64_t, uint32_t>::iterator iterator = m_thread_id_to_index_id_map.find(thread_id);
1661     if (iterator == m_thread_id_to_index_id_map.end())
1662     {
1663         result = ++m_thread_index_id;
1664         m_thread_id_to_index_id_map[thread_id] = result;
1665     }
1666     else
1667     {
1668         result = iterator->second;
1669     }
1670 
1671     return result;
1672 }
1673 
1674 StateType
1675 Process::GetState()
1676 {
1677     // If any other threads access this we will need a mutex for it
1678     return m_public_state.GetValue ();
1679 }
1680 
1681 bool
1682 Process::StateChangedIsExternallyHijacked()
1683 {
1684     if (IsHijackedForEvent(eBroadcastBitStateChanged))
1685     {
1686         if (strcmp(m_hijacking_listeners.back()->GetName(), "lldb.Process.ResumeSynchronous.hijack"))
1687             return true;
1688     }
1689     return false;
1690 }
1691 
1692 void
1693 Process::SetPublicState (StateType new_state, bool restarted)
1694 {
1695     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STATE | LIBLLDB_LOG_PROCESS));
1696     if (log)
1697         log->Printf("Process::SetPublicState (state = %s, restarted = %i)", StateAsCString(new_state), restarted);
1698     const StateType old_state = m_public_state.GetValue();
1699     m_public_state.SetValue (new_state);
1700 
1701     // On the transition from Run to Stopped, we unlock the writer end of the
1702     // run lock.  The lock gets locked in Resume, which is the public API
1703     // to tell the program to run.
1704     if (!StateChangedIsExternallyHijacked())
1705     {
1706         if (new_state == eStateDetached)
1707         {
1708             if (log)
1709                 log->Printf("Process::SetPublicState (%s) -- unlocking run lock for detach", StateAsCString(new_state));
1710             m_public_run_lock.SetStopped();
1711         }
1712         else
1713         {
1714             const bool old_state_is_stopped = StateIsStoppedState(old_state, false);
1715             const bool new_state_is_stopped = StateIsStoppedState(new_state, false);
1716             if ((old_state_is_stopped != new_state_is_stopped))
1717             {
1718                 if (new_state_is_stopped && !restarted)
1719                 {
1720                     if (log)
1721                         log->Printf("Process::SetPublicState (%s) -- unlocking run lock", StateAsCString(new_state));
1722                     m_public_run_lock.SetStopped();
1723                 }
1724             }
1725         }
1726     }
1727 }
1728 
1729 Error
1730 Process::Resume ()
1731 {
1732     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STATE | LIBLLDB_LOG_PROCESS));
1733     if (log)
1734         log->Printf("Process::Resume -- locking run lock");
1735     if (!m_public_run_lock.TrySetRunning())
1736     {
1737         Error error("Resume request failed - process still running.");
1738         if (log)
1739             log->Printf ("Process::Resume: -- TrySetRunning failed, not resuming.");
1740         return error;
1741     }
1742     return PrivateResume();
1743 }
1744 
1745 Error
1746 Process::ResumeSynchronous (Stream *stream)
1747 {
1748     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STATE | LIBLLDB_LOG_PROCESS));
1749     if (log)
1750         log->Printf("Process::ResumeSynchronous -- locking run lock");
1751     if (!m_public_run_lock.TrySetRunning())
1752     {
1753         Error error("Resume request failed - process still running.");
1754         if (log)
1755             log->Printf ("Process::Resume: -- TrySetRunning failed, not resuming.");
1756         return error;
1757     }
1758 
1759     ListenerSP listener_sp (new Listener("lldb.Process.ResumeSynchronous.hijack"));
1760     HijackProcessEvents(listener_sp.get());
1761 
1762     Error error = PrivateResume();
1763     if (error.Success())
1764     {
1765         StateType state = WaitForProcessToStop (NULL, NULL, true, listener_sp.get(), stream);
1766         const bool must_be_alive = false; // eStateExited is ok, so this must be false
1767         if (!StateIsStoppedState(state, must_be_alive))
1768             error.SetErrorStringWithFormat("process not in stopped state after synchronous resume: %s", StateAsCString(state));
1769     }
1770 
1771     // Undo the hijacking of process events...
1772     RestoreProcessEvents();
1773 
1774     return error;
1775 }
1776 
1777 StateType
1778 Process::GetPrivateState ()
1779 {
1780     return m_private_state.GetValue();
1781 }
1782 
1783 void
1784 Process::SetPrivateState (StateType new_state)
1785 {
1786     if (m_finalize_called)
1787         return;
1788 
1789     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STATE | LIBLLDB_LOG_PROCESS));
1790     bool state_changed = false;
1791 
1792     if (log)
1793         log->Printf("Process::SetPrivateState (%s)", StateAsCString(new_state));
1794 
1795     Mutex::Locker thread_locker(m_thread_list.GetMutex());
1796     Mutex::Locker locker(m_private_state.GetMutex());
1797 
1798     const StateType old_state = m_private_state.GetValueNoLock ();
1799     state_changed = old_state != new_state;
1800 
1801     const bool old_state_is_stopped = StateIsStoppedState(old_state, false);
1802     const bool new_state_is_stopped = StateIsStoppedState(new_state, false);
1803     if (old_state_is_stopped != new_state_is_stopped)
1804     {
1805         if (new_state_is_stopped)
1806             m_private_run_lock.SetStopped();
1807         else
1808             m_private_run_lock.SetRunning();
1809     }
1810 
1811     if (state_changed)
1812     {
1813         m_private_state.SetValueNoLock (new_state);
1814         EventSP event_sp (new Event (eBroadcastBitStateChanged, new ProcessEventData (shared_from_this(), new_state)));
1815         if (StateIsStoppedState(new_state, false))
1816         {
1817             // Note, this currently assumes that all threads in the list
1818             // stop when the process stops.  In the future we will want to
1819             // support a debugging model where some threads continue to run
1820             // while others are stopped.  When that happens we will either need
1821             // a way for the thread list to identify which threads are stopping
1822             // or create a special thread list containing only threads which
1823             // actually stopped.
1824             //
1825             // The process plugin is responsible for managing the actual
1826             // behavior of the threads and should have stopped any threads
1827             // that are going to stop before we get here.
1828             m_thread_list.DidStop();
1829 
1830             m_mod_id.BumpStopID();
1831             if (!m_mod_id.IsLastResumeForUserExpression())
1832                 m_mod_id.SetStopEventForLastNaturalStopID(event_sp);
1833             m_memory_cache.Clear();
1834             if (log)
1835                 log->Printf("Process::SetPrivateState (%s) stop_id = %u", StateAsCString(new_state), m_mod_id.GetStopID());
1836         }
1837 
1838         // Use our target to get a shared pointer to ourselves...
1839         if (m_finalize_called && PrivateStateThreadIsValid() == false)
1840             BroadcastEvent (event_sp);
1841         else
1842             m_private_state_broadcaster.BroadcastEvent (event_sp);
1843     }
1844     else
1845     {
1846         if (log)
1847             log->Printf("Process::SetPrivateState (%s) state didn't change. Ignoring...", StateAsCString(new_state));
1848     }
1849 }
1850 
1851 void
1852 Process::SetRunningUserExpression (bool on)
1853 {
1854     m_mod_id.SetRunningUserExpression (on);
1855 }
1856 
1857 addr_t
1858 Process::GetImageInfoAddress()
1859 {
1860     return LLDB_INVALID_ADDRESS;
1861 }
1862 
1863 //----------------------------------------------------------------------
1864 // LoadImage
1865 //
1866 // This function provides a default implementation that works for most
1867 // unix variants. Any Process subclasses that need to do shared library
1868 // loading differently should override LoadImage and UnloadImage and
1869 // do what is needed.
1870 //----------------------------------------------------------------------
1871 uint32_t
1872 Process::LoadImage (const FileSpec &image_spec, Error &error)
1873 {
1874     if (m_finalizing)
1875     {
1876         error.SetErrorString("process is tearing itself down");
1877         return LLDB_INVALID_IMAGE_TOKEN;
1878     }
1879 
1880     char path[PATH_MAX];
1881     image_spec.GetPath(path, sizeof(path));
1882 
1883     DynamicLoader *loader = GetDynamicLoader();
1884     if (loader)
1885     {
1886         error = loader->CanLoadImage();
1887         if (error.Fail())
1888             return LLDB_INVALID_IMAGE_TOKEN;
1889     }
1890 
1891     if (error.Success())
1892     {
1893         ThreadSP thread_sp(GetThreadList ().GetSelectedThread());
1894 
1895         if (thread_sp)
1896         {
1897             StackFrameSP frame_sp (thread_sp->GetStackFrameAtIndex (0));
1898 
1899             if (frame_sp)
1900             {
1901                 ExecutionContext exe_ctx;
1902                 frame_sp->CalculateExecutionContext (exe_ctx);
1903                 EvaluateExpressionOptions expr_options;
1904                 expr_options.SetUnwindOnError(true);
1905                 expr_options.SetIgnoreBreakpoints(true);
1906                 expr_options.SetExecutionPolicy(eExecutionPolicyAlways);
1907                 expr_options.SetResultIsInternal(true);
1908 
1909                 StreamString expr;
1910                 expr.Printf(R"(
1911                                struct __lldb_dlopen_result { void *image_ptr; const char *error_str; } the_result;
1912                                the_result.image_ptr = dlopen ("%s", 2);
1913                                if (the_result.image_ptr == (void *) 0x0)
1914                                {
1915                                    the_result.error_str = dlerror();
1916                                }
1917                                else
1918                                {
1919                                    the_result.error_str = (const char *) 0x0;
1920                                }
1921                                the_result;
1922                               )",
1923                               path);
1924                 const char *prefix = R"(
1925                                         extern "C" void* dlopen (const char *path, int mode);
1926                                         extern "C" const char *dlerror (void);
1927                                         )";
1928                 lldb::ValueObjectSP result_valobj_sp;
1929                 Error expr_error;
1930                 ClangUserExpression::Evaluate (exe_ctx,
1931                                                expr_options,
1932                                                expr.GetData(),
1933                                                prefix,
1934                                                result_valobj_sp,
1935                                                expr_error);
1936                 if (expr_error.Success())
1937                 {
1938                     error = result_valobj_sp->GetError();
1939                     if (error.Success())
1940                     {
1941                         Scalar scalar;
1942                         ValueObjectSP image_ptr_sp = result_valobj_sp->GetChildAtIndex(0, true);
1943                         if (image_ptr_sp && image_ptr_sp->ResolveValue (scalar))
1944                         {
1945                             addr_t image_ptr = scalar.ULongLong(LLDB_INVALID_ADDRESS);
1946                             if (image_ptr != 0 && image_ptr != LLDB_INVALID_ADDRESS)
1947                             {
1948                                 uint32_t image_token = m_image_tokens.size();
1949                                 m_image_tokens.push_back (image_ptr);
1950                                 return image_token;
1951                             }
1952                             else if (image_ptr == 0)
1953                             {
1954                                 ValueObjectSP error_str_sp = result_valobj_sp->GetChildAtIndex(1, true);
1955                                 if (error_str_sp)
1956                                 {
1957                                     if (error_str_sp->IsCStringContainer(true))
1958                                     {
1959                                         DataBufferSP buffer_sp(new DataBufferHeap(10240,0));
1960                                         size_t num_chars = error_str_sp->ReadPointedString (buffer_sp, error, 10240);
1961                                         if (error.Success() && num_chars > 0)
1962                                         {
1963                                             error.Clear();
1964                                             error.SetErrorStringWithFormat("dlopen error: %s", buffer_sp->GetBytes());
1965                                         }
1966                                         else
1967                                         {
1968                                             error.Clear();
1969                                             error.SetErrorStringWithFormat("dlopen failed for unknown reasons.");
1970                                         }
1971                                     }
1972                                 }
1973                             }
1974                         }
1975                     }
1976                 }
1977                 else
1978                     error = expr_error;
1979             }
1980         }
1981     }
1982     if (!error.AsCString())
1983         error.SetErrorStringWithFormat("unable to load '%s'", path);
1984     return LLDB_INVALID_IMAGE_TOKEN;
1985 }
1986 
1987 //----------------------------------------------------------------------
1988 // UnloadImage
1989 //
1990 // This function provides a default implementation that works for most
1991 // unix variants. Any Process subclasses that need to do shared library
1992 // loading differently should override LoadImage and UnloadImage and
1993 // do what is needed.
1994 //----------------------------------------------------------------------
1995 Error
1996 Process::UnloadImage (uint32_t image_token)
1997 {
1998     Error error;
1999 
2000     if (m_finalizing)
2001     {
2002         error.SetErrorString("process is tearing itself down");
2003         return error;
2004     }
2005 
2006     if (image_token < m_image_tokens.size())
2007     {
2008         const addr_t image_addr = m_image_tokens[image_token];
2009         if (image_addr == LLDB_INVALID_ADDRESS)
2010         {
2011             error.SetErrorString("image already unloaded");
2012         }
2013         else
2014         {
2015             DynamicLoader *loader = GetDynamicLoader();
2016             if (loader)
2017                 error = loader->CanLoadImage();
2018 
2019             if (error.Success())
2020             {
2021                 ThreadSP thread_sp(GetThreadList ().GetSelectedThread());
2022 
2023                 if (thread_sp)
2024                 {
2025                     StackFrameSP frame_sp (thread_sp->GetStackFrameAtIndex (0));
2026 
2027                     if (frame_sp)
2028                     {
2029                         ExecutionContext exe_ctx;
2030                         frame_sp->CalculateExecutionContext (exe_ctx);
2031                         EvaluateExpressionOptions expr_options;
2032                         expr_options.SetUnwindOnError(true);
2033                         expr_options.SetIgnoreBreakpoints(true);
2034                         expr_options.SetExecutionPolicy(eExecutionPolicyAlways);
2035                         StreamString expr;
2036                         expr.Printf("dlclose ((void *)0x%" PRIx64 ")", image_addr);
2037                         const char *prefix = "extern \"C\" int dlclose(void* handle);\n";
2038                         lldb::ValueObjectSP result_valobj_sp;
2039                         Error expr_error;
2040                         ClangUserExpression::Evaluate (exe_ctx,
2041                                                        expr_options,
2042                                                        expr.GetData(),
2043                                                        prefix,
2044                                                        result_valobj_sp,
2045                                                        expr_error);
2046                         if (result_valobj_sp->GetError().Success())
2047                         {
2048                             Scalar scalar;
2049                             if (result_valobj_sp->ResolveValue (scalar))
2050                             {
2051                                 if (scalar.UInt(1))
2052                                 {
2053                                     error.SetErrorStringWithFormat("expression failed: \"%s\"", expr.GetData());
2054                                 }
2055                                 else
2056                                 {
2057                                     m_image_tokens[image_token] = LLDB_INVALID_ADDRESS;
2058                                 }
2059                             }
2060                         }
2061                         else
2062                         {
2063                             error = result_valobj_sp->GetError();
2064                         }
2065                     }
2066                 }
2067             }
2068         }
2069     }
2070     else
2071     {
2072         error.SetErrorString("invalid image token");
2073     }
2074     return error;
2075 }
2076 
2077 const lldb::ABISP &
2078 Process::GetABI()
2079 {
2080     if (!m_abi_sp)
2081         m_abi_sp = ABI::FindPlugin(m_target.GetArchitecture());
2082     return m_abi_sp;
2083 }
2084 
2085 LanguageRuntime *
2086 Process::GetLanguageRuntime(lldb::LanguageType language, bool retry_if_null)
2087 {
2088     if (m_finalizing)
2089         return nullptr;
2090 
2091     LanguageRuntimeCollection::iterator pos;
2092     pos = m_language_runtimes.find (language);
2093     if (pos == m_language_runtimes.end() || (retry_if_null && !(*pos).second))
2094     {
2095         lldb::LanguageRuntimeSP runtime_sp(LanguageRuntime::FindPlugin(this, language));
2096 
2097         m_language_runtimes[language] = runtime_sp;
2098         return runtime_sp.get();
2099     }
2100     else
2101         return (*pos).second.get();
2102 }
2103 
2104 CPPLanguageRuntime *
2105 Process::GetCPPLanguageRuntime (bool retry_if_null)
2106 {
2107     LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeC_plus_plus, retry_if_null);
2108     if (runtime != NULL && runtime->GetLanguageType() == eLanguageTypeC_plus_plus)
2109         return static_cast<CPPLanguageRuntime *> (runtime);
2110     return NULL;
2111 }
2112 
2113 ObjCLanguageRuntime *
2114 Process::GetObjCLanguageRuntime (bool retry_if_null)
2115 {
2116     LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeObjC, retry_if_null);
2117     if (runtime != NULL && runtime->GetLanguageType() == eLanguageTypeObjC)
2118         return static_cast<ObjCLanguageRuntime *> (runtime);
2119     return NULL;
2120 }
2121 
2122 bool
2123 Process::IsPossibleDynamicValue (ValueObject& in_value)
2124 {
2125     if (m_finalizing)
2126         return false;
2127 
2128     if (in_value.IsDynamic())
2129         return false;
2130     LanguageType known_type = in_value.GetObjectRuntimeLanguage();
2131 
2132     if (known_type != eLanguageTypeUnknown && known_type != eLanguageTypeC)
2133     {
2134         LanguageRuntime *runtime = GetLanguageRuntime (known_type);
2135         return runtime ? runtime->CouldHaveDynamicValue(in_value) : false;
2136     }
2137 
2138     LanguageRuntime *cpp_runtime = GetLanguageRuntime (eLanguageTypeC_plus_plus);
2139     if (cpp_runtime && cpp_runtime->CouldHaveDynamicValue(in_value))
2140         return true;
2141 
2142     LanguageRuntime *objc_runtime = GetLanguageRuntime (eLanguageTypeObjC);
2143     return objc_runtime ? objc_runtime->CouldHaveDynamicValue(in_value) : false;
2144 }
2145 
2146 void
2147 Process::SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers)
2148 {
2149     m_dynamic_checkers_ap.reset(dynamic_checkers);
2150 }
2151 
2152 BreakpointSiteList &
2153 Process::GetBreakpointSiteList()
2154 {
2155     return m_breakpoint_site_list;
2156 }
2157 
2158 const BreakpointSiteList &
2159 Process::GetBreakpointSiteList() const
2160 {
2161     return m_breakpoint_site_list;
2162 }
2163 
2164 
2165 void
2166 Process::DisableAllBreakpointSites ()
2167 {
2168     m_breakpoint_site_list.ForEach([this](BreakpointSite *bp_site) -> void {
2169 //        bp_site->SetEnabled(true);
2170         DisableBreakpointSite(bp_site);
2171     });
2172 }
2173 
2174 Error
2175 Process::ClearBreakpointSiteByID (lldb::user_id_t break_id)
2176 {
2177     Error error (DisableBreakpointSiteByID (break_id));
2178 
2179     if (error.Success())
2180         m_breakpoint_site_list.Remove(break_id);
2181 
2182     return error;
2183 }
2184 
2185 Error
2186 Process::DisableBreakpointSiteByID (lldb::user_id_t break_id)
2187 {
2188     Error error;
2189     BreakpointSiteSP bp_site_sp = m_breakpoint_site_list.FindByID (break_id);
2190     if (bp_site_sp)
2191     {
2192         if (bp_site_sp->IsEnabled())
2193             error = DisableBreakpointSite (bp_site_sp.get());
2194     }
2195     else
2196     {
2197         error.SetErrorStringWithFormat("invalid breakpoint site ID: %" PRIu64, break_id);
2198     }
2199 
2200     return error;
2201 }
2202 
2203 Error
2204 Process::EnableBreakpointSiteByID (lldb::user_id_t break_id)
2205 {
2206     Error error;
2207     BreakpointSiteSP bp_site_sp = m_breakpoint_site_list.FindByID (break_id);
2208     if (bp_site_sp)
2209     {
2210         if (!bp_site_sp->IsEnabled())
2211             error = EnableBreakpointSite (bp_site_sp.get());
2212     }
2213     else
2214     {
2215         error.SetErrorStringWithFormat("invalid breakpoint site ID: %" PRIu64, break_id);
2216     }
2217     return error;
2218 }
2219 
2220 lldb::break_id_t
2221 Process::CreateBreakpointSite (const BreakpointLocationSP &owner, bool use_hardware)
2222 {
2223     addr_t load_addr = LLDB_INVALID_ADDRESS;
2224 
2225     bool show_error = true;
2226     switch (GetState())
2227     {
2228         case eStateInvalid:
2229         case eStateUnloaded:
2230         case eStateConnected:
2231         case eStateAttaching:
2232         case eStateLaunching:
2233         case eStateDetached:
2234         case eStateExited:
2235             show_error = false;
2236             break;
2237 
2238         case eStateStopped:
2239         case eStateRunning:
2240         case eStateStepping:
2241         case eStateCrashed:
2242         case eStateSuspended:
2243             show_error = IsAlive();
2244             break;
2245     }
2246 
2247     // Reset the IsIndirect flag here, in case the location changes from
2248     // pointing to a indirect symbol to a regular symbol.
2249     owner->SetIsIndirect (false);
2250 
2251     if (owner->ShouldResolveIndirectFunctions())
2252     {
2253         Symbol *symbol = owner->GetAddress().CalculateSymbolContextSymbol();
2254         if (symbol && symbol->IsIndirect())
2255         {
2256             Error error;
2257             load_addr = ResolveIndirectFunction (&symbol->GetAddress(), error);
2258             if (!error.Success() && show_error)
2259             {
2260                 m_target.GetDebugger().GetErrorFile()->Printf ("warning: failed to resolve indirect function at 0x%" PRIx64 " for breakpoint %i.%i: %s\n",
2261                                                                symbol->GetAddress().GetLoadAddress(&m_target),
2262                                                                owner->GetBreakpoint().GetID(),
2263                                                                owner->GetID(),
2264                                                                error.AsCString() ? error.AsCString() : "unknown error");
2265                 return LLDB_INVALID_BREAK_ID;
2266             }
2267             Address resolved_address(load_addr);
2268             load_addr = resolved_address.GetOpcodeLoadAddress (&m_target);
2269             owner->SetIsIndirect(true);
2270         }
2271         else
2272             load_addr = owner->GetAddress().GetOpcodeLoadAddress (&m_target);
2273     }
2274     else
2275         load_addr = owner->GetAddress().GetOpcodeLoadAddress (&m_target);
2276 
2277     if (load_addr != LLDB_INVALID_ADDRESS)
2278     {
2279         BreakpointSiteSP bp_site_sp;
2280 
2281         // Look up this breakpoint site.  If it exists, then add this new owner, otherwise
2282         // create a new breakpoint site and add it.
2283 
2284         bp_site_sp = m_breakpoint_site_list.FindByAddress (load_addr);
2285 
2286         if (bp_site_sp)
2287         {
2288             bp_site_sp->AddOwner (owner);
2289             owner->SetBreakpointSite (bp_site_sp);
2290             return bp_site_sp->GetID();
2291         }
2292         else
2293         {
2294             bp_site_sp.reset (new BreakpointSite (&m_breakpoint_site_list, owner, load_addr, use_hardware));
2295             if (bp_site_sp)
2296             {
2297                 Error error = EnableBreakpointSite (bp_site_sp.get());
2298                 if (error.Success())
2299                 {
2300                     owner->SetBreakpointSite (bp_site_sp);
2301                     return m_breakpoint_site_list.Add (bp_site_sp);
2302                 }
2303                 else
2304                 {
2305                     if (show_error)
2306                     {
2307                         // Report error for setting breakpoint...
2308                         m_target.GetDebugger().GetErrorFile()->Printf ("warning: failed to set breakpoint site at 0x%" PRIx64 " for breakpoint %i.%i: %s\n",
2309                                                                        load_addr,
2310                                                                        owner->GetBreakpoint().GetID(),
2311                                                                        owner->GetID(),
2312                                                                        error.AsCString() ? error.AsCString() : "unknown error");
2313                     }
2314                 }
2315             }
2316         }
2317     }
2318     // We failed to enable the breakpoint
2319     return LLDB_INVALID_BREAK_ID;
2320 
2321 }
2322 
2323 void
2324 Process::RemoveOwnerFromBreakpointSite (lldb::user_id_t owner_id, lldb::user_id_t owner_loc_id, BreakpointSiteSP &bp_site_sp)
2325 {
2326     uint32_t num_owners = bp_site_sp->RemoveOwner (owner_id, owner_loc_id);
2327     if (num_owners == 0)
2328     {
2329         // Don't try to disable the site if we don't have a live process anymore.
2330         if (IsAlive())
2331             DisableBreakpointSite (bp_site_sp.get());
2332         m_breakpoint_site_list.RemoveByAddress(bp_site_sp->GetLoadAddress());
2333     }
2334 }
2335 
2336 
2337 size_t
2338 Process::RemoveBreakpointOpcodesFromBuffer (addr_t bp_addr, size_t size, uint8_t *buf) const
2339 {
2340     size_t bytes_removed = 0;
2341     BreakpointSiteList bp_sites_in_range;
2342 
2343     if (m_breakpoint_site_list.FindInRange (bp_addr, bp_addr + size, bp_sites_in_range))
2344     {
2345         bp_sites_in_range.ForEach([bp_addr, size, buf, &bytes_removed](BreakpointSite *bp_site) -> void {
2346             if (bp_site->GetType() == BreakpointSite::eSoftware)
2347             {
2348                 addr_t intersect_addr;
2349                 size_t intersect_size;
2350                 size_t opcode_offset;
2351                 if (bp_site->IntersectsRange(bp_addr, size, &intersect_addr, &intersect_size, &opcode_offset))
2352                 {
2353                     assert(bp_addr <= intersect_addr && intersect_addr < bp_addr + size);
2354                     assert(bp_addr < intersect_addr + intersect_size && intersect_addr + intersect_size <= bp_addr + size);
2355                     assert(opcode_offset + intersect_size <= bp_site->GetByteSize());
2356                     size_t buf_offset = intersect_addr - bp_addr;
2357                     ::memcpy(buf + buf_offset, bp_site->GetSavedOpcodeBytes() + opcode_offset, intersect_size);
2358                 }
2359             }
2360         });
2361     }
2362     return bytes_removed;
2363 }
2364 
2365 
2366 
2367 size_t
2368 Process::GetSoftwareBreakpointTrapOpcode (BreakpointSite* bp_site)
2369 {
2370     PlatformSP platform_sp (m_target.GetPlatform());
2371     if (platform_sp)
2372         return platform_sp->GetSoftwareBreakpointTrapOpcode (m_target, bp_site);
2373     return 0;
2374 }
2375 
2376 Error
2377 Process::EnableSoftwareBreakpoint (BreakpointSite *bp_site)
2378 {
2379     Error error;
2380     assert (bp_site != NULL);
2381     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
2382     const addr_t bp_addr = bp_site->GetLoadAddress();
2383     if (log)
2384         log->Printf ("Process::EnableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64, bp_site->GetID(), (uint64_t)bp_addr);
2385     if (bp_site->IsEnabled())
2386     {
2387         if (log)
2388             log->Printf ("Process::EnableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64 " -- already enabled", bp_site->GetID(), (uint64_t)bp_addr);
2389         return error;
2390     }
2391 
2392     if (bp_addr == LLDB_INVALID_ADDRESS)
2393     {
2394         error.SetErrorString("BreakpointSite contains an invalid load address.");
2395         return error;
2396     }
2397     // Ask the lldb::Process subclass to fill in the correct software breakpoint
2398     // trap for the breakpoint site
2399     const size_t bp_opcode_size = GetSoftwareBreakpointTrapOpcode(bp_site);
2400 
2401     if (bp_opcode_size == 0)
2402     {
2403         error.SetErrorStringWithFormat ("Process::GetSoftwareBreakpointTrapOpcode() returned zero, unable to get breakpoint trap for address 0x%" PRIx64, bp_addr);
2404     }
2405     else
2406     {
2407         const uint8_t * const bp_opcode_bytes = bp_site->GetTrapOpcodeBytes();
2408 
2409         if (bp_opcode_bytes == NULL)
2410         {
2411             error.SetErrorString ("BreakpointSite doesn't contain a valid breakpoint trap opcode.");
2412             return error;
2413         }
2414 
2415         // Save the original opcode by reading it
2416         if (DoReadMemory(bp_addr, bp_site->GetSavedOpcodeBytes(), bp_opcode_size, error) == bp_opcode_size)
2417         {
2418             // Write a software breakpoint in place of the original opcode
2419             if (DoWriteMemory(bp_addr, bp_opcode_bytes, bp_opcode_size, error) == bp_opcode_size)
2420             {
2421                 uint8_t verify_bp_opcode_bytes[64];
2422                 if (DoReadMemory(bp_addr, verify_bp_opcode_bytes, bp_opcode_size, error) == bp_opcode_size)
2423                 {
2424                     if (::memcmp(bp_opcode_bytes, verify_bp_opcode_bytes, bp_opcode_size) == 0)
2425                     {
2426                         bp_site->SetEnabled(true);
2427                         bp_site->SetType (BreakpointSite::eSoftware);
2428                         if (log)
2429                             log->Printf ("Process::EnableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64 " -- SUCCESS",
2430                                          bp_site->GetID(),
2431                                          (uint64_t)bp_addr);
2432                     }
2433                     else
2434                         error.SetErrorString("failed to verify the breakpoint trap in memory.");
2435                 }
2436                 else
2437                     error.SetErrorString("Unable to read memory to verify breakpoint trap.");
2438             }
2439             else
2440                 error.SetErrorString("Unable to write breakpoint trap to memory.");
2441         }
2442         else
2443             error.SetErrorString("Unable to read memory at breakpoint address.");
2444     }
2445     if (log && error.Fail())
2446         log->Printf ("Process::EnableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64 " -- FAILED: %s",
2447                      bp_site->GetID(),
2448                      (uint64_t)bp_addr,
2449                      error.AsCString());
2450     return error;
2451 }
2452 
2453 Error
2454 Process::DisableSoftwareBreakpoint (BreakpointSite *bp_site)
2455 {
2456     Error error;
2457     assert (bp_site != NULL);
2458     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
2459     addr_t bp_addr = bp_site->GetLoadAddress();
2460     lldb::user_id_t breakID = bp_site->GetID();
2461     if (log)
2462         log->Printf ("Process::DisableSoftwareBreakpoint (breakID = %" PRIu64 ") addr = 0x%" PRIx64, breakID, (uint64_t)bp_addr);
2463 
2464     if (bp_site->IsHardware())
2465     {
2466         error.SetErrorString("Breakpoint site is a hardware breakpoint.");
2467     }
2468     else if (bp_site->IsEnabled())
2469     {
2470         const size_t break_op_size = bp_site->GetByteSize();
2471         const uint8_t * const break_op = bp_site->GetTrapOpcodeBytes();
2472         if (break_op_size > 0)
2473         {
2474             // Clear a software breakpoint instruction
2475             uint8_t curr_break_op[8];
2476             assert (break_op_size <= sizeof(curr_break_op));
2477             bool break_op_found = false;
2478 
2479             // Read the breakpoint opcode
2480             if (DoReadMemory (bp_addr, curr_break_op, break_op_size, error) == break_op_size)
2481             {
2482                 bool verify = false;
2483                 // Make sure we have the a breakpoint opcode exists at this address
2484                 if (::memcmp (curr_break_op, break_op, break_op_size) == 0)
2485                 {
2486                     break_op_found = true;
2487                     // We found a valid breakpoint opcode at this address, now restore
2488                     // the saved opcode.
2489                     if (DoWriteMemory (bp_addr, bp_site->GetSavedOpcodeBytes(), break_op_size, error) == break_op_size)
2490                     {
2491                         verify = true;
2492                     }
2493                     else
2494                         error.SetErrorString("Memory write failed when restoring original opcode.");
2495                 }
2496                 else
2497                 {
2498                     error.SetErrorString("Original breakpoint trap is no longer in memory.");
2499                     // Set verify to true and so we can check if the original opcode has already been restored
2500                     verify = true;
2501                 }
2502 
2503                 if (verify)
2504                 {
2505                     uint8_t verify_opcode[8];
2506                     assert (break_op_size < sizeof(verify_opcode));
2507                     // Verify that our original opcode made it back to the inferior
2508                     if (DoReadMemory (bp_addr, verify_opcode, break_op_size, error) == break_op_size)
2509                     {
2510                         // compare the memory we just read with the original opcode
2511                         if (::memcmp (bp_site->GetSavedOpcodeBytes(), verify_opcode, break_op_size) == 0)
2512                         {
2513                             // SUCCESS
2514                             bp_site->SetEnabled(false);
2515                             if (log)
2516                                 log->Printf ("Process::DisableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64 " -- SUCCESS", bp_site->GetID(), (uint64_t)bp_addr);
2517                             return error;
2518                         }
2519                         else
2520                         {
2521                             if (break_op_found)
2522                                 error.SetErrorString("Failed to restore original opcode.");
2523                         }
2524                     }
2525                     else
2526                         error.SetErrorString("Failed to read memory to verify that breakpoint trap was restored.");
2527                 }
2528             }
2529             else
2530                 error.SetErrorString("Unable to read memory that should contain the breakpoint trap.");
2531         }
2532     }
2533     else
2534     {
2535         if (log)
2536             log->Printf ("Process::DisableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64 " -- already disabled", bp_site->GetID(), (uint64_t)bp_addr);
2537         return error;
2538     }
2539 
2540     if (log)
2541         log->Printf ("Process::DisableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64 " -- FAILED: %s",
2542                      bp_site->GetID(),
2543                      (uint64_t)bp_addr,
2544                      error.AsCString());
2545     return error;
2546 
2547 }
2548 
2549 // Uncomment to verify memory caching works after making changes to caching code
2550 //#define VERIFY_MEMORY_READS
2551 
2552 size_t
2553 Process::ReadMemory (addr_t addr, void *buf, size_t size, Error &error)
2554 {
2555     error.Clear();
2556     if (!GetDisableMemoryCache())
2557     {
2558 #if defined (VERIFY_MEMORY_READS)
2559         // Memory caching is enabled, with debug verification
2560 
2561         if (buf && size)
2562         {
2563             // Uncomment the line below to make sure memory caching is working.
2564             // I ran this through the test suite and got no assertions, so I am
2565             // pretty confident this is working well. If any changes are made to
2566             // memory caching, uncomment the line below and test your changes!
2567 
2568             // Verify all memory reads by using the cache first, then redundantly
2569             // reading the same memory from the inferior and comparing to make sure
2570             // everything is exactly the same.
2571             std::string verify_buf (size, '\0');
2572             assert (verify_buf.size() == size);
2573             const size_t cache_bytes_read = m_memory_cache.Read (this, addr, buf, size, error);
2574             Error verify_error;
2575             const size_t verify_bytes_read = ReadMemoryFromInferior (addr, const_cast<char *>(verify_buf.data()), verify_buf.size(), verify_error);
2576             assert (cache_bytes_read == verify_bytes_read);
2577             assert (memcmp(buf, verify_buf.data(), verify_buf.size()) == 0);
2578             assert (verify_error.Success() == error.Success());
2579             return cache_bytes_read;
2580         }
2581         return 0;
2582 #else // !defined(VERIFY_MEMORY_READS)
2583         // Memory caching is enabled, without debug verification
2584 
2585         return m_memory_cache.Read (addr, buf, size, error);
2586 #endif // defined (VERIFY_MEMORY_READS)
2587     }
2588     else
2589     {
2590         // Memory caching is disabled
2591 
2592         return ReadMemoryFromInferior (addr, buf, size, error);
2593     }
2594 }
2595 
2596 size_t
2597 Process::ReadCStringFromMemory (addr_t addr, std::string &out_str, Error &error)
2598 {
2599     char buf[256];
2600     out_str.clear();
2601     addr_t curr_addr = addr;
2602     while (1)
2603     {
2604         size_t length = ReadCStringFromMemory (curr_addr, buf, sizeof(buf), error);
2605         if (length == 0)
2606             break;
2607         out_str.append(buf, length);
2608         // If we got "length - 1" bytes, we didn't get the whole C string, we
2609         // need to read some more characters
2610         if (length == sizeof(buf) - 1)
2611             curr_addr += length;
2612         else
2613             break;
2614     }
2615     return out_str.size();
2616 }
2617 
2618 
2619 size_t
2620 Process::ReadStringFromMemory (addr_t addr, char *dst, size_t max_bytes, Error &error,
2621                                 size_t type_width)
2622 {
2623     size_t total_bytes_read = 0;
2624     if (dst && max_bytes && type_width && max_bytes >= type_width)
2625     {
2626         // Ensure a null terminator independent of the number of bytes that is read.
2627         memset (dst, 0, max_bytes);
2628         size_t bytes_left = max_bytes - type_width;
2629 
2630         const char terminator[4] = {'\0', '\0', '\0', '\0'};
2631         assert(sizeof(terminator) >= type_width &&
2632                "Attempting to validate a string with more than 4 bytes per character!");
2633 
2634         addr_t curr_addr = addr;
2635         const size_t cache_line_size = m_memory_cache.GetMemoryCacheLineSize();
2636         char *curr_dst = dst;
2637 
2638         error.Clear();
2639         while (bytes_left > 0 && error.Success())
2640         {
2641             addr_t cache_line_bytes_left = cache_line_size - (curr_addr % cache_line_size);
2642             addr_t bytes_to_read = std::min<addr_t>(bytes_left, cache_line_bytes_left);
2643             size_t bytes_read = ReadMemory (curr_addr, curr_dst, bytes_to_read, error);
2644 
2645             if (bytes_read == 0)
2646                 break;
2647 
2648             // Search for a null terminator of correct size and alignment in bytes_read
2649             size_t aligned_start = total_bytes_read - total_bytes_read % type_width;
2650             for (size_t i = aligned_start; i + type_width <= total_bytes_read + bytes_read; i += type_width)
2651                 if (::strncmp(&dst[i], terminator, type_width) == 0)
2652                 {
2653                     error.Clear();
2654                     return i;
2655                 }
2656 
2657             total_bytes_read += bytes_read;
2658             curr_dst += bytes_read;
2659             curr_addr += bytes_read;
2660             bytes_left -= bytes_read;
2661         }
2662     }
2663     else
2664     {
2665         if (max_bytes)
2666             error.SetErrorString("invalid arguments");
2667     }
2668     return total_bytes_read;
2669 }
2670 
2671 // Deprecated in favor of ReadStringFromMemory which has wchar support and correct code to find
2672 // null terminators.
2673 size_t
2674 Process::ReadCStringFromMemory (addr_t addr, char *dst, size_t dst_max_len, Error &result_error)
2675 {
2676     size_t total_cstr_len = 0;
2677     if (dst && dst_max_len)
2678     {
2679         result_error.Clear();
2680         // NULL out everything just to be safe
2681         memset (dst, 0, dst_max_len);
2682         Error error;
2683         addr_t curr_addr = addr;
2684         const size_t cache_line_size = m_memory_cache.GetMemoryCacheLineSize();
2685         size_t bytes_left = dst_max_len - 1;
2686         char *curr_dst = dst;
2687 
2688         while (bytes_left > 0)
2689         {
2690             addr_t cache_line_bytes_left = cache_line_size - (curr_addr % cache_line_size);
2691             addr_t bytes_to_read = std::min<addr_t>(bytes_left, cache_line_bytes_left);
2692             size_t bytes_read = ReadMemory (curr_addr, curr_dst, bytes_to_read, error);
2693 
2694             if (bytes_read == 0)
2695             {
2696                 result_error = error;
2697                 dst[total_cstr_len] = '\0';
2698                 break;
2699             }
2700             const size_t len = strlen(curr_dst);
2701 
2702             total_cstr_len += len;
2703 
2704             if (len < bytes_to_read)
2705                 break;
2706 
2707             curr_dst += bytes_read;
2708             curr_addr += bytes_read;
2709             bytes_left -= bytes_read;
2710         }
2711     }
2712     else
2713     {
2714         if (dst == NULL)
2715             result_error.SetErrorString("invalid arguments");
2716         else
2717             result_error.Clear();
2718     }
2719     return total_cstr_len;
2720 }
2721 
2722 size_t
2723 Process::ReadMemoryFromInferior (addr_t addr, void *buf, size_t size, Error &error)
2724 {
2725     if (buf == NULL || size == 0)
2726         return 0;
2727 
2728     size_t bytes_read = 0;
2729     uint8_t *bytes = (uint8_t *)buf;
2730 
2731     while (bytes_read < size)
2732     {
2733         const size_t curr_size = size - bytes_read;
2734         const size_t curr_bytes_read = DoReadMemory (addr + bytes_read,
2735                                                      bytes + bytes_read,
2736                                                      curr_size,
2737                                                      error);
2738         bytes_read += curr_bytes_read;
2739         if (curr_bytes_read == curr_size || curr_bytes_read == 0)
2740             break;
2741     }
2742 
2743     // Replace any software breakpoint opcodes that fall into this range back
2744     // into "buf" before we return
2745     if (bytes_read > 0)
2746         RemoveBreakpointOpcodesFromBuffer (addr, bytes_read, (uint8_t *)buf);
2747     return bytes_read;
2748 }
2749 
2750 uint64_t
2751 Process::ReadUnsignedIntegerFromMemory (lldb::addr_t vm_addr, size_t integer_byte_size, uint64_t fail_value, Error &error)
2752 {
2753     Scalar scalar;
2754     if (ReadScalarIntegerFromMemory(vm_addr, integer_byte_size, false, scalar, error))
2755         return scalar.ULongLong(fail_value);
2756     return fail_value;
2757 }
2758 
2759 addr_t
2760 Process::ReadPointerFromMemory (lldb::addr_t vm_addr, Error &error)
2761 {
2762     Scalar scalar;
2763     if (ReadScalarIntegerFromMemory(vm_addr, GetAddressByteSize(), false, scalar, error))
2764         return scalar.ULongLong(LLDB_INVALID_ADDRESS);
2765     return LLDB_INVALID_ADDRESS;
2766 }
2767 
2768 
2769 bool
2770 Process::WritePointerToMemory (lldb::addr_t vm_addr,
2771                                lldb::addr_t ptr_value,
2772                                Error &error)
2773 {
2774     Scalar scalar;
2775     const uint32_t addr_byte_size = GetAddressByteSize();
2776     if (addr_byte_size <= 4)
2777         scalar = (uint32_t)ptr_value;
2778     else
2779         scalar = ptr_value;
2780     return WriteScalarToMemory(vm_addr, scalar, addr_byte_size, error) == addr_byte_size;
2781 }
2782 
2783 size_t
2784 Process::WriteMemoryPrivate (addr_t addr, const void *buf, size_t size, Error &error)
2785 {
2786     size_t bytes_written = 0;
2787     const uint8_t *bytes = (const uint8_t *)buf;
2788 
2789     while (bytes_written < size)
2790     {
2791         const size_t curr_size = size - bytes_written;
2792         const size_t curr_bytes_written = DoWriteMemory (addr + bytes_written,
2793                                                          bytes + bytes_written,
2794                                                          curr_size,
2795                                                          error);
2796         bytes_written += curr_bytes_written;
2797         if (curr_bytes_written == curr_size || curr_bytes_written == 0)
2798             break;
2799     }
2800     return bytes_written;
2801 }
2802 
2803 size_t
2804 Process::WriteMemory (addr_t addr, const void *buf, size_t size, Error &error)
2805 {
2806 #if defined (ENABLE_MEMORY_CACHING)
2807     m_memory_cache.Flush (addr, size);
2808 #endif
2809 
2810     if (buf == NULL || size == 0)
2811         return 0;
2812 
2813     m_mod_id.BumpMemoryID();
2814 
2815     // We need to write any data that would go where any current software traps
2816     // (enabled software breakpoints) any software traps (breakpoints) that we
2817     // may have placed in our tasks memory.
2818 
2819     BreakpointSiteList bp_sites_in_range;
2820 
2821     if (m_breakpoint_site_list.FindInRange (addr, addr + size, bp_sites_in_range))
2822     {
2823         // No breakpoint sites overlap
2824         if (bp_sites_in_range.IsEmpty())
2825             return WriteMemoryPrivate (addr, buf, size, error);
2826         else
2827         {
2828             const uint8_t *ubuf = (const uint8_t *)buf;
2829             uint64_t bytes_written = 0;
2830 
2831             bp_sites_in_range.ForEach([this, addr, size, &bytes_written, &ubuf, &error](BreakpointSite *bp) -> void {
2832 
2833                 if (error.Success())
2834                 {
2835                     addr_t intersect_addr;
2836                     size_t intersect_size;
2837                     size_t opcode_offset;
2838                     const bool intersects = bp->IntersectsRange(addr, size, &intersect_addr, &intersect_size, &opcode_offset);
2839                     assert(intersects);
2840                     assert(addr <= intersect_addr && intersect_addr < addr + size);
2841                     assert(addr < intersect_addr + intersect_size && intersect_addr + intersect_size <= addr + size);
2842                     assert(opcode_offset + intersect_size <= bp->GetByteSize());
2843 
2844                     // Check for bytes before this breakpoint
2845                     const addr_t curr_addr = addr + bytes_written;
2846                     if (intersect_addr > curr_addr)
2847                     {
2848                         // There are some bytes before this breakpoint that we need to
2849                         // just write to memory
2850                         size_t curr_size = intersect_addr - curr_addr;
2851                         size_t curr_bytes_written = WriteMemoryPrivate (curr_addr,
2852                                                                         ubuf + bytes_written,
2853                                                                         curr_size,
2854                                                                         error);
2855                         bytes_written += curr_bytes_written;
2856                         if (curr_bytes_written != curr_size)
2857                         {
2858                             // We weren't able to write all of the requested bytes, we
2859                             // are done looping and will return the number of bytes that
2860                             // we have written so far.
2861                             if (error.Success())
2862                                 error.SetErrorToGenericError();
2863                         }
2864                     }
2865                     // Now write any bytes that would cover up any software breakpoints
2866                     // directly into the breakpoint opcode buffer
2867                     ::memcpy(bp->GetSavedOpcodeBytes() + opcode_offset, ubuf + bytes_written, intersect_size);
2868                     bytes_written += intersect_size;
2869                 }
2870             });
2871 
2872             if (bytes_written < size)
2873                 WriteMemoryPrivate (addr + bytes_written,
2874                                     ubuf + bytes_written,
2875                                     size - bytes_written,
2876                                     error);
2877         }
2878     }
2879     else
2880     {
2881         return WriteMemoryPrivate (addr, buf, size, error);
2882     }
2883 
2884     // Write any remaining bytes after the last breakpoint if we have any left
2885     return 0; //bytes_written;
2886 }
2887 
2888 size_t
2889 Process::WriteScalarToMemory (addr_t addr, const Scalar &scalar, size_t byte_size, Error &error)
2890 {
2891     if (byte_size == UINT32_MAX)
2892         byte_size = scalar.GetByteSize();
2893     if (byte_size > 0)
2894     {
2895         uint8_t buf[32];
2896         const size_t mem_size = scalar.GetAsMemoryData (buf, byte_size, GetByteOrder(), error);
2897         if (mem_size > 0)
2898             return WriteMemory(addr, buf, mem_size, error);
2899         else
2900             error.SetErrorString ("failed to get scalar as memory data");
2901     }
2902     else
2903     {
2904         error.SetErrorString ("invalid scalar value");
2905     }
2906     return 0;
2907 }
2908 
2909 size_t
2910 Process::ReadScalarIntegerFromMemory (addr_t addr,
2911                                       uint32_t byte_size,
2912                                       bool is_signed,
2913                                       Scalar &scalar,
2914                                       Error &error)
2915 {
2916     uint64_t uval = 0;
2917     if (byte_size == 0)
2918     {
2919         error.SetErrorString ("byte size is zero");
2920     }
2921     else if (byte_size & (byte_size - 1))
2922     {
2923         error.SetErrorStringWithFormat ("byte size %u is not a power of 2", byte_size);
2924     }
2925     else if (byte_size <= sizeof(uval))
2926     {
2927         const size_t bytes_read = ReadMemory (addr, &uval, byte_size, error);
2928         if (bytes_read == byte_size)
2929         {
2930             DataExtractor data (&uval, sizeof(uval), GetByteOrder(), GetAddressByteSize());
2931             lldb::offset_t offset = 0;
2932             if (byte_size <= 4)
2933                 scalar = data.GetMaxU32 (&offset, byte_size);
2934             else
2935                 scalar = data.GetMaxU64 (&offset, byte_size);
2936             if (is_signed)
2937                 scalar.SignExtend(byte_size * 8);
2938             return bytes_read;
2939         }
2940     }
2941     else
2942     {
2943         error.SetErrorStringWithFormat ("byte size of %u is too large for integer scalar type", byte_size);
2944     }
2945     return 0;
2946 }
2947 
2948 #define USE_ALLOCATE_MEMORY_CACHE 1
2949 addr_t
2950 Process::AllocateMemory(size_t size, uint32_t permissions, Error &error)
2951 {
2952     if (GetPrivateState() != eStateStopped)
2953         return LLDB_INVALID_ADDRESS;
2954 
2955 #if defined (USE_ALLOCATE_MEMORY_CACHE)
2956     return m_allocated_memory_cache.AllocateMemory(size, permissions, error);
2957 #else
2958     addr_t allocated_addr = DoAllocateMemory (size, permissions, error);
2959     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
2960     if (log)
2961         log->Printf("Process::AllocateMemory(size=%" PRIu64 ", permissions=%s) => 0x%16.16" PRIx64 " (m_stop_id = %u m_memory_id = %u)",
2962                     (uint64_t)size,
2963                     GetPermissionsAsCString (permissions),
2964                     (uint64_t)allocated_addr,
2965                     m_mod_id.GetStopID(),
2966                     m_mod_id.GetMemoryID());
2967     return allocated_addr;
2968 #endif
2969 }
2970 
2971 bool
2972 Process::CanJIT ()
2973 {
2974     if (m_can_jit == eCanJITDontKnow)
2975     {
2976         Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
2977         Error err;
2978 
2979         uint64_t allocated_memory = AllocateMemory(8,
2980                                                    ePermissionsReadable | ePermissionsWritable | ePermissionsExecutable,
2981                                                    err);
2982 
2983         if (err.Success())
2984         {
2985             m_can_jit = eCanJITYes;
2986             if (log)
2987                 log->Printf ("Process::%s pid %" PRIu64 " allocation test passed, CanJIT () is true", __FUNCTION__, GetID ());
2988         }
2989         else
2990         {
2991             m_can_jit = eCanJITNo;
2992             if (log)
2993                 log->Printf ("Process::%s pid %" PRIu64 " allocation test failed, CanJIT () is false: %s", __FUNCTION__, GetID (), err.AsCString ());
2994         }
2995 
2996         DeallocateMemory (allocated_memory);
2997     }
2998 
2999     return m_can_jit == eCanJITYes;
3000 }
3001 
3002 void
3003 Process::SetCanJIT (bool can_jit)
3004 {
3005     m_can_jit = (can_jit ? eCanJITYes : eCanJITNo);
3006 }
3007 
3008 Error
3009 Process::DeallocateMemory (addr_t ptr)
3010 {
3011     Error error;
3012 #if defined (USE_ALLOCATE_MEMORY_CACHE)
3013     if (!m_allocated_memory_cache.DeallocateMemory(ptr))
3014     {
3015         error.SetErrorStringWithFormat ("deallocation of memory at 0x%" PRIx64 " failed.", (uint64_t)ptr);
3016     }
3017 #else
3018     error = DoDeallocateMemory (ptr);
3019 
3020     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
3021     if (log)
3022         log->Printf("Process::DeallocateMemory(addr=0x%16.16" PRIx64 ") => err = %s (m_stop_id = %u, m_memory_id = %u)",
3023                     ptr,
3024                     error.AsCString("SUCCESS"),
3025                     m_mod_id.GetStopID(),
3026                     m_mod_id.GetMemoryID());
3027 #endif
3028     return error;
3029 }
3030 
3031 
3032 ModuleSP
3033 Process::ReadModuleFromMemory (const FileSpec& file_spec,
3034                                lldb::addr_t header_addr,
3035                                size_t size_to_read)
3036 {
3037     ModuleSP module_sp (new Module (file_spec, ArchSpec()));
3038     if (module_sp)
3039     {
3040         Error error;
3041         ObjectFile *objfile = module_sp->GetMemoryObjectFile (shared_from_this(), header_addr, error, size_to_read);
3042         if (objfile)
3043             return module_sp;
3044     }
3045     return ModuleSP();
3046 }
3047 
3048 bool
3049 Process::GetLoadAddressPermissions (lldb::addr_t load_addr, uint32_t &permissions)
3050 {
3051     MemoryRegionInfo range_info;
3052     permissions = 0;
3053     Error error (GetMemoryRegionInfo (load_addr, range_info));
3054     if (!error.Success())
3055         return false;
3056     if (range_info.GetReadable() == MemoryRegionInfo::eDontKnow
3057         || range_info.GetWritable() == MemoryRegionInfo::eDontKnow
3058         || range_info.GetExecutable() == MemoryRegionInfo::eDontKnow)
3059     {
3060         return false;
3061     }
3062 
3063     if (range_info.GetReadable() == MemoryRegionInfo::eYes)
3064         permissions |= lldb::ePermissionsReadable;
3065 
3066     if (range_info.GetWritable() == MemoryRegionInfo::eYes)
3067         permissions |= lldb::ePermissionsWritable;
3068 
3069     if (range_info.GetExecutable() == MemoryRegionInfo::eYes)
3070         permissions |= lldb::ePermissionsExecutable;
3071 
3072     return true;
3073 }
3074 
3075 Error
3076 Process::EnableWatchpoint (Watchpoint *watchpoint, bool notify)
3077 {
3078     Error error;
3079     error.SetErrorString("watchpoints are not supported");
3080     return error;
3081 }
3082 
3083 Error
3084 Process::DisableWatchpoint (Watchpoint *watchpoint, bool notify)
3085 {
3086     Error error;
3087     error.SetErrorString("watchpoints are not supported");
3088     return error;
3089 }
3090 
3091 StateType
3092 Process::WaitForProcessStopPrivate (const TimeValue *timeout, EventSP &event_sp)
3093 {
3094     StateType state;
3095     // Now wait for the process to launch and return control to us, and then
3096     // call DidLaunch:
3097     while (1)
3098     {
3099         event_sp.reset();
3100         state = WaitForStateChangedEventsPrivate (timeout, event_sp);
3101 
3102         if (StateIsStoppedState(state, false))
3103             break;
3104 
3105         // If state is invalid, then we timed out
3106         if (state == eStateInvalid)
3107             break;
3108 
3109         if (event_sp)
3110             HandlePrivateEvent (event_sp);
3111     }
3112     return state;
3113 }
3114 
3115 void
3116 Process::LoadOperatingSystemPlugin(bool flush)
3117 {
3118     if (flush)
3119         m_thread_list.Clear();
3120     m_os_ap.reset (OperatingSystem::FindPlugin (this, NULL));
3121     if (flush)
3122         Flush();
3123 }
3124 
3125 Error
3126 Process::Launch (ProcessLaunchInfo &launch_info)
3127 {
3128     Error error;
3129     m_abi_sp.reset();
3130     m_dyld_ap.reset();
3131     m_jit_loaders_ap.reset();
3132     m_system_runtime_ap.reset();
3133     m_os_ap.reset();
3134     m_process_input_reader.reset();
3135     m_stop_info_override_callback = NULL;
3136 
3137     Module *exe_module = m_target.GetExecutableModulePointer();
3138     if (exe_module)
3139     {
3140         char local_exec_file_path[PATH_MAX];
3141         char platform_exec_file_path[PATH_MAX];
3142         exe_module->GetFileSpec().GetPath(local_exec_file_path, sizeof(local_exec_file_path));
3143         exe_module->GetPlatformFileSpec().GetPath(platform_exec_file_path, sizeof(platform_exec_file_path));
3144         if (exe_module->GetFileSpec().Exists())
3145         {
3146             // Install anything that might need to be installed prior to launching.
3147             // For host systems, this will do nothing, but if we are connected to a
3148             // remote platform it will install any needed binaries
3149             error = GetTarget().Install(&launch_info);
3150             if (error.Fail())
3151                 return error;
3152 
3153             if (PrivateStateThreadIsValid ())
3154                 PausePrivateStateThread ();
3155 
3156             error = WillLaunch (exe_module);
3157             if (error.Success())
3158             {
3159                 const bool restarted = false;
3160                 SetPublicState (eStateLaunching, restarted);
3161                 m_should_detach = false;
3162 
3163                 if (m_public_run_lock.TrySetRunning())
3164                 {
3165                     // Now launch using these arguments.
3166                     error = DoLaunch (exe_module, launch_info);
3167                 }
3168                 else
3169                 {
3170                     // This shouldn't happen
3171                     error.SetErrorString("failed to acquire process run lock");
3172                 }
3173 
3174                 if (error.Fail())
3175                 {
3176                     if (GetID() != LLDB_INVALID_PROCESS_ID)
3177                     {
3178                         SetID (LLDB_INVALID_PROCESS_ID);
3179                         const char *error_string = error.AsCString();
3180                         if (error_string == NULL)
3181                             error_string = "launch failed";
3182                         SetExitStatus (-1, error_string);
3183                     }
3184                 }
3185                 else
3186                 {
3187                     EventSP event_sp;
3188                     TimeValue timeout_time;
3189                     timeout_time = TimeValue::Now();
3190                     timeout_time.OffsetWithSeconds(10);
3191                     StateType state = WaitForProcessStopPrivate(&timeout_time, event_sp);
3192 
3193                     if (state == eStateInvalid || event_sp.get() == NULL)
3194                     {
3195                         // We were able to launch the process, but we failed to
3196                         // catch the initial stop.
3197                         error.SetErrorString ("failed to catch stop after launch");
3198                         SetExitStatus (0, "failed to catch stop after launch");
3199                         Destroy(false);
3200                     }
3201                     else if (state == eStateStopped || state == eStateCrashed)
3202                     {
3203 
3204                         DidLaunch ();
3205 
3206                         DynamicLoader *dyld = GetDynamicLoader ();
3207                         if (dyld)
3208                             dyld->DidLaunch();
3209 
3210                         GetJITLoaders().DidLaunch();
3211 
3212                         SystemRuntime *system_runtime = GetSystemRuntime ();
3213                         if (system_runtime)
3214                             system_runtime->DidLaunch();
3215 
3216                         LoadOperatingSystemPlugin(false);
3217 
3218                         // Note, the stop event was consumed above, but not handled. This was done
3219                         // to give DidLaunch a chance to run. The target is either stopped or crashed.
3220                         // Directly set the state.  This is done to prevent a stop message with a bunch
3221                         // of spurious output on thread status, as well as not pop a ProcessIOHandler.
3222                         SetPublicState(state, false);
3223 
3224                         if (PrivateStateThreadIsValid ())
3225                             ResumePrivateStateThread ();
3226                         else
3227                             StartPrivateStateThread ();
3228 
3229                         m_stop_info_override_callback = GetTarget().GetArchitecture().GetStopInfoOverrideCallback();
3230 
3231                         // Target was stopped at entry as was intended. Need to notify the listeners
3232                         // about it.
3233                         if (state == eStateStopped && launch_info.GetFlags().Test(eLaunchFlagStopAtEntry))
3234                             HandlePrivateEvent(event_sp);
3235                     }
3236                     else if (state == eStateExited)
3237                     {
3238                         // We exited while trying to launch somehow.  Don't call DidLaunch as that's
3239                         // not likely to work, and return an invalid pid.
3240                         HandlePrivateEvent (event_sp);
3241                     }
3242                 }
3243             }
3244         }
3245         else
3246         {
3247             error.SetErrorStringWithFormat("file doesn't exist: '%s'", local_exec_file_path);
3248         }
3249     }
3250     return error;
3251 }
3252 
3253 
3254 Error
3255 Process::LoadCore ()
3256 {
3257     Error error = DoLoadCore();
3258     if (error.Success())
3259     {
3260         Listener listener ("lldb.process.load_core_listener");
3261         HijackProcessEvents(&listener);
3262 
3263         if (PrivateStateThreadIsValid ())
3264             ResumePrivateStateThread ();
3265         else
3266             StartPrivateStateThread ();
3267 
3268         DynamicLoader *dyld = GetDynamicLoader ();
3269         if (dyld)
3270             dyld->DidAttach();
3271 
3272         GetJITLoaders().DidAttach();
3273 
3274         SystemRuntime *system_runtime = GetSystemRuntime ();
3275         if (system_runtime)
3276             system_runtime->DidAttach();
3277 
3278         m_os_ap.reset (OperatingSystem::FindPlugin (this, NULL));
3279         // We successfully loaded a core file, now pretend we stopped so we can
3280         // show all of the threads in the core file and explore the crashed
3281         // state.
3282         SetPrivateState (eStateStopped);
3283 
3284         // Wait indefinitely for a stopped event since we just posted one above...
3285         lldb::EventSP event_sp;
3286         listener.WaitForEvent (NULL, event_sp);
3287         StateType state = ProcessEventData::GetStateFromEvent(event_sp.get());
3288 
3289         if (!StateIsStoppedState (state, false))
3290         {
3291             Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
3292             if (log)
3293                 log->Printf("Process::Halt() failed to stop, state is: %s", StateAsCString(state));
3294             error.SetErrorString ("Did not get stopped event after loading the core file.");
3295         }
3296         RestoreProcessEvents ();
3297     }
3298     return error;
3299 }
3300 
3301 DynamicLoader *
3302 Process::GetDynamicLoader ()
3303 {
3304     if (m_dyld_ap.get() == NULL)
3305         m_dyld_ap.reset (DynamicLoader::FindPlugin(this, NULL));
3306     return m_dyld_ap.get();
3307 }
3308 
3309 const lldb::DataBufferSP
3310 Process::GetAuxvData()
3311 {
3312     return DataBufferSP ();
3313 }
3314 
3315 JITLoaderList &
3316 Process::GetJITLoaders ()
3317 {
3318     if (!m_jit_loaders_ap)
3319     {
3320         m_jit_loaders_ap.reset(new JITLoaderList());
3321         JITLoader::LoadPlugins(this, *m_jit_loaders_ap);
3322     }
3323     return *m_jit_loaders_ap;
3324 }
3325 
3326 SystemRuntime *
3327 Process::GetSystemRuntime ()
3328 {
3329     if (m_system_runtime_ap.get() == NULL)
3330         m_system_runtime_ap.reset (SystemRuntime::FindPlugin(this));
3331     return m_system_runtime_ap.get();
3332 }
3333 
3334 Process::AttachCompletionHandler::AttachCompletionHandler (Process *process, uint32_t exec_count) :
3335     NextEventAction (process),
3336     m_exec_count (exec_count)
3337 {
3338     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
3339     if (log)
3340         log->Printf ("Process::AttachCompletionHandler::%s process=%p, exec_count=%" PRIu32, __FUNCTION__, static_cast<void*>(process), exec_count);
3341 }
3342 
3343 Process::NextEventAction::EventActionResult
3344 Process::AttachCompletionHandler::PerformAction (lldb::EventSP &event_sp)
3345 {
3346     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
3347 
3348     StateType state = ProcessEventData::GetStateFromEvent (event_sp.get());
3349     if (log)
3350         log->Printf ("Process::AttachCompletionHandler::%s called with state %s (%d)", __FUNCTION__, StateAsCString(state), static_cast<int> (state));
3351 
3352     switch (state)
3353     {
3354         case eStateAttaching:
3355             return eEventActionSuccess;
3356 
3357         case eStateRunning:
3358         case eStateConnected:
3359             return eEventActionRetry;
3360 
3361         case eStateStopped:
3362         case eStateCrashed:
3363             {
3364                 // During attach, prior to sending the eStateStopped event,
3365                 // lldb_private::Process subclasses must set the new process ID.
3366                 assert (m_process->GetID() != LLDB_INVALID_PROCESS_ID);
3367                 // We don't want these events to be reported, so go set the ShouldReportStop here:
3368                 m_process->GetThreadList().SetShouldReportStop (eVoteNo);
3369 
3370                 if (m_exec_count > 0)
3371                 {
3372                     --m_exec_count;
3373 
3374                     if (log)
3375                         log->Printf ("Process::AttachCompletionHandler::%s state %s: reduced remaining exec count to %" PRIu32 ", requesting resume", __FUNCTION__, StateAsCString(state), m_exec_count);
3376 
3377                     RequestResume();
3378                     return eEventActionRetry;
3379                 }
3380                 else
3381                 {
3382                     if (log)
3383                         log->Printf ("Process::AttachCompletionHandler::%s state %s: no more execs expected to start, continuing with attach", __FUNCTION__, StateAsCString(state));
3384 
3385                     m_process->CompleteAttach ();
3386                     return eEventActionSuccess;
3387                 }
3388             }
3389             break;
3390 
3391         default:
3392         case eStateExited:
3393         case eStateInvalid:
3394             break;
3395     }
3396 
3397     m_exit_string.assign ("No valid Process");
3398     return eEventActionExit;
3399 }
3400 
3401 Process::NextEventAction::EventActionResult
3402 Process::AttachCompletionHandler::HandleBeingInterrupted()
3403 {
3404     return eEventActionSuccess;
3405 }
3406 
3407 const char *
3408 Process::AttachCompletionHandler::GetExitString ()
3409 {
3410     return m_exit_string.c_str();
3411 }
3412 
3413 Listener &
3414 ProcessAttachInfo::GetListenerForProcess (Debugger &debugger)
3415 {
3416     if (m_listener_sp)
3417         return *m_listener_sp;
3418     else
3419         return debugger.GetListener();
3420 }
3421 
3422 Error
3423 Process::Attach (ProcessAttachInfo &attach_info)
3424 {
3425     m_abi_sp.reset();
3426     m_process_input_reader.reset();
3427     m_dyld_ap.reset();
3428     m_jit_loaders_ap.reset();
3429     m_system_runtime_ap.reset();
3430     m_os_ap.reset();
3431     m_stop_info_override_callback = NULL;
3432 
3433     lldb::pid_t attach_pid = attach_info.GetProcessID();
3434     Error error;
3435     if (attach_pid == LLDB_INVALID_PROCESS_ID)
3436     {
3437         char process_name[PATH_MAX];
3438 
3439         if (attach_info.GetExecutableFile().GetPath (process_name, sizeof(process_name)))
3440         {
3441             const bool wait_for_launch = attach_info.GetWaitForLaunch();
3442 
3443             if (wait_for_launch)
3444             {
3445                 error = WillAttachToProcessWithName(process_name, wait_for_launch);
3446                 if (error.Success())
3447                 {
3448                     if (m_public_run_lock.TrySetRunning())
3449                     {
3450                         m_should_detach = true;
3451                         const bool restarted = false;
3452                         SetPublicState (eStateAttaching, restarted);
3453                         // Now attach using these arguments.
3454                         error = DoAttachToProcessWithName (process_name, attach_info);
3455                     }
3456                     else
3457                     {
3458                         // This shouldn't happen
3459                         error.SetErrorString("failed to acquire process run lock");
3460                     }
3461 
3462                     if (error.Fail())
3463                     {
3464                         if (GetID() != LLDB_INVALID_PROCESS_ID)
3465                         {
3466                             SetID (LLDB_INVALID_PROCESS_ID);
3467                             if (error.AsCString() == NULL)
3468                                 error.SetErrorString("attach failed");
3469 
3470                             SetExitStatus(-1, error.AsCString());
3471                         }
3472                     }
3473                     else
3474                     {
3475                         SetNextEventAction(new Process::AttachCompletionHandler(this, attach_info.GetResumeCount()));
3476                         StartPrivateStateThread();
3477                     }
3478                     return error;
3479                 }
3480             }
3481             else
3482             {
3483                 ProcessInstanceInfoList process_infos;
3484                 PlatformSP platform_sp (m_target.GetPlatform ());
3485 
3486                 if (platform_sp)
3487                 {
3488                     ProcessInstanceInfoMatch match_info;
3489                     match_info.GetProcessInfo() = attach_info;
3490                     match_info.SetNameMatchType (eNameMatchEquals);
3491                     platform_sp->FindProcesses (match_info, process_infos);
3492                     const uint32_t num_matches = process_infos.GetSize();
3493                     if (num_matches == 1)
3494                     {
3495                         attach_pid = process_infos.GetProcessIDAtIndex(0);
3496                         // Fall through and attach using the above process ID
3497                     }
3498                     else
3499                     {
3500                         match_info.GetProcessInfo().GetExecutableFile().GetPath (process_name, sizeof(process_name));
3501                         if (num_matches > 1)
3502                         {
3503                             StreamString s;
3504                             ProcessInstanceInfo::DumpTableHeader (s, platform_sp.get(), true, false);
3505                             for (size_t i = 0; i < num_matches; i++)
3506                             {
3507                                 process_infos.GetProcessInfoAtIndex(i).DumpAsTableRow(s, platform_sp.get(), true, false);
3508                             }
3509                             error.SetErrorStringWithFormat ("more than one process named %s:\n%s",
3510                                                             process_name,
3511                                                             s.GetData());
3512                         }
3513                         else
3514                             error.SetErrorStringWithFormat ("could not find a process named %s", process_name);
3515                     }
3516                 }
3517                 else
3518                 {
3519                     error.SetErrorString ("invalid platform, can't find processes by name");
3520                     return error;
3521                 }
3522             }
3523         }
3524         else
3525         {
3526             error.SetErrorString ("invalid process name");
3527         }
3528     }
3529 
3530     if (attach_pid != LLDB_INVALID_PROCESS_ID)
3531     {
3532         error = WillAttachToProcessWithID(attach_pid);
3533         if (error.Success())
3534         {
3535 
3536             if (m_public_run_lock.TrySetRunning())
3537             {
3538                 // Now attach using these arguments.
3539                 m_should_detach = true;
3540                 const bool restarted = false;
3541                 SetPublicState (eStateAttaching, restarted);
3542                 error = DoAttachToProcessWithID (attach_pid, attach_info);
3543             }
3544             else
3545             {
3546                 // This shouldn't happen
3547                 error.SetErrorString("failed to acquire process run lock");
3548             }
3549 
3550             if (error.Success())
3551             {
3552 
3553                 SetNextEventAction(new Process::AttachCompletionHandler(this, attach_info.GetResumeCount()));
3554                 StartPrivateStateThread();
3555             }
3556             else
3557             {
3558                 if (GetID() != LLDB_INVALID_PROCESS_ID)
3559                     SetID (LLDB_INVALID_PROCESS_ID);
3560 
3561                 const char *error_string = error.AsCString();
3562                 if (error_string == NULL)
3563                     error_string = "attach failed";
3564 
3565                 SetExitStatus(-1, error_string);
3566             }
3567         }
3568     }
3569     return error;
3570 }
3571 
3572 void
3573 Process::CompleteAttach ()
3574 {
3575     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
3576     if (log)
3577         log->Printf ("Process::%s()", __FUNCTION__);
3578 
3579     // Let the process subclass figure out at much as it can about the process
3580     // before we go looking for a dynamic loader plug-in.
3581     ArchSpec process_arch;
3582     DidAttach(process_arch);
3583 
3584     if (process_arch.IsValid())
3585     {
3586         m_target.SetArchitecture(process_arch);
3587         if (log)
3588         {
3589             const char *triple_str = process_arch.GetTriple().getTriple().c_str ();
3590             log->Printf ("Process::%s replacing process architecture with DidAttach() architecture: %s",
3591                          __FUNCTION__,
3592                          triple_str ? triple_str : "<null>");
3593         }
3594     }
3595 
3596     // We just attached.  If we have a platform, ask it for the process architecture, and if it isn't
3597     // the same as the one we've already set, switch architectures.
3598     PlatformSP platform_sp (m_target.GetPlatform ());
3599     assert (platform_sp.get());
3600     if (platform_sp)
3601     {
3602         const ArchSpec &target_arch = m_target.GetArchitecture();
3603         if (target_arch.IsValid() && !platform_sp->IsCompatibleArchitecture (target_arch, false, NULL))
3604         {
3605             ArchSpec platform_arch;
3606             platform_sp = platform_sp->GetPlatformForArchitecture (target_arch, &platform_arch);
3607             if (platform_sp)
3608             {
3609                 m_target.SetPlatform (platform_sp);
3610                 m_target.SetArchitecture(platform_arch);
3611                 if (log)
3612                     log->Printf ("Process::%s switching platform to %s and architecture to %s based on info from attach", __FUNCTION__, platform_sp->GetName().AsCString (""), platform_arch.GetTriple().getTriple().c_str ());
3613             }
3614         }
3615         else if (!process_arch.IsValid())
3616         {
3617             ProcessInstanceInfo process_info;
3618             platform_sp->GetProcessInfo (GetID(), process_info);
3619             const ArchSpec &process_arch = process_info.GetArchitecture();
3620             if (process_arch.IsValid() && !m_target.GetArchitecture().IsExactMatch(process_arch))
3621             {
3622                 m_target.SetArchitecture (process_arch);
3623                 if (log)
3624                     log->Printf ("Process::%s switching architecture to %s based on info the platform retrieved for pid %" PRIu64, __FUNCTION__, process_arch.GetTriple().getTriple().c_str (), GetID ());
3625             }
3626         }
3627     }
3628 
3629     // We have completed the attach, now it is time to find the dynamic loader
3630     // plug-in
3631     DynamicLoader *dyld = GetDynamicLoader ();
3632     if (dyld)
3633     {
3634         dyld->DidAttach();
3635         if (log)
3636         {
3637             ModuleSP exe_module_sp = m_target.GetExecutableModule ();
3638             log->Printf ("Process::%s after DynamicLoader::DidAttach(), target executable is %s (using %s plugin)",
3639                          __FUNCTION__,
3640                          exe_module_sp ? exe_module_sp->GetFileSpec().GetPath().c_str () : "<none>",
3641                          dyld->GetPluginName().AsCString ("<unnamed>"));
3642         }
3643     }
3644 
3645     GetJITLoaders().DidAttach();
3646 
3647     SystemRuntime *system_runtime = GetSystemRuntime ();
3648     if (system_runtime)
3649     {
3650         system_runtime->DidAttach();
3651         if (log)
3652         {
3653             ModuleSP exe_module_sp = m_target.GetExecutableModule ();
3654             log->Printf ("Process::%s after SystemRuntime::DidAttach(), target executable is %s (using %s plugin)",
3655                          __FUNCTION__,
3656                          exe_module_sp ? exe_module_sp->GetFileSpec().GetPath().c_str () : "<none>",
3657                          system_runtime->GetPluginName().AsCString("<unnamed>"));
3658         }
3659     }
3660 
3661     m_os_ap.reset (OperatingSystem::FindPlugin (this, NULL));
3662     // Figure out which one is the executable, and set that in our target:
3663     const ModuleList &target_modules = m_target.GetImages();
3664     Mutex::Locker modules_locker(target_modules.GetMutex());
3665     size_t num_modules = target_modules.GetSize();
3666     ModuleSP new_executable_module_sp;
3667 
3668     for (size_t i = 0; i < num_modules; i++)
3669     {
3670         ModuleSP module_sp (target_modules.GetModuleAtIndexUnlocked (i));
3671         if (module_sp && module_sp->IsExecutable())
3672         {
3673             if (m_target.GetExecutableModulePointer() != module_sp.get())
3674                 new_executable_module_sp = module_sp;
3675             break;
3676         }
3677     }
3678     if (new_executable_module_sp)
3679     {
3680         m_target.SetExecutableModule (new_executable_module_sp, false);
3681         if (log)
3682         {
3683             ModuleSP exe_module_sp = m_target.GetExecutableModule ();
3684             log->Printf ("Process::%s after looping through modules, target executable is %s",
3685                          __FUNCTION__,
3686                          exe_module_sp ? exe_module_sp->GetFileSpec().GetPath().c_str () : "<none>");
3687         }
3688     }
3689 
3690     m_stop_info_override_callback = process_arch.GetStopInfoOverrideCallback();
3691 }
3692 
3693 Error
3694 Process::ConnectRemote (Stream *strm, const char *remote_url)
3695 {
3696     m_abi_sp.reset();
3697     m_process_input_reader.reset();
3698 
3699     // Find the process and its architecture.  Make sure it matches the architecture
3700     // of the current Target, and if not adjust it.
3701 
3702     Error error (DoConnectRemote (strm, remote_url));
3703     if (error.Success())
3704     {
3705         if (GetID() != LLDB_INVALID_PROCESS_ID)
3706         {
3707             EventSP event_sp;
3708             StateType state = WaitForProcessStopPrivate(NULL, event_sp);
3709 
3710             if (state == eStateStopped || state == eStateCrashed)
3711             {
3712                 // If we attached and actually have a process on the other end, then
3713                 // this ended up being the equivalent of an attach.
3714                 CompleteAttach ();
3715 
3716                 // This delays passing the stopped event to listeners till
3717                 // CompleteAttach gets a chance to complete...
3718                 HandlePrivateEvent (event_sp);
3719 
3720             }
3721         }
3722 
3723         if (PrivateStateThreadIsValid ())
3724             ResumePrivateStateThread ();
3725         else
3726             StartPrivateStateThread ();
3727     }
3728     return error;
3729 }
3730 
3731 
3732 Error
3733 Process::PrivateResume ()
3734 {
3735     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_PROCESS|LIBLLDB_LOG_STEP));
3736     if (log)
3737         log->Printf("Process::PrivateResume() m_stop_id = %u, public state: %s private state: %s",
3738                     m_mod_id.GetStopID(),
3739                     StateAsCString(m_public_state.GetValue()),
3740                     StateAsCString(m_private_state.GetValue()));
3741 
3742     Error error (WillResume());
3743     // Tell the process it is about to resume before the thread list
3744     if (error.Success())
3745     {
3746         // Now let the thread list know we are about to resume so it
3747         // can let all of our threads know that they are about to be
3748         // resumed. Threads will each be called with
3749         // Thread::WillResume(StateType) where StateType contains the state
3750         // that they are supposed to have when the process is resumed
3751         // (suspended/running/stepping). Threads should also check
3752         // their resume signal in lldb::Thread::GetResumeSignal()
3753         // to see if they are supposed to start back up with a signal.
3754         if (m_thread_list.WillResume())
3755         {
3756             // Last thing, do the PreResumeActions.
3757             if (!RunPreResumeActions())
3758             {
3759                 error.SetErrorStringWithFormat ("Process::PrivateResume PreResumeActions failed, not resuming.");
3760             }
3761             else
3762             {
3763                 m_mod_id.BumpResumeID();
3764                 error = DoResume();
3765                 if (error.Success())
3766                 {
3767                     DidResume();
3768                     m_thread_list.DidResume();
3769                     if (log)
3770                         log->Printf ("Process thinks the process has resumed.");
3771                 }
3772             }
3773         }
3774         else
3775         {
3776             // Somebody wanted to run without running (e.g. we were faking a step from one frame of a set of inlined
3777             // frames that share the same PC to another.)  So generate a continue & a stopped event,
3778             // and let the world handle them.
3779             if (log)
3780                 log->Printf ("Process::PrivateResume() asked to simulate a start & stop.");
3781 
3782             SetPrivateState(eStateRunning);
3783             SetPrivateState(eStateStopped);
3784         }
3785     }
3786     else if (log)
3787         log->Printf ("Process::PrivateResume() got an error \"%s\".", error.AsCString("<unknown error>"));
3788     return error;
3789 }
3790 
3791 Error
3792 Process::Halt (bool clear_thread_plans)
3793 {
3794     // Don't clear the m_clear_thread_plans_on_stop, only set it to true if
3795     // in case it was already set and some thread plan logic calls halt on its
3796     // own.
3797     m_clear_thread_plans_on_stop |= clear_thread_plans;
3798 
3799     // First make sure we aren't in the middle of handling an event, or we might restart.  This is pretty weak, since
3800     // we could just straightaway get another event.  It just narrows the window...
3801     m_currently_handling_event.WaitForValueEqualTo(false);
3802 
3803 
3804     // Pause our private state thread so we can ensure no one else eats
3805     // the stop event out from under us.
3806     Listener halt_listener ("lldb.process.halt_listener");
3807     HijackPrivateProcessEvents(&halt_listener);
3808 
3809     EventSP event_sp;
3810     Error error (WillHalt());
3811 
3812     bool restored_process_events = false;
3813     if (error.Success())
3814     {
3815 
3816         bool caused_stop = false;
3817 
3818         // Ask the process subclass to actually halt our process
3819         error = DoHalt(caused_stop);
3820         if (error.Success())
3821         {
3822             if (m_public_state.GetValue() == eStateAttaching)
3823             {
3824                 // Don't hijack and eat the eStateExited as the code that was doing
3825                 // the attach will be waiting for this event...
3826                 RestorePrivateProcessEvents();
3827                 restored_process_events = true;
3828                 SetExitStatus(SIGKILL, "Cancelled async attach.");
3829                 Destroy (false);
3830             }
3831             else
3832             {
3833                 // If "caused_stop" is true, then DoHalt stopped the process. If
3834                 // "caused_stop" is false, the process was already stopped.
3835                 // If the DoHalt caused the process to stop, then we want to catch
3836                 // this event and set the interrupted bool to true before we pass
3837                 // this along so clients know that the process was interrupted by
3838                 // a halt command.
3839                 if (caused_stop)
3840                 {
3841                     // Wait for 1 second for the process to stop.
3842                     TimeValue timeout_time;
3843                     timeout_time = TimeValue::Now();
3844                     timeout_time.OffsetWithSeconds(10);
3845                     bool got_event = halt_listener.WaitForEvent (&timeout_time, event_sp);
3846                     StateType state = ProcessEventData::GetStateFromEvent(event_sp.get());
3847 
3848                     if (!got_event || state == eStateInvalid)
3849                     {
3850                         // We timeout out and didn't get a stop event...
3851                         error.SetErrorStringWithFormat ("Halt timed out. State = %s", StateAsCString(GetState()));
3852                     }
3853                     else
3854                     {
3855                         if (StateIsStoppedState (state, false))
3856                         {
3857                             // We caused the process to interrupt itself, so mark this
3858                             // as such in the stop event so clients can tell an interrupted
3859                             // process from a natural stop
3860                             ProcessEventData::SetInterruptedInEvent (event_sp.get(), true);
3861                         }
3862                         else
3863                         {
3864                             Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
3865                             if (log)
3866                                 log->Printf("Process::Halt() failed to stop, state is: %s", StateAsCString(state));
3867                             error.SetErrorString ("Did not get stopped event after halt.");
3868                         }
3869                     }
3870                 }
3871                 DidHalt();
3872             }
3873         }
3874     }
3875     // Resume our private state thread before we post the event (if any)
3876     if (!restored_process_events)
3877         RestorePrivateProcessEvents();
3878 
3879     // Post any event we might have consumed. If all goes well, we will have
3880     // stopped the process, intercepted the event and set the interrupted
3881     // bool in the event.  Post it to the private event queue and that will end up
3882     // correctly setting the state.
3883     if (event_sp)
3884         m_private_state_broadcaster.BroadcastEvent(event_sp);
3885 
3886     return error;
3887 }
3888 
3889 Error
3890 Process::HaltForDestroyOrDetach(lldb::EventSP &exit_event_sp)
3891 {
3892     Error error;
3893     if (m_public_state.GetValue() == eStateRunning)
3894     {
3895         Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
3896         if (log)
3897             log->Printf("Process::Destroy() About to halt.");
3898         error = Halt();
3899         if (error.Success())
3900         {
3901             // Consume the halt event.
3902             TimeValue timeout (TimeValue::Now());
3903             timeout.OffsetWithSeconds(1);
3904             StateType state = WaitForProcessToStop (&timeout, &exit_event_sp);
3905 
3906             // If the process exited while we were waiting for it to stop, put the exited event into
3907             // the shared pointer passed in and return.  Our caller doesn't need to do anything else, since
3908             // they don't have a process anymore...
3909 
3910             if (state == eStateExited || m_private_state.GetValue() == eStateExited)
3911             {
3912                 if (log)
3913                     log->Printf("Process::HaltForDestroyOrDetach() Process exited while waiting to Halt.");
3914                 return error;
3915             }
3916             else
3917                 exit_event_sp.reset(); // It is ok to consume any non-exit stop events
3918 
3919             if (state != eStateStopped)
3920             {
3921                 if (log)
3922                     log->Printf("Process::HaltForDestroyOrDetach() Halt failed to stop, state is: %s", StateAsCString(state));
3923                 // If we really couldn't stop the process then we should just error out here, but if the
3924                 // lower levels just bobbled sending the event and we really are stopped, then continue on.
3925                 StateType private_state = m_private_state.GetValue();
3926                 if (private_state != eStateStopped)
3927                 {
3928                     return error;
3929                 }
3930             }
3931         }
3932         else
3933         {
3934             if (log)
3935                 log->Printf("Process::HaltForDestroyOrDetach() Halt got error: %s", error.AsCString());
3936         }
3937     }
3938     return error;
3939 }
3940 
3941 Error
3942 Process::Detach (bool keep_stopped)
3943 {
3944     EventSP exit_event_sp;
3945     Error error;
3946     m_destroy_in_process = true;
3947 
3948     error = WillDetach();
3949 
3950     if (error.Success())
3951     {
3952         if (DetachRequiresHalt())
3953         {
3954             error = HaltForDestroyOrDetach (exit_event_sp);
3955             if (!error.Success())
3956             {
3957                 m_destroy_in_process = false;
3958                 return error;
3959             }
3960             else if (exit_event_sp)
3961             {
3962                 // We shouldn't need to do anything else here.  There's no process left to detach from...
3963                 StopPrivateStateThread();
3964                 m_destroy_in_process = false;
3965                 return error;
3966             }
3967         }
3968 
3969         m_thread_list.DiscardThreadPlans();
3970         DisableAllBreakpointSites();
3971 
3972         error = DoDetach(keep_stopped);
3973         if (error.Success())
3974         {
3975             DidDetach();
3976             StopPrivateStateThread();
3977         }
3978         else
3979         {
3980             return error;
3981         }
3982     }
3983     m_destroy_in_process = false;
3984 
3985     // If we exited when we were waiting for a process to stop, then
3986     // forward the event here so we don't lose the event
3987     if (exit_event_sp)
3988     {
3989         // Directly broadcast our exited event because we shut down our
3990         // private state thread above
3991         BroadcastEvent(exit_event_sp);
3992     }
3993 
3994     // If we have been interrupted (to kill us) in the middle of running, we may not end up propagating
3995     // the last events through the event system, in which case we might strand the write lock.  Unlock
3996     // it here so when we do to tear down the process we don't get an error destroying the lock.
3997 
3998     m_public_run_lock.SetStopped();
3999     return error;
4000 }
4001 
4002 Error
4003 Process::Destroy (bool force_kill)
4004 {
4005 
4006     // Tell ourselves we are in the process of destroying the process, so that we don't do any unnecessary work
4007     // that might hinder the destruction.  Remember to set this back to false when we are done.  That way if the attempt
4008     // failed and the process stays around for some reason it won't be in a confused state.
4009 
4010     if (force_kill)
4011         m_should_detach = false;
4012 
4013     if (GetShouldDetach())
4014     {
4015         // FIXME: This will have to be a process setting:
4016         bool keep_stopped = false;
4017         Detach(keep_stopped);
4018     }
4019 
4020     m_destroy_in_process = true;
4021 
4022     Error error (WillDestroy());
4023     if (error.Success())
4024     {
4025         EventSP exit_event_sp;
4026         if (DestroyRequiresHalt())
4027         {
4028             error = HaltForDestroyOrDetach(exit_event_sp);
4029         }
4030 
4031         if (m_public_state.GetValue() != eStateRunning)
4032         {
4033             // Ditch all thread plans, and remove all our breakpoints: in case we have to restart the target to
4034             // kill it, we don't want it hitting a breakpoint...
4035             // Only do this if we've stopped, however, since if we didn't manage to halt it above, then
4036             // we're not going to have much luck doing this now.
4037             m_thread_list.DiscardThreadPlans();
4038             DisableAllBreakpointSites();
4039         }
4040 
4041         error = DoDestroy();
4042         if (error.Success())
4043         {
4044             DidDestroy();
4045             StopPrivateStateThread();
4046         }
4047         m_stdio_communication.StopReadThread();
4048         m_stdio_communication.Disconnect();
4049         m_stdin_forward = false;
4050 
4051         if (m_process_input_reader)
4052         {
4053             m_process_input_reader->SetIsDone(true);
4054             m_process_input_reader->Cancel();
4055             m_process_input_reader.reset();
4056         }
4057 
4058         // If we exited when we were waiting for a process to stop, then
4059         // forward the event here so we don't lose the event
4060         if (exit_event_sp)
4061         {
4062             // Directly broadcast our exited event because we shut down our
4063             // private state thread above
4064             BroadcastEvent(exit_event_sp);
4065         }
4066 
4067         // If we have been interrupted (to kill us) in the middle of running, we may not end up propagating
4068         // the last events through the event system, in which case we might strand the write lock.  Unlock
4069         // it here so when we do to tear down the process we don't get an error destroying the lock.
4070         m_public_run_lock.SetStopped();
4071     }
4072 
4073     m_destroy_in_process = false;
4074 
4075     return error;
4076 }
4077 
4078 Error
4079 Process::Signal (int signal)
4080 {
4081     Error error (WillSignal());
4082     if (error.Success())
4083     {
4084         error = DoSignal(signal);
4085         if (error.Success())
4086             DidSignal();
4087     }
4088     return error;
4089 }
4090 
4091 void
4092 Process::SetUnixSignals (const UnixSignalsSP &signals_sp)
4093 {
4094     assert (signals_sp && "null signals_sp");
4095     m_unix_signals_sp = signals_sp;
4096 }
4097 
4098 UnixSignals &
4099 Process::GetUnixSignals ()
4100 {
4101     assert (m_unix_signals_sp && "null m_unix_signals_sp");
4102     return *m_unix_signals_sp;
4103 }
4104 
4105 lldb::ByteOrder
4106 Process::GetByteOrder () const
4107 {
4108     return m_target.GetArchitecture().GetByteOrder();
4109 }
4110 
4111 uint32_t
4112 Process::GetAddressByteSize () const
4113 {
4114     return m_target.GetArchitecture().GetAddressByteSize();
4115 }
4116 
4117 
4118 bool
4119 Process::ShouldBroadcastEvent (Event *event_ptr)
4120 {
4121     const StateType state = Process::ProcessEventData::GetStateFromEvent (event_ptr);
4122     bool return_value = true;
4123     Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_EVENTS | LIBLLDB_LOG_PROCESS));
4124 
4125     switch (state)
4126     {
4127         case eStateDetached:
4128         case eStateExited:
4129         case eStateUnloaded:
4130             m_stdio_communication.SynchronizeWithReadThread();
4131             // fall-through
4132         case eStateConnected:
4133         case eStateAttaching:
4134         case eStateLaunching:
4135             // These events indicate changes in the state of the debugging session, always report them.
4136             return_value = true;
4137             break;
4138         case eStateInvalid:
4139             // We stopped for no apparent reason, don't report it.
4140             return_value = false;
4141             break;
4142         case eStateRunning:
4143         case eStateStepping:
4144             // If we've started the target running, we handle the cases where we
4145             // are already running and where there is a transition from stopped to
4146             // running differently.
4147             // running -> running: Automatically suppress extra running events
4148             // stopped -> running: Report except when there is one or more no votes
4149             //     and no yes votes.
4150             SynchronouslyNotifyStateChanged (state);
4151             if (m_force_next_event_delivery)
4152                 return_value = true;
4153             else
4154             {
4155                 switch (m_last_broadcast_state)
4156                 {
4157                     case eStateRunning:
4158                     case eStateStepping:
4159                         // We always suppress multiple runnings with no PUBLIC stop in between.
4160                         return_value = false;
4161                         break;
4162                     default:
4163                         // TODO: make this work correctly. For now always report
4164                         // run if we aren't running so we don't miss any running
4165                         // events. If I run the lldb/test/thread/a.out file and
4166                         // break at main.cpp:58, run and hit the breakpoints on
4167                         // multiple threads, then somehow during the stepping over
4168                         // of all breakpoints no run gets reported.
4169 
4170                         // This is a transition from stop to run.
4171                         switch (m_thread_list.ShouldReportRun (event_ptr))
4172                         {
4173                             case eVoteYes:
4174                             case eVoteNoOpinion:
4175                                 return_value = true;
4176                                 break;
4177                             case eVoteNo:
4178                                 return_value = false;
4179                                 break;
4180                         }
4181                         break;
4182                 }
4183             }
4184             break;
4185         case eStateStopped:
4186         case eStateCrashed:
4187         case eStateSuspended:
4188         {
4189             // We've stopped.  First see if we're going to restart the target.
4190             // If we are going to stop, then we always broadcast the event.
4191             // If we aren't going to stop, let the thread plans decide if we're going to report this event.
4192             // If no thread has an opinion, we don't report it.
4193 
4194             m_stdio_communication.SynchronizeWithReadThread();
4195             RefreshStateAfterStop ();
4196             if (ProcessEventData::GetInterruptedFromEvent (event_ptr))
4197             {
4198                 if (log)
4199                     log->Printf ("Process::ShouldBroadcastEvent (%p) stopped due to an interrupt, state: %s",
4200                                  static_cast<void*>(event_ptr),
4201                                  StateAsCString(state));
4202                 // Even though we know we are going to stop, we should let the threads have a look at the stop,
4203                 // so they can properly set their state.
4204                 m_thread_list.ShouldStop (event_ptr);
4205                 return_value = true;
4206             }
4207             else
4208             {
4209                 bool was_restarted = ProcessEventData::GetRestartedFromEvent (event_ptr);
4210                 bool should_resume = false;
4211 
4212                 // It makes no sense to ask "ShouldStop" if we've already been restarted...
4213                 // Asking the thread list is also not likely to go well, since we are running again.
4214                 // So in that case just report the event.
4215 
4216                 if (!was_restarted)
4217                     should_resume = m_thread_list.ShouldStop (event_ptr) == false;
4218 
4219                 if (was_restarted || should_resume || m_resume_requested)
4220                 {
4221                     Vote stop_vote = m_thread_list.ShouldReportStop (event_ptr);
4222                     if (log)
4223                         log->Printf ("Process::ShouldBroadcastEvent: should_stop: %i state: %s was_restarted: %i stop_vote: %d.",
4224                                      should_resume, StateAsCString(state),
4225                                      was_restarted, stop_vote);
4226 
4227                     switch (stop_vote)
4228                     {
4229                         case eVoteYes:
4230                             return_value = true;
4231                             break;
4232                         case eVoteNoOpinion:
4233                         case eVoteNo:
4234                             return_value = false;
4235                             break;
4236                     }
4237 
4238                     if (!was_restarted)
4239                     {
4240                         if (log)
4241                             log->Printf ("Process::ShouldBroadcastEvent (%p) Restarting process from state: %s",
4242                                          static_cast<void*>(event_ptr),
4243                                          StateAsCString(state));
4244                         ProcessEventData::SetRestartedInEvent(event_ptr, true);
4245                         PrivateResume ();
4246                     }
4247 
4248                 }
4249                 else
4250                 {
4251                     return_value = true;
4252                     SynchronouslyNotifyStateChanged (state);
4253                 }
4254             }
4255         }
4256         break;
4257     }
4258 
4259     // Forcing the next event delivery is a one shot deal.  So reset it here.
4260     m_force_next_event_delivery = false;
4261 
4262     // We do some coalescing of events (for instance two consecutive running events get coalesced.)
4263     // But we only coalesce against events we actually broadcast.  So we use m_last_broadcast_state
4264     // to track that.  NB - you can't use "m_public_state.GetValue()" for that purpose, as was originally done,
4265     // because the PublicState reflects the last event pulled off the queue, and there may be several
4266     // events stacked up on the queue unserviced.  So the PublicState may not reflect the last broadcasted event
4267     // yet.  m_last_broadcast_state gets updated here.
4268 
4269     if (return_value)
4270         m_last_broadcast_state = state;
4271 
4272     if (log)
4273         log->Printf ("Process::ShouldBroadcastEvent (%p) => new state: %s, last broadcast state: %s - %s",
4274                      static_cast<void*>(event_ptr), StateAsCString(state),
4275                      StateAsCString(m_last_broadcast_state),
4276                      return_value ? "YES" : "NO");
4277     return return_value;
4278 }
4279 
4280 
4281 bool
4282 Process::StartPrivateStateThread (bool force)
4283 {
4284     Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EVENTS));
4285 
4286     bool already_running = PrivateStateThreadIsValid ();
4287     if (log)
4288         log->Printf ("Process::%s()%s ", __FUNCTION__, already_running ? " already running" : " starting private state thread");
4289 
4290     if (!force && already_running)
4291         return true;
4292 
4293     // Create a thread that watches our internal state and controls which
4294     // events make it to clients (into the DCProcess event queue).
4295     char thread_name[1024];
4296 
4297     if (HostInfo::GetMaxThreadNameLength() <= 30)
4298     {
4299         // On platforms with abbreviated thread name lengths, choose thread names that fit within the limit.
4300         if (already_running)
4301             snprintf(thread_name, sizeof(thread_name), "intern-state-OV");
4302         else
4303             snprintf(thread_name, sizeof(thread_name), "intern-state");
4304     }
4305     else
4306     {
4307         if (already_running)
4308             snprintf(thread_name, sizeof(thread_name), "<lldb.process.internal-state-override(pid=%" PRIu64 ")>", GetID());
4309         else
4310             snprintf(thread_name, sizeof(thread_name), "<lldb.process.internal-state(pid=%" PRIu64 ")>", GetID());
4311     }
4312 
4313     // Create the private state thread, and start it running.
4314     m_private_state_thread = ThreadLauncher::LaunchThread(thread_name, Process::PrivateStateThread, this, NULL);
4315     if (m_private_state_thread.IsJoinable())
4316     {
4317         ResumePrivateStateThread();
4318         return true;
4319     }
4320     else
4321         return false;
4322 }
4323 
4324 void
4325 Process::PausePrivateStateThread ()
4326 {
4327     ControlPrivateStateThread (eBroadcastInternalStateControlPause);
4328 }
4329 
4330 void
4331 Process::ResumePrivateStateThread ()
4332 {
4333     ControlPrivateStateThread (eBroadcastInternalStateControlResume);
4334 }
4335 
4336 void
4337 Process::StopPrivateStateThread ()
4338 {
4339     if (PrivateStateThreadIsValid ())
4340         ControlPrivateStateThread (eBroadcastInternalStateControlStop);
4341     else
4342     {
4343         Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS));
4344         if (log)
4345             log->Printf ("Went to stop the private state thread, but it was already invalid.");
4346     }
4347 }
4348 
4349 void
4350 Process::ControlPrivateStateThread (uint32_t signal)
4351 {
4352     Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS));
4353 
4354     assert (signal == eBroadcastInternalStateControlStop ||
4355             signal == eBroadcastInternalStateControlPause ||
4356             signal == eBroadcastInternalStateControlResume);
4357 
4358     if (log)
4359         log->Printf ("Process::%s (signal = %d)", __FUNCTION__, signal);
4360 
4361     // Signal the private state thread. First we should copy this is case the
4362     // thread starts exiting since the private state thread will NULL this out
4363     // when it exits
4364     HostThread private_state_thread(m_private_state_thread);
4365     if (private_state_thread.IsJoinable())
4366     {
4367         TimeValue timeout_time;
4368         bool timed_out;
4369 
4370         m_private_state_control_broadcaster.BroadcastEvent (signal, NULL);
4371 
4372         timeout_time = TimeValue::Now();
4373         timeout_time.OffsetWithSeconds(2);
4374         if (log)
4375             log->Printf ("Sending control event of type: %d.", signal);
4376         m_private_state_control_wait.WaitForValueEqualTo (true, &timeout_time, &timed_out);
4377         m_private_state_control_wait.SetValue (false, eBroadcastNever);
4378 
4379         if (signal == eBroadcastInternalStateControlStop)
4380         {
4381             if (timed_out)
4382             {
4383                 Error error = private_state_thread.Cancel();
4384                 if (log)
4385                     log->Printf ("Timed out responding to the control event, cancel got error: \"%s\".", error.AsCString());
4386             }
4387             else
4388             {
4389                 if (log)
4390                     log->Printf ("The control event killed the private state thread without having to cancel.");
4391             }
4392 
4393             thread_result_t result = NULL;
4394             private_state_thread.Join(&result);
4395             m_private_state_thread.Reset();
4396         }
4397     }
4398     else
4399     {
4400         if (log)
4401             log->Printf ("Private state thread already dead, no need to signal it to stop.");
4402     }
4403 }
4404 
4405 void
4406 Process::SendAsyncInterrupt ()
4407 {
4408     if (PrivateStateThreadIsValid())
4409         m_private_state_broadcaster.BroadcastEvent (Process::eBroadcastBitInterrupt, NULL);
4410     else
4411         BroadcastEvent (Process::eBroadcastBitInterrupt, NULL);
4412 }
4413 
4414 void
4415 Process::HandlePrivateEvent (EventSP &event_sp)
4416 {
4417     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
4418     m_resume_requested = false;
4419 
4420     m_currently_handling_event.SetValue(true, eBroadcastNever);
4421 
4422     const StateType new_state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
4423 
4424     // First check to see if anybody wants a shot at this event:
4425     if (m_next_event_action_ap.get() != NULL)
4426     {
4427         NextEventAction::EventActionResult action_result = m_next_event_action_ap->PerformAction(event_sp);
4428         if (log)
4429             log->Printf ("Ran next event action, result was %d.", action_result);
4430 
4431         switch (action_result)
4432         {
4433             case NextEventAction::eEventActionSuccess:
4434                 SetNextEventAction(NULL);
4435                 break;
4436 
4437             case NextEventAction::eEventActionRetry:
4438                 break;
4439 
4440             case NextEventAction::eEventActionExit:
4441                 // Handle Exiting Here.  If we already got an exited event,
4442                 // we should just propagate it.  Otherwise, swallow this event,
4443                 // and set our state to exit so the next event will kill us.
4444                 if (new_state != eStateExited)
4445                 {
4446                     // FIXME: should cons up an exited event, and discard this one.
4447                     SetExitStatus(0, m_next_event_action_ap->GetExitString());
4448                     m_currently_handling_event.SetValue(false, eBroadcastAlways);
4449                     SetNextEventAction(NULL);
4450                     return;
4451                 }
4452                 SetNextEventAction(NULL);
4453                 break;
4454         }
4455     }
4456 
4457     // See if we should broadcast this state to external clients?
4458     const bool should_broadcast = ShouldBroadcastEvent (event_sp.get());
4459 
4460     if (should_broadcast)
4461     {
4462         const bool is_hijacked = IsHijackedForEvent(eBroadcastBitStateChanged);
4463         if (log)
4464         {
4465             log->Printf ("Process::%s (pid = %" PRIu64 ") broadcasting new state %s (old state %s) to %s",
4466                          __FUNCTION__,
4467                          GetID(),
4468                          StateAsCString(new_state),
4469                          StateAsCString (GetState ()),
4470                          is_hijacked ? "hijacked" : "public");
4471         }
4472         Process::ProcessEventData::SetUpdateStateOnRemoval(event_sp.get());
4473         if (StateIsRunningState (new_state))
4474         {
4475             // Only push the input handler if we aren't fowarding events,
4476             // as this means the curses GUI is in use...
4477             // Or don't push it if we are launching since it will come up stopped.
4478             if (!GetTarget().GetDebugger().IsForwardingEvents() && new_state != eStateLaunching &&
4479                 new_state != eStateAttaching)
4480                 PushProcessIOHandler ();
4481             m_iohandler_sync.SetValue(true, eBroadcastAlways);
4482         }
4483         else if (StateIsStoppedState(new_state, false))
4484         {
4485             m_iohandler_sync.SetValue(false, eBroadcastNever);
4486             if (!Process::ProcessEventData::GetRestartedFromEvent(event_sp.get()))
4487             {
4488                 // If the lldb_private::Debugger is handling the events, we don't
4489                 // want to pop the process IOHandler here, we want to do it when
4490                 // we receive the stopped event so we can carefully control when
4491                 // the process IOHandler is popped because when we stop we want to
4492                 // display some text stating how and why we stopped, then maybe some
4493                 // process/thread/frame info, and then we want the "(lldb) " prompt
4494                 // to show up. If we pop the process IOHandler here, then we will
4495                 // cause the command interpreter to become the top IOHandler after
4496                 // the process pops off and it will update its prompt right away...
4497                 // See the Debugger.cpp file where it calls the function as
4498                 // "process_sp->PopProcessIOHandler()" to see where I am talking about.
4499                 // Otherwise we end up getting overlapping "(lldb) " prompts and
4500                 // garbled output.
4501                 //
4502                 // If we aren't handling the events in the debugger (which is indicated
4503                 // by "m_target.GetDebugger().IsHandlingEvents()" returning false) or we
4504                 // are hijacked, then we always pop the process IO handler manually.
4505                 // Hijacking happens when the internal process state thread is running
4506                 // thread plans, or when commands want to run in synchronous mode
4507                 // and they call "process->WaitForProcessToStop()". An example of something
4508                 // that will hijack the events is a simple expression:
4509                 //
4510                 //  (lldb) expr (int)puts("hello")
4511                 //
4512                 // This will cause the internal process state thread to resume and halt
4513                 // the process (and _it_ will hijack the eBroadcastBitStateChanged
4514                 // events) and we do need the IO handler to be pushed and popped
4515                 // correctly.
4516 
4517                 if (is_hijacked || m_target.GetDebugger().IsHandlingEvents() == false)
4518                     PopProcessIOHandler ();
4519             }
4520         }
4521 
4522         BroadcastEvent (event_sp);
4523     }
4524     else
4525     {
4526         if (log)
4527         {
4528             log->Printf ("Process::%s (pid = %" PRIu64 ") suppressing state %s (old state %s): should_broadcast == false",
4529                          __FUNCTION__,
4530                          GetID(),
4531                          StateAsCString(new_state),
4532                          StateAsCString (GetState ()));
4533         }
4534     }
4535     m_currently_handling_event.SetValue(false, eBroadcastAlways);
4536 }
4537 
4538 thread_result_t
4539 Process::PrivateStateThread (void *arg)
4540 {
4541     Process *proc = static_cast<Process*> (arg);
4542     thread_result_t result = proc->RunPrivateStateThread();
4543     return result;
4544 }
4545 
4546 thread_result_t
4547 Process::RunPrivateStateThread ()
4548 {
4549     bool control_only = true;
4550     m_private_state_control_wait.SetValue (false, eBroadcastNever);
4551 
4552     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
4553     if (log)
4554         log->Printf ("Process::%s (arg = %p, pid = %" PRIu64 ") thread starting...",
4555                      __FUNCTION__, static_cast<void*>(this), GetID());
4556 
4557     bool exit_now = false;
4558     while (!exit_now)
4559     {
4560         EventSP event_sp;
4561         WaitForEventsPrivate (NULL, event_sp, control_only);
4562         if (event_sp->BroadcasterIs(&m_private_state_control_broadcaster))
4563         {
4564             if (log)
4565                 log->Printf ("Process::%s (arg = %p, pid = %" PRIu64 ") got a control event: %d",
4566                              __FUNCTION__, static_cast<void*>(this), GetID(),
4567                              event_sp->GetType());
4568 
4569             switch (event_sp->GetType())
4570             {
4571             case eBroadcastInternalStateControlStop:
4572                 exit_now = true;
4573                 break;      // doing any internal state management below
4574 
4575             case eBroadcastInternalStateControlPause:
4576                 control_only = true;
4577                 break;
4578 
4579             case eBroadcastInternalStateControlResume:
4580                 control_only = false;
4581                 break;
4582             }
4583 
4584             m_private_state_control_wait.SetValue (true, eBroadcastAlways);
4585             continue;
4586         }
4587         else if (event_sp->GetType() == eBroadcastBitInterrupt)
4588         {
4589             if (m_public_state.GetValue() == eStateAttaching)
4590             {
4591                 if (log)
4592                     log->Printf ("Process::%s (arg = %p, pid = %" PRIu64 ") woke up with an interrupt while attaching - forwarding interrupt.",
4593                                  __FUNCTION__, static_cast<void*>(this),
4594                                  GetID());
4595                 BroadcastEvent (eBroadcastBitInterrupt, NULL);
4596             }
4597             else
4598             {
4599                 if (log)
4600                     log->Printf ("Process::%s (arg = %p, pid = %" PRIu64 ") woke up with an interrupt - Halting.",
4601                                  __FUNCTION__, static_cast<void*>(this),
4602                                  GetID());
4603                 Halt();
4604             }
4605             continue;
4606         }
4607 
4608         const StateType internal_state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
4609 
4610         if (internal_state != eStateInvalid)
4611         {
4612             if (m_clear_thread_plans_on_stop &&
4613                 StateIsStoppedState(internal_state, true))
4614             {
4615                 m_clear_thread_plans_on_stop = false;
4616                 m_thread_list.DiscardThreadPlans();
4617             }
4618             HandlePrivateEvent (event_sp);
4619         }
4620 
4621         if (internal_state == eStateInvalid ||
4622             internal_state == eStateExited  ||
4623             internal_state == eStateDetached )
4624         {
4625             if (log)
4626                 log->Printf ("Process::%s (arg = %p, pid = %" PRIu64 ") about to exit with internal state %s...",
4627                              __FUNCTION__, static_cast<void*>(this), GetID(),
4628                              StateAsCString(internal_state));
4629 
4630             break;
4631         }
4632     }
4633 
4634     // Verify log is still enabled before attempting to write to it...
4635     if (log)
4636         log->Printf ("Process::%s (arg = %p, pid = %" PRIu64 ") thread exiting...",
4637                      __FUNCTION__, static_cast<void*>(this), GetID());
4638 
4639     m_public_run_lock.SetStopped();
4640     m_private_state_control_wait.SetValue (true, eBroadcastAlways);
4641     m_private_state_thread.Reset();
4642     return NULL;
4643 }
4644 
4645 //------------------------------------------------------------------
4646 // Process Event Data
4647 //------------------------------------------------------------------
4648 
4649 Process::ProcessEventData::ProcessEventData () :
4650     EventData (),
4651     m_process_sp (),
4652     m_state (eStateInvalid),
4653     m_restarted (false),
4654     m_update_state (0),
4655     m_interrupted (false)
4656 {
4657 }
4658 
4659 Process::ProcessEventData::ProcessEventData (const ProcessSP &process_sp, StateType state) :
4660     EventData (),
4661     m_process_sp (process_sp),
4662     m_state (state),
4663     m_restarted (false),
4664     m_update_state (0),
4665     m_interrupted (false)
4666 {
4667 }
4668 
4669 Process::ProcessEventData::~ProcessEventData()
4670 {
4671 }
4672 
4673 const ConstString &
4674 Process::ProcessEventData::GetFlavorString ()
4675 {
4676     static ConstString g_flavor ("Process::ProcessEventData");
4677     return g_flavor;
4678 }
4679 
4680 const ConstString &
4681 Process::ProcessEventData::GetFlavor () const
4682 {
4683     return ProcessEventData::GetFlavorString ();
4684 }
4685 
4686 void
4687 Process::ProcessEventData::DoOnRemoval (Event *event_ptr)
4688 {
4689     // This function gets called twice for each event, once when the event gets pulled
4690     // off of the private process event queue, and then any number of times, first when it gets pulled off of
4691     // the public event queue, then other times when we're pretending that this is where we stopped at the
4692     // end of expression evaluation.  m_update_state is used to distinguish these
4693     // three cases; it is 0 when we're just pulling it off for private handling,
4694     // and > 1 for expression evaluation, and we don't want to do the breakpoint command handling then.
4695     if (m_update_state != 1)
4696         return;
4697 
4698     m_process_sp->SetPublicState (m_state, Process::ProcessEventData::GetRestartedFromEvent(event_ptr));
4699 
4700     // If this is a halt event, even if the halt stopped with some reason other than a plain interrupt (e.g. we had
4701     // already stopped for a breakpoint when the halt request came through) don't do the StopInfo actions, as they may
4702     // end up restarting the process.
4703     if (m_interrupted)
4704         return;
4705 
4706     // If we're stopped and haven't restarted, then do the StopInfo actions here:
4707     if (m_state == eStateStopped && ! m_restarted)
4708     {
4709         ThreadList &curr_thread_list = m_process_sp->GetThreadList();
4710         uint32_t num_threads = curr_thread_list.GetSize();
4711         uint32_t idx;
4712 
4713         // The actions might change one of the thread's stop_info's opinions about whether we should
4714         // stop the process, so we need to query that as we go.
4715 
4716         // One other complication here, is that we try to catch any case where the target has run (except for expressions)
4717         // and immediately exit, but if we get that wrong (which is possible) then the thread list might have changed, and
4718         // that would cause our iteration here to crash.  We could make a copy of the thread list, but we'd really like
4719         // to also know if it has changed at all, so we make up a vector of the thread ID's and check what we get back
4720         // against this list & bag out if anything differs.
4721         std::vector<uint32_t> thread_index_array(num_threads);
4722         for (idx = 0; idx < num_threads; ++idx)
4723             thread_index_array[idx] = curr_thread_list.GetThreadAtIndex(idx)->GetIndexID();
4724 
4725         // Use this to track whether we should continue from here.  We will only continue the target running if
4726         // no thread says we should stop.  Of course if some thread's PerformAction actually sets the target running,
4727         // then it doesn't matter what the other threads say...
4728 
4729         bool still_should_stop = false;
4730 
4731         // Sometimes - for instance if we have a bug in the stub we are talking to, we stop but no thread has a
4732         // valid stop reason.  In that case we should just stop, because we have no way of telling what the right
4733         // thing to do is, and it's better to let the user decide than continue behind their backs.
4734 
4735         bool does_anybody_have_an_opinion = false;
4736 
4737         for (idx = 0; idx < num_threads; ++idx)
4738         {
4739             curr_thread_list = m_process_sp->GetThreadList();
4740             if (curr_thread_list.GetSize() != num_threads)
4741             {
4742                 Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STEP | LIBLLDB_LOG_PROCESS));
4743                 if (log)
4744                     log->Printf("Number of threads changed from %u to %u while processing event.", num_threads, curr_thread_list.GetSize());
4745                 break;
4746             }
4747 
4748             lldb::ThreadSP thread_sp = curr_thread_list.GetThreadAtIndex(idx);
4749 
4750             if (thread_sp->GetIndexID() != thread_index_array[idx])
4751             {
4752                 Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STEP | LIBLLDB_LOG_PROCESS));
4753                 if (log)
4754                     log->Printf("The thread at position %u changed from %u to %u while processing event.",
4755                                 idx,
4756                                 thread_index_array[idx],
4757                                 thread_sp->GetIndexID());
4758                 break;
4759             }
4760 
4761             StopInfoSP stop_info_sp = thread_sp->GetStopInfo ();
4762             if (stop_info_sp && stop_info_sp->IsValid())
4763             {
4764                 does_anybody_have_an_opinion = true;
4765                 bool this_thread_wants_to_stop;
4766                 if (stop_info_sp->GetOverrideShouldStop())
4767                 {
4768                     this_thread_wants_to_stop = stop_info_sp->GetOverriddenShouldStopValue();
4769                 }
4770                 else
4771                 {
4772                     stop_info_sp->PerformAction(event_ptr);
4773                     // The stop action might restart the target.  If it does, then we want to mark that in the
4774                     // event so that whoever is receiving it will know to wait for the running event and reflect
4775                     // that state appropriately.
4776                     // We also need to stop processing actions, since they aren't expecting the target to be running.
4777 
4778                     // FIXME: we might have run.
4779                     if (stop_info_sp->HasTargetRunSinceMe())
4780                     {
4781                         SetRestarted (true);
4782                         break;
4783                     }
4784 
4785                     this_thread_wants_to_stop = stop_info_sp->ShouldStop(event_ptr);
4786                 }
4787 
4788                 if (still_should_stop == false)
4789                     still_should_stop = this_thread_wants_to_stop;
4790             }
4791         }
4792 
4793 
4794         if (!GetRestarted())
4795         {
4796             if (!still_should_stop && does_anybody_have_an_opinion)
4797             {
4798                 // We've been asked to continue, so do that here.
4799                 SetRestarted(true);
4800                 // Use the public resume method here, since this is just
4801                 // extending a public resume.
4802                 m_process_sp->PrivateResume();
4803             }
4804             else
4805             {
4806                 // If we didn't restart, run the Stop Hooks here:
4807                 // They might also restart the target, so watch for that.
4808                 m_process_sp->GetTarget().RunStopHooks();
4809                 if (m_process_sp->GetPrivateState() == eStateRunning)
4810                     SetRestarted(true);
4811             }
4812         }
4813     }
4814 }
4815 
4816 void
4817 Process::ProcessEventData::Dump (Stream *s) const
4818 {
4819     if (m_process_sp)
4820         s->Printf(" process = %p (pid = %" PRIu64 "), ",
4821                   static_cast<void*>(m_process_sp.get()), m_process_sp->GetID());
4822 
4823     s->Printf("state = %s", StateAsCString(GetState()));
4824 }
4825 
4826 const Process::ProcessEventData *
4827 Process::ProcessEventData::GetEventDataFromEvent (const Event *event_ptr)
4828 {
4829     if (event_ptr)
4830     {
4831         const EventData *event_data = event_ptr->GetData();
4832         if (event_data && event_data->GetFlavor() == ProcessEventData::GetFlavorString())
4833             return static_cast <const ProcessEventData *> (event_ptr->GetData());
4834     }
4835     return NULL;
4836 }
4837 
4838 ProcessSP
4839 Process::ProcessEventData::GetProcessFromEvent (const Event *event_ptr)
4840 {
4841     ProcessSP process_sp;
4842     const ProcessEventData *data = GetEventDataFromEvent (event_ptr);
4843     if (data)
4844         process_sp = data->GetProcessSP();
4845     return process_sp;
4846 }
4847 
4848 StateType
4849 Process::ProcessEventData::GetStateFromEvent (const Event *event_ptr)
4850 {
4851     const ProcessEventData *data = GetEventDataFromEvent (event_ptr);
4852     if (data == NULL)
4853         return eStateInvalid;
4854     else
4855         return data->GetState();
4856 }
4857 
4858 bool
4859 Process::ProcessEventData::GetRestartedFromEvent (const Event *event_ptr)
4860 {
4861     const ProcessEventData *data = GetEventDataFromEvent (event_ptr);
4862     if (data == NULL)
4863         return false;
4864     else
4865         return data->GetRestarted();
4866 }
4867 
4868 void
4869 Process::ProcessEventData::SetRestartedInEvent (Event *event_ptr, bool new_value)
4870 {
4871     ProcessEventData *data = const_cast<ProcessEventData *>(GetEventDataFromEvent (event_ptr));
4872     if (data != NULL)
4873         data->SetRestarted(new_value);
4874 }
4875 
4876 size_t
4877 Process::ProcessEventData::GetNumRestartedReasons(const Event *event_ptr)
4878 {
4879     ProcessEventData *data = const_cast<ProcessEventData *>(GetEventDataFromEvent (event_ptr));
4880     if (data != NULL)
4881         return data->GetNumRestartedReasons();
4882     else
4883         return 0;
4884 }
4885 
4886 const char *
4887 Process::ProcessEventData::GetRestartedReasonAtIndex(const Event *event_ptr, size_t idx)
4888 {
4889     ProcessEventData *data = const_cast<ProcessEventData *>(GetEventDataFromEvent (event_ptr));
4890     if (data != NULL)
4891         return data->GetRestartedReasonAtIndex(idx);
4892     else
4893         return NULL;
4894 }
4895 
4896 void
4897 Process::ProcessEventData::AddRestartedReason (Event *event_ptr, const char *reason)
4898 {
4899     ProcessEventData *data = const_cast<ProcessEventData *>(GetEventDataFromEvent (event_ptr));
4900     if (data != NULL)
4901         data->AddRestartedReason(reason);
4902 }
4903 
4904 bool
4905 Process::ProcessEventData::GetInterruptedFromEvent (const Event *event_ptr)
4906 {
4907     const ProcessEventData *data = GetEventDataFromEvent (event_ptr);
4908     if (data == NULL)
4909         return false;
4910     else
4911         return data->GetInterrupted ();
4912 }
4913 
4914 void
4915 Process::ProcessEventData::SetInterruptedInEvent (Event *event_ptr, bool new_value)
4916 {
4917     ProcessEventData *data = const_cast<ProcessEventData *>(GetEventDataFromEvent (event_ptr));
4918     if (data != NULL)
4919         data->SetInterrupted(new_value);
4920 }
4921 
4922 bool
4923 Process::ProcessEventData::SetUpdateStateOnRemoval (Event *event_ptr)
4924 {
4925     ProcessEventData *data = const_cast<ProcessEventData *>(GetEventDataFromEvent (event_ptr));
4926     if (data)
4927     {
4928         data->SetUpdateStateOnRemoval();
4929         return true;
4930     }
4931     return false;
4932 }
4933 
4934 lldb::TargetSP
4935 Process::CalculateTarget ()
4936 {
4937     return m_target.shared_from_this();
4938 }
4939 
4940 void
4941 Process::CalculateExecutionContext (ExecutionContext &exe_ctx)
4942 {
4943     exe_ctx.SetTargetPtr (&m_target);
4944     exe_ctx.SetProcessPtr (this);
4945     exe_ctx.SetThreadPtr(NULL);
4946     exe_ctx.SetFramePtr (NULL);
4947 }
4948 
4949 //uint32_t
4950 //Process::ListProcessesMatchingName (const char *name, StringList &matches, std::vector<lldb::pid_t> &pids)
4951 //{
4952 //    return 0;
4953 //}
4954 //
4955 //ArchSpec
4956 //Process::GetArchSpecForExistingProcess (lldb::pid_t pid)
4957 //{
4958 //    return Host::GetArchSpecForExistingProcess (pid);
4959 //}
4960 //
4961 //ArchSpec
4962 //Process::GetArchSpecForExistingProcess (const char *process_name)
4963 //{
4964 //    return Host::GetArchSpecForExistingProcess (process_name);
4965 //}
4966 //
4967 void
4968 Process::AppendSTDOUT (const char * s, size_t len)
4969 {
4970     Mutex::Locker locker (m_stdio_communication_mutex);
4971     m_stdout_data.append (s, len);
4972     BroadcastEventIfUnique (eBroadcastBitSTDOUT, new ProcessEventData (shared_from_this(), GetState()));
4973 }
4974 
4975 void
4976 Process::AppendSTDERR (const char * s, size_t len)
4977 {
4978     Mutex::Locker locker (m_stdio_communication_mutex);
4979     m_stderr_data.append (s, len);
4980     BroadcastEventIfUnique (eBroadcastBitSTDERR, new ProcessEventData (shared_from_this(), GetState()));
4981 }
4982 
4983 void
4984 Process::BroadcastAsyncProfileData(const std::string &one_profile_data)
4985 {
4986     Mutex::Locker locker (m_profile_data_comm_mutex);
4987     m_profile_data.push_back(one_profile_data);
4988     BroadcastEventIfUnique (eBroadcastBitProfileData, new ProcessEventData (shared_from_this(), GetState()));
4989 }
4990 
4991 size_t
4992 Process::GetAsyncProfileData (char *buf, size_t buf_size, Error &error)
4993 {
4994     Mutex::Locker locker(m_profile_data_comm_mutex);
4995     if (m_profile_data.empty())
4996         return 0;
4997 
4998     std::string &one_profile_data = m_profile_data.front();
4999     size_t bytes_available = one_profile_data.size();
5000     if (bytes_available > 0)
5001     {
5002         Log *log (lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
5003         if (log)
5004             log->Printf ("Process::GetProfileData (buf = %p, size = %" PRIu64 ")",
5005                          static_cast<void*>(buf),
5006                          static_cast<uint64_t>(buf_size));
5007         if (bytes_available > buf_size)
5008         {
5009             memcpy(buf, one_profile_data.c_str(), buf_size);
5010             one_profile_data.erase(0, buf_size);
5011             bytes_available = buf_size;
5012         }
5013         else
5014         {
5015             memcpy(buf, one_profile_data.c_str(), bytes_available);
5016             m_profile_data.erase(m_profile_data.begin());
5017         }
5018     }
5019     return bytes_available;
5020 }
5021 
5022 
5023 //------------------------------------------------------------------
5024 // Process STDIO
5025 //------------------------------------------------------------------
5026 
5027 size_t
5028 Process::GetSTDOUT (char *buf, size_t buf_size, Error &error)
5029 {
5030     Mutex::Locker locker(m_stdio_communication_mutex);
5031     size_t bytes_available = m_stdout_data.size();
5032     if (bytes_available > 0)
5033     {
5034         Log *log (lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
5035         if (log)
5036             log->Printf ("Process::GetSTDOUT (buf = %p, size = %" PRIu64 ")",
5037                          static_cast<void*>(buf),
5038                          static_cast<uint64_t>(buf_size));
5039         if (bytes_available > buf_size)
5040         {
5041             memcpy(buf, m_stdout_data.c_str(), buf_size);
5042             m_stdout_data.erase(0, buf_size);
5043             bytes_available = buf_size;
5044         }
5045         else
5046         {
5047             memcpy(buf, m_stdout_data.c_str(), bytes_available);
5048             m_stdout_data.clear();
5049         }
5050     }
5051     return bytes_available;
5052 }
5053 
5054 
5055 size_t
5056 Process::GetSTDERR (char *buf, size_t buf_size, Error &error)
5057 {
5058     Mutex::Locker locker(m_stdio_communication_mutex);
5059     size_t bytes_available = m_stderr_data.size();
5060     if (bytes_available > 0)
5061     {
5062         Log *log (lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
5063         if (log)
5064             log->Printf ("Process::GetSTDERR (buf = %p, size = %" PRIu64 ")",
5065                          static_cast<void*>(buf),
5066                          static_cast<uint64_t>(buf_size));
5067         if (bytes_available > buf_size)
5068         {
5069             memcpy(buf, m_stderr_data.c_str(), buf_size);
5070             m_stderr_data.erase(0, buf_size);
5071             bytes_available = buf_size;
5072         }
5073         else
5074         {
5075             memcpy(buf, m_stderr_data.c_str(), bytes_available);
5076             m_stderr_data.clear();
5077         }
5078     }
5079     return bytes_available;
5080 }
5081 
5082 void
5083 Process::STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len)
5084 {
5085     Process *process = (Process *) baton;
5086     process->AppendSTDOUT (static_cast<const char *>(src), src_len);
5087 }
5088 
5089 class IOHandlerProcessSTDIO :
5090     public IOHandler
5091 {
5092 public:
5093     IOHandlerProcessSTDIO (Process *process,
5094                            int write_fd) :
5095     IOHandler(process->GetTarget().GetDebugger(), IOHandler::Type::ProcessIO),
5096         m_process (process),
5097         m_read_file (),
5098         m_write_file (write_fd, false),
5099         m_pipe ()
5100     {
5101         m_read_file.SetDescriptor(GetInputFD(), false);
5102     }
5103 
5104     virtual
5105     ~IOHandlerProcessSTDIO ()
5106     {
5107 
5108     }
5109 
5110     bool
5111     OpenPipes ()
5112     {
5113         if (m_pipe.CanRead() && m_pipe.CanWrite())
5114             return true;
5115         Error result = m_pipe.CreateNew(false);
5116         return result.Success();
5117     }
5118 
5119     void
5120     ClosePipes()
5121     {
5122         m_pipe.Close();
5123     }
5124 
5125     // Each IOHandler gets to run until it is done. It should read data
5126     // from the "in" and place output into "out" and "err and return
5127     // when done.
5128     virtual void
5129     Run ()
5130     {
5131         if (m_read_file.IsValid() && m_write_file.IsValid())
5132         {
5133             SetIsDone(false);
5134             if (OpenPipes())
5135             {
5136                 const int read_fd = m_read_file.GetDescriptor();
5137                 TerminalState terminal_state;
5138                 terminal_state.Save (read_fd, false);
5139                 Terminal terminal(read_fd);
5140                 terminal.SetCanonical(false);
5141                 terminal.SetEcho(false);
5142 // FD_ZERO, FD_SET are not supported on windows
5143 #ifndef _WIN32
5144                 const int pipe_read_fd = m_pipe.GetReadFileDescriptor();
5145                 while (!GetIsDone())
5146                 {
5147                     fd_set read_fdset;
5148                     FD_ZERO (&read_fdset);
5149                     FD_SET (read_fd, &read_fdset);
5150                     FD_SET (pipe_read_fd, &read_fdset);
5151                     const int nfds = std::max<int>(read_fd, pipe_read_fd) + 1;
5152                     int num_set_fds = select (nfds, &read_fdset, NULL, NULL, NULL);
5153                     if (num_set_fds < 0)
5154                     {
5155                         const int select_errno = errno;
5156 
5157                         if (select_errno != EINTR)
5158                             SetIsDone(true);
5159                     }
5160                     else if (num_set_fds > 0)
5161                     {
5162                         char ch = 0;
5163                         size_t n;
5164                         if (FD_ISSET (read_fd, &read_fdset))
5165                         {
5166                             n = 1;
5167                             if (m_read_file.Read(&ch, n).Success() && n == 1)
5168                             {
5169                                 if (m_write_file.Write(&ch, n).Fail() || n != 1)
5170                                     SetIsDone(true);
5171                             }
5172                             else
5173                                 SetIsDone(true);
5174                         }
5175                         if (FD_ISSET (pipe_read_fd, &read_fdset))
5176                         {
5177                             size_t bytes_read;
5178                             // Consume the interrupt byte
5179                             Error error = m_pipe.Read(&ch, 1, bytes_read);
5180                             if (error.Success())
5181                             {
5182                                 switch (ch)
5183                                 {
5184                                     case 'q':
5185                                         SetIsDone(true);
5186                                         break;
5187                                     case 'i':
5188                                         if (StateIsRunningState(m_process->GetState()))
5189                                             m_process->Halt();
5190                                         break;
5191                                 }
5192                             }
5193                         }
5194                     }
5195                 }
5196 #endif
5197                 terminal_state.Restore();
5198 
5199             }
5200             else
5201                 SetIsDone(true);
5202         }
5203         else
5204             SetIsDone(true);
5205     }
5206 
5207     // Hide any characters that have been displayed so far so async
5208     // output can be displayed. Refresh() will be called after the
5209     // output has been displayed.
5210     virtual void
5211     Hide ()
5212     {
5213 
5214     }
5215     // Called when the async output has been received in order to update
5216     // the input reader (refresh the prompt and redisplay any current
5217     // line(s) that are being edited
5218     virtual void
5219     Refresh ()
5220     {
5221 
5222     }
5223 
5224     virtual void
5225     Cancel ()
5226     {
5227         char ch = 'q';  // Send 'q' for quit
5228         size_t bytes_written = 0;
5229         m_pipe.Write(&ch, 1, bytes_written);
5230     }
5231 
5232     virtual bool
5233     Interrupt ()
5234     {
5235         // Do only things that are safe to do in an interrupt context (like in
5236         // a SIGINT handler), like write 1 byte to a file descriptor. This will
5237         // interrupt the IOHandlerProcessSTDIO::Run() and we can look at the byte
5238         // that was written to the pipe and then call m_process->Halt() from a
5239         // much safer location in code.
5240         if (m_active)
5241         {
5242             char ch = 'i'; // Send 'i' for interrupt
5243             size_t bytes_written = 0;
5244             Error result = m_pipe.Write(&ch, 1, bytes_written);
5245             return result.Success();
5246         }
5247         else
5248         {
5249             // This IOHandler might be pushed on the stack, but not being run currently
5250             // so do the right thing if we aren't actively watching for STDIN by sending
5251             // the interrupt to the process. Otherwise the write to the pipe above would
5252             // do nothing. This can happen when the command interpreter is running and
5253             // gets a "expression ...". It will be on the IOHandler thread and sending
5254             // the input is complete to the delegate which will cause the expression to
5255             // run, which will push the process IO handler, but not run it.
5256 
5257             if (StateIsRunningState(m_process->GetState()))
5258             {
5259                 m_process->SendAsyncInterrupt();
5260                 return true;
5261             }
5262         }
5263         return false;
5264     }
5265 
5266     virtual void
5267     GotEOF()
5268     {
5269 
5270     }
5271 
5272 protected:
5273     Process *m_process;
5274     File m_read_file;   // Read from this file (usually actual STDIN for LLDB
5275     File m_write_file;  // Write to this file (usually the master pty for getting io to debuggee)
5276     Pipe m_pipe;
5277 };
5278 
5279 void
5280 Process::SetSTDIOFileDescriptor (int fd)
5281 {
5282     // First set up the Read Thread for reading/handling process I/O
5283 
5284     std::unique_ptr<ConnectionFileDescriptor> conn_ap (new ConnectionFileDescriptor (fd, true));
5285 
5286     if (conn_ap.get())
5287     {
5288         m_stdio_communication.SetConnection (conn_ap.release());
5289         if (m_stdio_communication.IsConnected())
5290         {
5291             m_stdio_communication.SetReadThreadBytesReceivedCallback (STDIOReadThreadBytesReceived, this);
5292             m_stdio_communication.StartReadThread();
5293 
5294             // Now read thread is set up, set up input reader.
5295 
5296             if (!m_process_input_reader.get())
5297                 m_process_input_reader.reset (new IOHandlerProcessSTDIO (this, fd));
5298         }
5299     }
5300 }
5301 
5302 bool
5303 Process::ProcessIOHandlerIsActive ()
5304 {
5305     IOHandlerSP io_handler_sp (m_process_input_reader);
5306     if (io_handler_sp)
5307         return m_target.GetDebugger().IsTopIOHandler (io_handler_sp);
5308     return false;
5309 }
5310 bool
5311 Process::PushProcessIOHandler ()
5312 {
5313     IOHandlerSP io_handler_sp (m_process_input_reader);
5314     if (io_handler_sp)
5315     {
5316         io_handler_sp->SetIsDone(false);
5317         m_target.GetDebugger().PushIOHandler (io_handler_sp);
5318         return true;
5319     }
5320     return false;
5321 }
5322 
5323 bool
5324 Process::PopProcessIOHandler ()
5325 {
5326     IOHandlerSP io_handler_sp (m_process_input_reader);
5327     if (io_handler_sp)
5328         return m_target.GetDebugger().PopIOHandler (io_handler_sp);
5329     return false;
5330 }
5331 
5332 // The process needs to know about installed plug-ins
5333 void
5334 Process::SettingsInitialize ()
5335 {
5336     Thread::SettingsInitialize ();
5337 }
5338 
5339 void
5340 Process::SettingsTerminate ()
5341 {
5342     Thread::SettingsTerminate ();
5343 }
5344 
5345 ExpressionResults
5346 Process::RunThreadPlan (ExecutionContext &exe_ctx,
5347                         lldb::ThreadPlanSP &thread_plan_sp,
5348                         const EvaluateExpressionOptions &options,
5349                         Stream &errors)
5350 {
5351     ExpressionResults return_value = eExpressionSetupError;
5352 
5353     if (thread_plan_sp.get() == NULL)
5354     {
5355         errors.Printf("RunThreadPlan called with empty thread plan.");
5356         return eExpressionSetupError;
5357     }
5358 
5359     if (!thread_plan_sp->ValidatePlan(NULL))
5360     {
5361         errors.Printf ("RunThreadPlan called with an invalid thread plan.");
5362         return eExpressionSetupError;
5363     }
5364 
5365     if (exe_ctx.GetProcessPtr() != this)
5366     {
5367         errors.Printf("RunThreadPlan called on wrong process.");
5368         return eExpressionSetupError;
5369     }
5370 
5371     Thread *thread = exe_ctx.GetThreadPtr();
5372     if (thread == NULL)
5373     {
5374         errors.Printf("RunThreadPlan called with invalid thread.");
5375         return eExpressionSetupError;
5376     }
5377 
5378     // We rely on the thread plan we are running returning "PlanCompleted" if when it successfully completes.
5379     // For that to be true the plan can't be private - since private plans suppress themselves in the
5380     // GetCompletedPlan call.
5381 
5382     bool orig_plan_private = thread_plan_sp->GetPrivate();
5383     thread_plan_sp->SetPrivate(false);
5384 
5385     if (m_private_state.GetValue() != eStateStopped)
5386     {
5387         errors.Printf ("RunThreadPlan called while the private state was not stopped.");
5388         return eExpressionSetupError;
5389     }
5390 
5391     // Save the thread & frame from the exe_ctx for restoration after we run
5392     const uint32_t thread_idx_id = thread->GetIndexID();
5393     StackFrameSP selected_frame_sp = thread->GetSelectedFrame();
5394     if (!selected_frame_sp)
5395     {
5396         thread->SetSelectedFrame(0);
5397         selected_frame_sp = thread->GetSelectedFrame();
5398         if (!selected_frame_sp)
5399         {
5400             errors.Printf("RunThreadPlan called without a selected frame on thread %d", thread_idx_id);
5401             return eExpressionSetupError;
5402         }
5403     }
5404 
5405     StackID ctx_frame_id = selected_frame_sp->GetStackID();
5406 
5407     // N.B. Running the target may unset the currently selected thread and frame.  We don't want to do that either,
5408     // so we should arrange to reset them as well.
5409 
5410     lldb::ThreadSP selected_thread_sp = GetThreadList().GetSelectedThread();
5411 
5412     uint32_t selected_tid;
5413     StackID selected_stack_id;
5414     if (selected_thread_sp)
5415     {
5416         selected_tid = selected_thread_sp->GetIndexID();
5417         selected_stack_id = selected_thread_sp->GetSelectedFrame()->GetStackID();
5418     }
5419     else
5420     {
5421         selected_tid = LLDB_INVALID_THREAD_ID;
5422     }
5423 
5424     HostThread backup_private_state_thread;
5425     lldb::StateType old_state = eStateInvalid;
5426     lldb::ThreadPlanSP stopper_base_plan_sp;
5427 
5428     Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_STEP | LIBLLDB_LOG_PROCESS));
5429     if (m_private_state_thread.EqualsThread(Host::GetCurrentThread()))
5430     {
5431         // Yikes, we are running on the private state thread!  So we can't wait for public events on this thread, since
5432         // we are the thread that is generating public events.
5433         // The simplest thing to do is to spin up a temporary thread to handle private state thread events while
5434         // we are fielding public events here.
5435         if (log)
5436             log->Printf ("Running thread plan on private state thread, spinning up another state thread to handle the events.");
5437 
5438         backup_private_state_thread = m_private_state_thread;
5439 
5440         // One other bit of business: we want to run just this thread plan and anything it pushes, and then stop,
5441         // returning control here.
5442         // But in the normal course of things, the plan above us on the stack would be given a shot at the stop
5443         // event before deciding to stop, and we don't want that.  So we insert a "stopper" base plan on the stack
5444         // before the plan we want to run.  Since base plans always stop and return control to the user, that will
5445         // do just what we want.
5446         stopper_base_plan_sp.reset(new ThreadPlanBase (*thread));
5447         thread->QueueThreadPlan (stopper_base_plan_sp, false);
5448         // Have to make sure our public state is stopped, since otherwise the reporting logic below doesn't work correctly.
5449         old_state = m_public_state.GetValue();
5450         m_public_state.SetValueNoLock(eStateStopped);
5451 
5452         // Now spin up the private state thread:
5453         StartPrivateStateThread(true);
5454     }
5455 
5456     thread->QueueThreadPlan(thread_plan_sp, false); // This used to pass "true" does that make sense?
5457 
5458     if (options.GetDebug())
5459     {
5460         // In this case, we aren't actually going to run, we just want to stop right away.
5461         // Flush this thread so we will refetch the stacks and show the correct backtrace.
5462         // FIXME: To make this prettier we should invent some stop reason for this, but that
5463         // is only cosmetic, and this functionality is only of use to lldb developers who can
5464         // live with not pretty...
5465         thread->Flush();
5466         return eExpressionStoppedForDebug;
5467     }
5468 
5469     Listener listener("lldb.process.listener.run-thread-plan");
5470 
5471     lldb::EventSP event_to_broadcast_sp;
5472 
5473     {
5474         // This process event hijacker Hijacks the Public events and its destructor makes sure that the process events get
5475         // restored on exit to the function.
5476         //
5477         // If the event needs to propagate beyond the hijacker (e.g., the process exits during execution), then the event
5478         // is put into event_to_broadcast_sp for rebroadcasting.
5479 
5480         ProcessEventHijacker run_thread_plan_hijacker (*this, &listener);
5481 
5482         if (log)
5483         {
5484             StreamString s;
5485             thread_plan_sp->GetDescription(&s, lldb::eDescriptionLevelVerbose);
5486             log->Printf ("Process::RunThreadPlan(): Resuming thread %u - 0x%4.4" PRIx64 " to run thread plan \"%s\".",
5487                          thread->GetIndexID(),
5488                          thread->GetID(),
5489                          s.GetData());
5490         }
5491 
5492         bool got_event;
5493         lldb::EventSP event_sp;
5494         lldb::StateType stop_state = lldb::eStateInvalid;
5495 
5496         TimeValue* timeout_ptr = NULL;
5497         TimeValue real_timeout;
5498 
5499         bool before_first_timeout = true;  // This is set to false the first time that we have to halt the target.
5500         bool do_resume = true;
5501         bool handle_running_event = true;
5502         const uint64_t default_one_thread_timeout_usec = 250000;
5503 
5504         // This is just for accounting:
5505         uint32_t num_resumes = 0;
5506 
5507         uint32_t timeout_usec = options.GetTimeoutUsec();
5508         uint32_t one_thread_timeout_usec;
5509         uint32_t all_threads_timeout_usec = 0;
5510 
5511         // If we are going to run all threads the whole time, or if we are only going to run one thread,
5512         // then we don't need the first timeout.  So we set the final timeout, and pretend we are after the
5513         // first timeout already.
5514 
5515         if (!options.GetStopOthers() || !options.GetTryAllThreads())
5516         {
5517             before_first_timeout = false;
5518             one_thread_timeout_usec = 0;
5519             all_threads_timeout_usec = timeout_usec;
5520         }
5521         else
5522         {
5523             uint32_t option_one_thread_timeout = options.GetOneThreadTimeoutUsec();
5524 
5525             // If the overall wait is forever, then we only need to set the one thread timeout:
5526             if (timeout_usec == 0)
5527             {
5528                 if (option_one_thread_timeout != 0)
5529                     one_thread_timeout_usec = option_one_thread_timeout;
5530                 else
5531                     one_thread_timeout_usec = default_one_thread_timeout_usec;
5532             }
5533             else
5534             {
5535                 // Otherwise, if the one thread timeout is set, make sure it isn't longer than the overall timeout,
5536                 // and use it, otherwise use half the total timeout, bounded by the default_one_thread_timeout_usec.
5537                 uint64_t computed_one_thread_timeout;
5538                 if (option_one_thread_timeout != 0)
5539                 {
5540                     if (timeout_usec < option_one_thread_timeout)
5541                     {
5542                         errors.Printf("RunThreadPlan called without one thread timeout greater than total timeout");
5543                         return eExpressionSetupError;
5544                     }
5545                     computed_one_thread_timeout = option_one_thread_timeout;
5546                 }
5547                 else
5548                 {
5549                     computed_one_thread_timeout = timeout_usec / 2;
5550                     if (computed_one_thread_timeout > default_one_thread_timeout_usec)
5551                         computed_one_thread_timeout = default_one_thread_timeout_usec;
5552                 }
5553                 one_thread_timeout_usec = computed_one_thread_timeout;
5554                 all_threads_timeout_usec = timeout_usec - one_thread_timeout_usec;
5555 
5556             }
5557         }
5558 
5559         if (log)
5560             log->Printf ("Stop others: %u, try all: %u, before_first: %u, one thread: %" PRIu32 " - all threads: %" PRIu32 ".\n",
5561                          options.GetStopOthers(),
5562                          options.GetTryAllThreads(),
5563                          before_first_timeout,
5564                          one_thread_timeout_usec,
5565                          all_threads_timeout_usec);
5566 
5567         // This isn't going to work if there are unfetched events on the queue.
5568         // Are there cases where we might want to run the remaining events here, and then try to
5569         // call the function?  That's probably being too tricky for our own good.
5570 
5571         Event *other_events = listener.PeekAtNextEvent();
5572         if (other_events != NULL)
5573         {
5574             errors.Printf("Calling RunThreadPlan with pending events on the queue.");
5575             return eExpressionSetupError;
5576         }
5577 
5578         // We also need to make sure that the next event is delivered.  We might be calling a function as part of
5579         // a thread plan, in which case the last delivered event could be the running event, and we don't want
5580         // event coalescing to cause us to lose OUR running event...
5581         ForceNextEventDelivery();
5582 
5583         // This while loop must exit out the bottom, there's cleanup that we need to do when we are done.
5584         // So don't call return anywhere within it.
5585 
5586 #ifdef LLDB_RUN_THREAD_HALT_WITH_EVENT
5587         // It's pretty much impossible to write test cases for things like:
5588         // One thread timeout expires, I go to halt, but the process already stopped
5589         // on the function call stop breakpoint.  Turning on this define will make us not
5590         // fetch the first event till after the halt.  So if you run a quick function, it will have
5591         // completed, and the completion event will be waiting, when you interrupt for halt.
5592         // The expression evaluation should still succeed.
5593         bool miss_first_event = true;
5594 #endif
5595         TimeValue one_thread_timeout;
5596         TimeValue final_timeout;
5597 
5598 
5599         while (1)
5600         {
5601             // We usually want to resume the process if we get to the top of the loop.
5602             // The only exception is if we get two running events with no intervening
5603             // stop, which can happen, we will just wait for then next stop event.
5604             if (log)
5605                 log->Printf ("Top of while loop: do_resume: %i handle_running_event: %i before_first_timeout: %i.",
5606                              do_resume,
5607                              handle_running_event,
5608                              before_first_timeout);
5609 
5610             if (do_resume || handle_running_event)
5611             {
5612                 // Do the initial resume and wait for the running event before going further.
5613 
5614                 if (do_resume)
5615                 {
5616                     num_resumes++;
5617                     Error resume_error = PrivateResume ();
5618                     if (!resume_error.Success())
5619                     {
5620                         errors.Printf("Error resuming inferior the %d time: \"%s\".\n",
5621                                       num_resumes,
5622                                       resume_error.AsCString());
5623                         return_value = eExpressionSetupError;
5624                         break;
5625                     }
5626                 }
5627 
5628                 TimeValue resume_timeout = TimeValue::Now();
5629                 resume_timeout.OffsetWithMicroSeconds(500000);
5630 
5631                 got_event = listener.WaitForEvent(&resume_timeout, event_sp);
5632                 if (!got_event)
5633                 {
5634                     if (log)
5635                         log->Printf ("Process::RunThreadPlan(): didn't get any event after resume %d, exiting.",
5636                                         num_resumes);
5637 
5638                     errors.Printf("Didn't get any event after resume %d, exiting.", num_resumes);
5639                     return_value = eExpressionSetupError;
5640                     break;
5641                 }
5642 
5643                 stop_state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
5644 
5645                 if (stop_state != eStateRunning)
5646                 {
5647                     bool restarted = false;
5648 
5649                     if (stop_state == eStateStopped)
5650                     {
5651                         restarted = Process::ProcessEventData::GetRestartedFromEvent(event_sp.get());
5652                         if (log)
5653                             log->Printf("Process::RunThreadPlan(): didn't get running event after "
5654                                         "resume %d, got %s instead (restarted: %i, do_resume: %i, handle_running_event: %i).",
5655                                         num_resumes,
5656                                         StateAsCString(stop_state),
5657                                         restarted,
5658                                         do_resume,
5659                                         handle_running_event);
5660                     }
5661 
5662                     if (restarted)
5663                     {
5664                         // This is probably an overabundance of caution, I don't think I should ever get a stopped & restarted
5665                         // event here.  But if I do, the best thing is to Halt and then get out of here.
5666                         Halt();
5667                     }
5668 
5669                     errors.Printf("Didn't get running event after initial resume, got %s instead.",
5670                                   StateAsCString(stop_state));
5671                     return_value = eExpressionSetupError;
5672                     break;
5673                 }
5674 
5675                 if (log)
5676                     log->PutCString ("Process::RunThreadPlan(): resuming succeeded.");
5677                 // We need to call the function synchronously, so spin waiting for it to return.
5678                 // If we get interrupted while executing, we're going to lose our context, and
5679                 // won't be able to gather the result at this point.
5680                 // We set the timeout AFTER the resume, since the resume takes some time and we
5681                 // don't want to charge that to the timeout.
5682             }
5683             else
5684             {
5685                 if (log)
5686                     log->PutCString ("Process::RunThreadPlan(): waiting for next event.");
5687             }
5688 
5689             if (before_first_timeout)
5690             {
5691                 if (options.GetTryAllThreads())
5692                 {
5693                     one_thread_timeout = TimeValue::Now();
5694                     one_thread_timeout.OffsetWithMicroSeconds(one_thread_timeout_usec);
5695                     timeout_ptr = &one_thread_timeout;
5696                 }
5697                 else
5698                 {
5699                     if (timeout_usec == 0)
5700                         timeout_ptr = NULL;
5701                     else
5702                     {
5703                         final_timeout = TimeValue::Now();
5704                         final_timeout.OffsetWithMicroSeconds (timeout_usec);
5705                         timeout_ptr = &final_timeout;
5706                     }
5707                 }
5708             }
5709             else
5710             {
5711                 if (timeout_usec == 0)
5712                     timeout_ptr = NULL;
5713                 else
5714                 {
5715                     final_timeout = TimeValue::Now();
5716                     final_timeout.OffsetWithMicroSeconds (all_threads_timeout_usec);
5717                     timeout_ptr = &final_timeout;
5718                 }
5719             }
5720 
5721             do_resume = true;
5722             handle_running_event = true;
5723 
5724             // Now wait for the process to stop again:
5725             event_sp.reset();
5726 
5727             if (log)
5728             {
5729                 if (timeout_ptr)
5730                 {
5731                     log->Printf ("Process::RunThreadPlan(): about to wait - now is %" PRIu64 " - endpoint is %" PRIu64,
5732                                  TimeValue::Now().GetAsMicroSecondsSinceJan1_1970(),
5733                                  timeout_ptr->GetAsMicroSecondsSinceJan1_1970());
5734                 }
5735                 else
5736                 {
5737                     log->Printf ("Process::RunThreadPlan(): about to wait forever.");
5738                 }
5739             }
5740 
5741 #ifdef LLDB_RUN_THREAD_HALT_WITH_EVENT
5742             // See comment above...
5743             if (miss_first_event)
5744             {
5745                 usleep(1000);
5746                 miss_first_event = false;
5747                 got_event = false;
5748             }
5749             else
5750 #endif
5751             got_event = listener.WaitForEvent (timeout_ptr, event_sp);
5752 
5753             if (got_event)
5754             {
5755                 if (event_sp.get())
5756                 {
5757                     bool keep_going = false;
5758                     if (event_sp->GetType() == eBroadcastBitInterrupt)
5759                     {
5760                         Halt();
5761                         return_value = eExpressionInterrupted;
5762                         errors.Printf ("Execution halted by user interrupt.");
5763                         if (log)
5764                             log->Printf ("Process::RunThreadPlan(): Got  interrupted by eBroadcastBitInterrupted, exiting.");
5765                         break;
5766                     }
5767                     else
5768                     {
5769                         stop_state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
5770                         if (log)
5771                             log->Printf("Process::RunThreadPlan(): in while loop, got event: %s.", StateAsCString(stop_state));
5772 
5773                         switch (stop_state)
5774                         {
5775                         case lldb::eStateStopped:
5776                             {
5777                                 // We stopped, figure out what we are going to do now.
5778                                 ThreadSP thread_sp = GetThreadList().FindThreadByIndexID (thread_idx_id);
5779                                 if (!thread_sp)
5780                                 {
5781                                     // Ooh, our thread has vanished.  Unlikely that this was successful execution...
5782                                     if (log)
5783                                         log->Printf ("Process::RunThreadPlan(): execution completed but our thread (index-id=%u) has vanished.", thread_idx_id);
5784                                     return_value = eExpressionInterrupted;
5785                                 }
5786                                 else
5787                                 {
5788                                     // If we were restarted, we just need to go back up to fetch another event.
5789                                     if (Process::ProcessEventData::GetRestartedFromEvent(event_sp.get()))
5790                                     {
5791                                         if (log)
5792                                         {
5793                                             log->Printf ("Process::RunThreadPlan(): Got a stop and restart, so we'll continue waiting.");
5794                                         }
5795                                        keep_going = true;
5796                                        do_resume = false;
5797                                        handle_running_event = true;
5798 
5799                                     }
5800                                     else
5801                                     {
5802                                         StopInfoSP stop_info_sp (thread_sp->GetStopInfo ());
5803                                         StopReason stop_reason = eStopReasonInvalid;
5804                                         if (stop_info_sp)
5805                                              stop_reason = stop_info_sp->GetStopReason();
5806 
5807                                         // FIXME: We only check if the stop reason is plan complete, should we make sure that
5808                                         // it is OUR plan that is complete?
5809                                         if (stop_reason == eStopReasonPlanComplete)
5810                                         {
5811                                             if (log)
5812                                                 log->PutCString ("Process::RunThreadPlan(): execution completed successfully.");
5813                                             // Now mark this plan as private so it doesn't get reported as the stop reason
5814                                             // after this point.
5815                                             if (thread_plan_sp)
5816                                                 thread_plan_sp->SetPrivate (orig_plan_private);
5817                                             return_value = eExpressionCompleted;
5818                                         }
5819                                         else
5820                                         {
5821                                             // Something restarted the target, so just wait for it to stop for real.
5822                                             if (stop_reason == eStopReasonBreakpoint)
5823                                             {
5824                                                 if (log)
5825                                                     log->Printf ("Process::RunThreadPlan() stopped for breakpoint: %s.", stop_info_sp->GetDescription());
5826                                                 return_value = eExpressionHitBreakpoint;
5827                                                 if (!options.DoesIgnoreBreakpoints())
5828                                                 {
5829                                                     event_to_broadcast_sp = event_sp;
5830                                                 }
5831                                             }
5832                                             else
5833                                             {
5834                                                 if (log)
5835                                                     log->PutCString ("Process::RunThreadPlan(): thread plan didn't successfully complete.");
5836                                                 if (!options.DoesUnwindOnError())
5837                                                     event_to_broadcast_sp = event_sp;
5838                                                 return_value = eExpressionInterrupted;
5839                                             }
5840                                         }
5841                                     }
5842                                 }
5843                             }
5844                             break;
5845 
5846                         case lldb::eStateRunning:
5847                             // This shouldn't really happen, but sometimes we do get two running events without an
5848                             // intervening stop, and in that case we should just go back to waiting for the stop.
5849                             do_resume = false;
5850                             keep_going = true;
5851                             handle_running_event = false;
5852                             break;
5853 
5854                         default:
5855                             if (log)
5856                                 log->Printf("Process::RunThreadPlan(): execution stopped with unexpected state: %s.", StateAsCString(stop_state));
5857 
5858                             if (stop_state == eStateExited)
5859                                 event_to_broadcast_sp = event_sp;
5860 
5861                             errors.Printf ("Execution stopped with unexpected state.\n");
5862                             return_value = eExpressionInterrupted;
5863                             break;
5864                         }
5865                     }
5866 
5867                     if (keep_going)
5868                         continue;
5869                     else
5870                         break;
5871                 }
5872                 else
5873                 {
5874                     if (log)
5875                         log->PutCString ("Process::RunThreadPlan(): got_event was true, but the event pointer was null.  How odd...");
5876                     return_value = eExpressionInterrupted;
5877                     break;
5878                 }
5879             }
5880             else
5881             {
5882                 // If we didn't get an event that means we've timed out...
5883                 // We will interrupt the process here.  Depending on what we were asked to do we will
5884                 // either exit, or try with all threads running for the same timeout.
5885 
5886                 if (log) {
5887                     if (options.GetTryAllThreads())
5888                     {
5889                         if (before_first_timeout)
5890                         {
5891                             if (timeout_usec != 0)
5892                             {
5893                                 log->Printf ("Process::RunThreadPlan(): Running function with one thread timeout timed out, "
5894                                              "running for %" PRIu32 " usec with all threads enabled.",
5895                                              all_threads_timeout_usec);
5896                             }
5897                             else
5898                             {
5899                                 log->Printf ("Process::RunThreadPlan(): Running function with one thread timeout timed out, "
5900                                              "running forever with all threads enabled.");
5901                             }
5902                         }
5903                         else
5904                             log->Printf ("Process::RunThreadPlan(): Restarting function with all threads enabled "
5905                                          "and timeout: %u timed out, abandoning execution.",
5906                                          timeout_usec);
5907                     }
5908                     else
5909                         log->Printf ("Process::RunThreadPlan(): Running function with timeout: %u timed out, "
5910                                      "abandoning execution.",
5911                                      timeout_usec);
5912                 }
5913 
5914                 // It is possible that between the time we issued the Halt, and we get around to calling Halt the target
5915                 // could have stopped.  That's fine, Halt will figure that out and send the appropriate Stopped event.
5916                 // BUT it is also possible that we stopped & restarted (e.g. hit a signal with "stop" set to false.)  In
5917                 // that case, we'll get the stopped & restarted event, and we should go back to waiting for the Halt's
5918                 // stopped event.  That's what this while loop does.
5919 
5920                 bool back_to_top = true;
5921                 uint32_t try_halt_again = 0;
5922                 bool do_halt = true;
5923                 const uint32_t num_retries = 5;
5924                 while (try_halt_again < num_retries)
5925                 {
5926                     Error halt_error;
5927                     if (do_halt)
5928                     {
5929                         if (log)
5930                             log->Printf ("Process::RunThreadPlan(): Running Halt.");
5931                         halt_error = Halt();
5932                     }
5933                     if (halt_error.Success())
5934                     {
5935                         if (log)
5936                             log->PutCString ("Process::RunThreadPlan(): Halt succeeded.");
5937 
5938                         real_timeout = TimeValue::Now();
5939                         real_timeout.OffsetWithMicroSeconds(500000);
5940 
5941                         got_event = listener.WaitForEvent(&real_timeout, event_sp);
5942 
5943                         if (got_event)
5944                         {
5945                             stop_state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
5946                             if (log)
5947                             {
5948                                 log->Printf ("Process::RunThreadPlan(): Stopped with event: %s", StateAsCString(stop_state));
5949                                 if (stop_state == lldb::eStateStopped
5950                                     && Process::ProcessEventData::GetInterruptedFromEvent(event_sp.get()))
5951                                     log->PutCString ("    Event was the Halt interruption event.");
5952                             }
5953 
5954                             if (stop_state == lldb::eStateStopped)
5955                             {
5956                                 // Between the time we initiated the Halt and the time we delivered it, the process could have
5957                                 // already finished its job.  Check that here:
5958 
5959                                 if (thread->IsThreadPlanDone (thread_plan_sp.get()))
5960                                 {
5961                                     if (log)
5962                                         log->PutCString ("Process::RunThreadPlan(): Even though we timed out, the call plan was done.  "
5963                                                      "Exiting wait loop.");
5964                                     return_value = eExpressionCompleted;
5965                                     back_to_top = false;
5966                                     break;
5967                                 }
5968 
5969                                 if (Process::ProcessEventData::GetRestartedFromEvent(event_sp.get()))
5970                                 {
5971                                     if (log)
5972                                         log->PutCString ("Process::RunThreadPlan(): Went to halt but got a restarted event, there must be an un-restarted stopped event so try again...  "
5973                                                      "Exiting wait loop.");
5974                                     try_halt_again++;
5975                                     do_halt = false;
5976                                     continue;
5977                                 }
5978 
5979                                 if (!options.GetTryAllThreads())
5980                                 {
5981                                     if (log)
5982                                         log->PutCString ("Process::RunThreadPlan(): try_all_threads was false, we stopped so now we're quitting.");
5983                                     return_value = eExpressionInterrupted;
5984                                     back_to_top = false;
5985                                     break;
5986                                 }
5987 
5988                                 if (before_first_timeout)
5989                                 {
5990                                     // Set all the other threads to run, and return to the top of the loop, which will continue;
5991                                     before_first_timeout = false;
5992                                     thread_plan_sp->SetStopOthers (false);
5993                                     if (log)
5994                                         log->PutCString ("Process::RunThreadPlan(): about to resume.");
5995 
5996                                     back_to_top = true;
5997                                     break;
5998                                 }
5999                                 else
6000                                 {
6001                                     // Running all threads failed, so return Interrupted.
6002                                     if (log)
6003                                         log->PutCString("Process::RunThreadPlan(): running all threads timed out.");
6004                                     return_value = eExpressionInterrupted;
6005                                     back_to_top = false;
6006                                     break;
6007                                 }
6008                             }
6009                         }
6010                         else
6011                         {   if (log)
6012                                 log->PutCString("Process::RunThreadPlan(): halt said it succeeded, but I got no event.  "
6013                                         "I'm getting out of here passing Interrupted.");
6014                             return_value = eExpressionInterrupted;
6015                             back_to_top = false;
6016                             break;
6017                         }
6018                     }
6019                     else
6020                     {
6021                         try_halt_again++;
6022                         continue;
6023                     }
6024                 }
6025 
6026                 if (!back_to_top || try_halt_again > num_retries)
6027                     break;
6028                 else
6029                     continue;
6030             }
6031         }  // END WAIT LOOP
6032 
6033         // If we had to start up a temporary private state thread to run this thread plan, shut it down now.
6034         if (backup_private_state_thread.IsJoinable())
6035         {
6036             StopPrivateStateThread();
6037             Error error;
6038             m_private_state_thread = backup_private_state_thread;
6039             if (stopper_base_plan_sp)
6040             {
6041                 thread->DiscardThreadPlansUpToPlan(stopper_base_plan_sp);
6042             }
6043             if (old_state != eStateInvalid)
6044                 m_public_state.SetValueNoLock(old_state);
6045         }
6046 
6047         // Restore the thread state if we are going to discard the plan execution.  There are three cases where this
6048         // could happen:
6049         // 1) The execution successfully completed
6050         // 2) We hit a breakpoint, and ignore_breakpoints was true
6051         // 3) We got some other error, and discard_on_error was true
6052         bool should_unwind = (return_value == eExpressionInterrupted && options.DoesUnwindOnError())
6053                              || (return_value == eExpressionHitBreakpoint && options.DoesIgnoreBreakpoints());
6054 
6055         if (return_value == eExpressionCompleted
6056             || should_unwind)
6057         {
6058             thread_plan_sp->RestoreThreadState();
6059         }
6060 
6061         // Now do some processing on the results of the run:
6062         if (return_value == eExpressionInterrupted || return_value == eExpressionHitBreakpoint)
6063         {
6064             if (log)
6065             {
6066                 StreamString s;
6067                 if (event_sp)
6068                     event_sp->Dump (&s);
6069                 else
6070                 {
6071                     log->PutCString ("Process::RunThreadPlan(): Stop event that interrupted us is NULL.");
6072                 }
6073 
6074                 StreamString ts;
6075 
6076                 const char *event_explanation = NULL;
6077 
6078                 do
6079                 {
6080                     if (!event_sp)
6081                     {
6082                         event_explanation = "<no event>";
6083                         break;
6084                     }
6085                     else if (event_sp->GetType() == eBroadcastBitInterrupt)
6086                     {
6087                         event_explanation = "<user interrupt>";
6088                         break;
6089                     }
6090                     else
6091                     {
6092                         const Process::ProcessEventData *event_data = Process::ProcessEventData::GetEventDataFromEvent (event_sp.get());
6093 
6094                         if (!event_data)
6095                         {
6096                             event_explanation = "<no event data>";
6097                             break;
6098                         }
6099 
6100                         Process *process = event_data->GetProcessSP().get();
6101 
6102                         if (!process)
6103                         {
6104                             event_explanation = "<no process>";
6105                             break;
6106                         }
6107 
6108                         ThreadList &thread_list = process->GetThreadList();
6109 
6110                         uint32_t num_threads = thread_list.GetSize();
6111                         uint32_t thread_index;
6112 
6113                         ts.Printf("<%u threads> ", num_threads);
6114 
6115                         for (thread_index = 0;
6116                              thread_index < num_threads;
6117                              ++thread_index)
6118                         {
6119                             Thread *thread = thread_list.GetThreadAtIndex(thread_index).get();
6120 
6121                             if (!thread)
6122                             {
6123                                 ts.Printf("<?> ");
6124                                 continue;
6125                             }
6126 
6127                             ts.Printf("<0x%4.4" PRIx64 " ", thread->GetID());
6128                             RegisterContext *register_context = thread->GetRegisterContext().get();
6129 
6130                             if (register_context)
6131                                 ts.Printf("[ip 0x%" PRIx64 "] ", register_context->GetPC());
6132                             else
6133                                 ts.Printf("[ip unknown] ");
6134 
6135                             lldb::StopInfoSP stop_info_sp = thread->GetStopInfo();
6136                             if (stop_info_sp)
6137                             {
6138                                 const char *stop_desc = stop_info_sp->GetDescription();
6139                                 if (stop_desc)
6140                                     ts.PutCString (stop_desc);
6141                             }
6142                             ts.Printf(">");
6143                         }
6144 
6145                         event_explanation = ts.GetData();
6146                     }
6147                 } while (0);
6148 
6149                 if (event_explanation)
6150                     log->Printf("Process::RunThreadPlan(): execution interrupted: %s %s", s.GetData(), event_explanation);
6151                 else
6152                     log->Printf("Process::RunThreadPlan(): execution interrupted: %s", s.GetData());
6153             }
6154 
6155             if (should_unwind)
6156             {
6157                 if (log)
6158                     log->Printf ("Process::RunThreadPlan: ExecutionInterrupted - discarding thread plans up to %p.",
6159                                  static_cast<void*>(thread_plan_sp.get()));
6160                 thread->DiscardThreadPlansUpToPlan (thread_plan_sp);
6161                 thread_plan_sp->SetPrivate (orig_plan_private);
6162             }
6163             else
6164             {
6165                 if (log)
6166                     log->Printf ("Process::RunThreadPlan: ExecutionInterrupted - for plan: %p not discarding.",
6167                                  static_cast<void*>(thread_plan_sp.get()));
6168             }
6169         }
6170         else if (return_value == eExpressionSetupError)
6171         {
6172             if (log)
6173                 log->PutCString("Process::RunThreadPlan(): execution set up error.");
6174 
6175             if (options.DoesUnwindOnError())
6176             {
6177                 thread->DiscardThreadPlansUpToPlan (thread_plan_sp);
6178                 thread_plan_sp->SetPrivate (orig_plan_private);
6179             }
6180         }
6181         else
6182         {
6183             if (thread->IsThreadPlanDone (thread_plan_sp.get()))
6184             {
6185                 if (log)
6186                     log->PutCString("Process::RunThreadPlan(): thread plan is done");
6187                 return_value = eExpressionCompleted;
6188             }
6189             else if (thread->WasThreadPlanDiscarded (thread_plan_sp.get()))
6190             {
6191                 if (log)
6192                     log->PutCString("Process::RunThreadPlan(): thread plan was discarded");
6193                 return_value = eExpressionDiscarded;
6194             }
6195             else
6196             {
6197                 if (log)
6198                     log->PutCString("Process::RunThreadPlan(): thread plan stopped in mid course");
6199                 if (options.DoesUnwindOnError() && thread_plan_sp)
6200                 {
6201                     if (log)
6202                         log->PutCString("Process::RunThreadPlan(): discarding thread plan 'cause unwind_on_error is set.");
6203                     thread->DiscardThreadPlansUpToPlan (thread_plan_sp);
6204                     thread_plan_sp->SetPrivate (orig_plan_private);
6205                 }
6206             }
6207         }
6208 
6209         // Thread we ran the function in may have gone away because we ran the target
6210         // Check that it's still there, and if it is put it back in the context.  Also restore the
6211         // frame in the context if it is still present.
6212         thread = GetThreadList().FindThreadByIndexID(thread_idx_id, true).get();
6213         if (thread)
6214         {
6215             exe_ctx.SetFrameSP (thread->GetFrameWithStackID (ctx_frame_id));
6216         }
6217 
6218         // Also restore the current process'es selected frame & thread, since this function calling may
6219         // be done behind the user's back.
6220 
6221         if (selected_tid != LLDB_INVALID_THREAD_ID)
6222         {
6223             if (GetThreadList().SetSelectedThreadByIndexID (selected_tid) && selected_stack_id.IsValid())
6224             {
6225                 // We were able to restore the selected thread, now restore the frame:
6226                 Mutex::Locker lock(GetThreadList().GetMutex());
6227                 StackFrameSP old_frame_sp = GetThreadList().GetSelectedThread()->GetFrameWithStackID(selected_stack_id);
6228                 if (old_frame_sp)
6229                     GetThreadList().GetSelectedThread()->SetSelectedFrame(old_frame_sp.get());
6230             }
6231         }
6232     }
6233 
6234     // If the process exited during the run of the thread plan, notify everyone.
6235 
6236     if (event_to_broadcast_sp)
6237     {
6238         if (log)
6239             log->PutCString("Process::RunThreadPlan(): rebroadcasting event.");
6240         BroadcastEvent(event_to_broadcast_sp);
6241     }
6242 
6243     return return_value;
6244 }
6245 
6246 const char *
6247 Process::ExecutionResultAsCString (ExpressionResults result)
6248 {
6249     const char *result_name;
6250 
6251     switch (result)
6252     {
6253         case eExpressionCompleted:
6254             result_name = "eExpressionCompleted";
6255             break;
6256         case eExpressionDiscarded:
6257             result_name = "eExpressionDiscarded";
6258             break;
6259         case eExpressionInterrupted:
6260             result_name = "eExpressionInterrupted";
6261             break;
6262         case eExpressionHitBreakpoint:
6263             result_name = "eExpressionHitBreakpoint";
6264             break;
6265         case eExpressionSetupError:
6266             result_name = "eExpressionSetupError";
6267             break;
6268         case eExpressionParseError:
6269             result_name = "eExpressionParseError";
6270             break;
6271         case eExpressionResultUnavailable:
6272             result_name = "eExpressionResultUnavailable";
6273             break;
6274         case eExpressionTimedOut:
6275             result_name = "eExpressionTimedOut";
6276             break;
6277         case eExpressionStoppedForDebug:
6278             result_name = "eExpressionStoppedForDebug";
6279             break;
6280     }
6281     return result_name;
6282 }
6283 
6284 void
6285 Process::GetStatus (Stream &strm)
6286 {
6287     const StateType state = GetState();
6288     if (StateIsStoppedState(state, false))
6289     {
6290         if (state == eStateExited)
6291         {
6292             int exit_status = GetExitStatus();
6293             const char *exit_description = GetExitDescription();
6294             strm.Printf ("Process %" PRIu64 " exited with status = %i (0x%8.8x) %s\n",
6295                           GetID(),
6296                           exit_status,
6297                           exit_status,
6298                           exit_description ? exit_description : "");
6299         }
6300         else
6301         {
6302             if (state == eStateConnected)
6303                 strm.Printf ("Connected to remote target.\n");
6304             else
6305                 strm.Printf ("Process %" PRIu64 " %s\n", GetID(), StateAsCString (state));
6306         }
6307     }
6308     else
6309     {
6310         strm.Printf ("Process %" PRIu64 " is running.\n", GetID());
6311     }
6312 }
6313 
6314 size_t
6315 Process::GetThreadStatus (Stream &strm,
6316                           bool only_threads_with_stop_reason,
6317                           uint32_t start_frame,
6318                           uint32_t num_frames,
6319                           uint32_t num_frames_with_source)
6320 {
6321     size_t num_thread_infos_dumped = 0;
6322 
6323     // You can't hold the thread list lock while calling Thread::GetStatus.  That very well might run code (e.g. if we need it
6324     // to get return values or arguments.)  For that to work the process has to be able to acquire it.  So instead copy the thread
6325     // ID's, and look them up one by one:
6326 
6327     uint32_t num_threads;
6328     std::vector<lldb::tid_t> thread_id_array;
6329     //Scope for thread list locker;
6330     {
6331         Mutex::Locker locker (GetThreadList().GetMutex());
6332         ThreadList &curr_thread_list = GetThreadList();
6333         num_threads = curr_thread_list.GetSize();
6334         uint32_t idx;
6335         thread_id_array.resize(num_threads);
6336         for (idx = 0; idx < num_threads; ++idx)
6337             thread_id_array[idx] = curr_thread_list.GetThreadAtIndex(idx)->GetID();
6338     }
6339 
6340     for (uint32_t i = 0; i < num_threads; i++)
6341     {
6342         ThreadSP thread_sp(GetThreadList().FindThreadByID(thread_id_array[i]));
6343         if (thread_sp)
6344         {
6345             if (only_threads_with_stop_reason)
6346             {
6347                 StopInfoSP stop_info_sp = thread_sp->GetStopInfo();
6348                 if (stop_info_sp.get() == NULL || !stop_info_sp->IsValid())
6349                     continue;
6350             }
6351             thread_sp->GetStatus (strm,
6352                                start_frame,
6353                                num_frames,
6354                                num_frames_with_source);
6355             ++num_thread_infos_dumped;
6356         }
6357         else
6358         {
6359             Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_PROCESS));
6360             if (log)
6361                 log->Printf("Process::GetThreadStatus - thread 0x" PRIu64 " vanished while running Thread::GetStatus.");
6362 
6363         }
6364     }
6365     return num_thread_infos_dumped;
6366 }
6367 
6368 void
6369 Process::AddInvalidMemoryRegion (const LoadRange &region)
6370 {
6371     m_memory_cache.AddInvalidRange(region.GetRangeBase(), region.GetByteSize());
6372 }
6373 
6374 bool
6375 Process::RemoveInvalidMemoryRange (const LoadRange &region)
6376 {
6377     return m_memory_cache.RemoveInvalidRange(region.GetRangeBase(), region.GetByteSize());
6378 }
6379 
6380 void
6381 Process::AddPreResumeAction (PreResumeActionCallback callback, void *baton)
6382 {
6383     m_pre_resume_actions.push_back(PreResumeCallbackAndBaton (callback, baton));
6384 }
6385 
6386 bool
6387 Process::RunPreResumeActions ()
6388 {
6389     bool result = true;
6390     while (!m_pre_resume_actions.empty())
6391     {
6392         struct PreResumeCallbackAndBaton action = m_pre_resume_actions.back();
6393         m_pre_resume_actions.pop_back();
6394         bool this_result = action.callback (action.baton);
6395         if (result == true)
6396             result = this_result;
6397     }
6398     return result;
6399 }
6400 
6401 void
6402 Process::ClearPreResumeActions ()
6403 {
6404     m_pre_resume_actions.clear();
6405 }
6406 
6407 ProcessRunLock &
6408 Process::GetRunLock()
6409 {
6410     if (m_private_state_thread.EqualsThread(Host::GetCurrentThread()))
6411         return m_private_run_lock;
6412     else
6413         return m_public_run_lock;
6414 }
6415 
6416 void
6417 Process::Flush ()
6418 {
6419     m_thread_list.Flush();
6420     m_extended_thread_list.Flush();
6421     m_extended_thread_stop_id =  0;
6422     m_queue_list.Clear();
6423     m_queue_list_stop_id = 0;
6424 }
6425 
6426 void
6427 Process::DidExec ()
6428 {
6429     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
6430     if (log)
6431         log->Printf ("Process::%s()", __FUNCTION__);
6432 
6433     Target &target = GetTarget();
6434     target.CleanupProcess ();
6435     target.ClearModules(false);
6436     m_dynamic_checkers_ap.reset();
6437     m_abi_sp.reset();
6438     m_system_runtime_ap.reset();
6439     m_os_ap.reset();
6440     m_dyld_ap.reset();
6441     m_jit_loaders_ap.reset();
6442     m_image_tokens.clear();
6443     m_allocated_memory_cache.Clear();
6444     m_language_runtimes.clear();
6445     m_instrumentation_runtimes.clear();
6446     m_thread_list.DiscardThreadPlans();
6447     m_memory_cache.Clear(true);
6448     m_stop_info_override_callback = NULL;
6449     DoDidExec();
6450     CompleteAttach ();
6451     // Flush the process (threads and all stack frames) after running CompleteAttach()
6452     // in case the dynamic loader loaded things in new locations.
6453     Flush();
6454 
6455     // After we figure out what was loaded/unloaded in CompleteAttach,
6456     // we need to let the target know so it can do any cleanup it needs to.
6457     target.DidExec();
6458 }
6459 
6460 addr_t
6461 Process::ResolveIndirectFunction(const Address *address, Error &error)
6462 {
6463     if (address == nullptr)
6464     {
6465         error.SetErrorString("Invalid address argument");
6466         return LLDB_INVALID_ADDRESS;
6467     }
6468 
6469     addr_t function_addr = LLDB_INVALID_ADDRESS;
6470 
6471     addr_t addr = address->GetLoadAddress(&GetTarget());
6472     std::map<addr_t,addr_t>::const_iterator iter = m_resolved_indirect_addresses.find(addr);
6473     if (iter != m_resolved_indirect_addresses.end())
6474     {
6475         function_addr = (*iter).second;
6476     }
6477     else
6478     {
6479         if (!InferiorCall(this, address, function_addr))
6480         {
6481             Symbol *symbol = address->CalculateSymbolContextSymbol();
6482             error.SetErrorStringWithFormat ("Unable to call resolver for indirect function %s",
6483                                           symbol ? symbol->GetName().AsCString() : "<UNKNOWN>");
6484             function_addr = LLDB_INVALID_ADDRESS;
6485         }
6486         else
6487         {
6488             m_resolved_indirect_addresses.insert(std::pair<addr_t, addr_t>(addr, function_addr));
6489         }
6490     }
6491     return function_addr;
6492 }
6493 
6494 void
6495 Process::ModulesDidLoad (ModuleList &module_list)
6496 {
6497     SystemRuntime *sys_runtime = GetSystemRuntime();
6498     if (sys_runtime)
6499     {
6500         sys_runtime->ModulesDidLoad (module_list);
6501     }
6502 
6503     GetJITLoaders().ModulesDidLoad (module_list);
6504 
6505     // Give runtimes a chance to be created.
6506     InstrumentationRuntime::ModulesDidLoad(module_list, this, m_instrumentation_runtimes);
6507 
6508     // Tell runtimes about new modules.
6509     for (auto pos = m_instrumentation_runtimes.begin(); pos != m_instrumentation_runtimes.end(); ++pos)
6510     {
6511         InstrumentationRuntimeSP runtime = pos->second;
6512         runtime->ModulesDidLoad(module_list);
6513     }
6514 
6515     // Let any language runtimes we have already created know
6516     // about the modules that loaded.
6517 
6518     // Iterate over a copy of this language runtime list in case
6519     // the language runtime ModulesDidLoad somehow causes the language
6520     // riuntime to be unloaded.
6521     LanguageRuntimeCollection language_runtimes(m_language_runtimes);
6522     for (const auto &pair: language_runtimes)
6523     {
6524         // We must check language_runtime_sp to make sure it is not
6525         // NULL as we might cache the fact that we didn't have a
6526         // language runtime for a language.
6527         LanguageRuntimeSP language_runtime_sp = pair.second;
6528         if (language_runtime_sp)
6529             language_runtime_sp->ModulesDidLoad(module_list);
6530     }
6531 }
6532 
6533 ThreadCollectionSP
6534 Process::GetHistoryThreads(lldb::addr_t addr)
6535 {
6536     ThreadCollectionSP threads;
6537 
6538     const MemoryHistorySP &memory_history = MemoryHistory::FindPlugin(shared_from_this());
6539 
6540     if (! memory_history.get()) {
6541         return threads;
6542     }
6543 
6544     threads.reset(new ThreadCollection(memory_history->GetHistoryThreads(addr)));
6545 
6546     return threads;
6547 }
6548 
6549 InstrumentationRuntimeSP
6550 Process::GetInstrumentationRuntime(lldb::InstrumentationRuntimeType type)
6551 {
6552     InstrumentationRuntimeCollection::iterator pos;
6553     pos = m_instrumentation_runtimes.find (type);
6554     if (pos == m_instrumentation_runtimes.end())
6555     {
6556         return InstrumentationRuntimeSP();
6557     }
6558     else
6559         return (*pos).second;
6560 }
6561 
6562 bool
6563 Process::GetModuleSpec(const FileSpec& module_file_spec,
6564                        const ArchSpec& arch,
6565                        ModuleSpec& module_spec)
6566 {
6567     module_spec.Clear();
6568     return false;
6569 }
6570