xref: /llvm-project/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp (revision 3be0a3a173ccc9f5d32394fdec2230a1f26b13a3)
1 //===-- NativeProcessLinux.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 "NativeProcessLinux.h"
11 
12 // C Includes
13 #include <errno.h>
14 #include <string.h>
15 #include <stdint.h>
16 #include <unistd.h>
17 
18 // C++ Includes
19 #include <fstream>
20 #include <mutex>
21 #include <sstream>
22 #include <string>
23 #include <unordered_map>
24 
25 // Other libraries and framework includes
26 #include "lldb/Core/EmulateInstruction.h"
27 #include "lldb/Core/Error.h"
28 #include "lldb/Core/ModuleSpec.h"
29 #include "lldb/Core/RegisterValue.h"
30 #include "lldb/Core/State.h"
31 #include "lldb/Host/Host.h"
32 #include "lldb/Host/ThreadLauncher.h"
33 #include "lldb/Host/common/NativeBreakpoint.h"
34 #include "lldb/Host/common/NativeRegisterContext.h"
35 #include "lldb/Symbol/ObjectFile.h"
36 #include "lldb/Target/Process.h"
37 #include "lldb/Target/ProcessLaunchInfo.h"
38 #include "lldb/Target/Target.h"
39 #include "lldb/Utility/LLDBAssert.h"
40 #include "lldb/Utility/PseudoTerminal.h"
41 #include "lldb/Utility/StringExtractor.h"
42 
43 #include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
44 #include "NativeThreadLinux.h"
45 #include "ProcFileReader.h"
46 #include "Procfs.h"
47 
48 // System includes - They have to be included after framework includes because they define some
49 // macros which collide with variable names in other modules
50 #include <linux/unistd.h>
51 #include <sys/socket.h>
52 
53 #include <sys/syscall.h>
54 #include <sys/types.h>
55 #include <sys/user.h>
56 #include <sys/wait.h>
57 
58 #include "lldb/Host/linux/Personality.h"
59 #include "lldb/Host/linux/Ptrace.h"
60 #include "lldb/Host/linux/Uio.h"
61 #include "lldb/Host/android/Android.h"
62 
63 #define LLDB_PERSONALITY_GET_CURRENT_SETTINGS  0xffffffff
64 
65 // Support hardware breakpoints in case it has not been defined
66 #ifndef TRAP_HWBKPT
67   #define TRAP_HWBKPT 4
68 #endif
69 
70 using namespace lldb;
71 using namespace lldb_private;
72 using namespace lldb_private::process_linux;
73 using namespace llvm;
74 
75 // Private bits we only need internally.
76 
77 static bool ProcessVmReadvSupported()
78 {
79     static bool is_supported;
80     static std::once_flag flag;
81 
82     std::call_once(flag, [] {
83         Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
84 
85         uint32_t source = 0x47424742;
86         uint32_t dest = 0;
87 
88         struct iovec local, remote;
89         remote.iov_base = &source;
90         local.iov_base = &dest;
91         remote.iov_len = local.iov_len = sizeof source;
92 
93         // We shall try if cross-process-memory reads work by attempting to read a value from our own process.
94         ssize_t res = process_vm_readv(getpid(), &local, 1, &remote, 1, 0);
95         is_supported = (res == sizeof(source) && source == dest);
96         if (log)
97         {
98             if (is_supported)
99                 log->Printf("%s: Detected kernel support for process_vm_readv syscall. Fast memory reads enabled.",
100                         __FUNCTION__);
101             else
102                 log->Printf("%s: syscall process_vm_readv failed (error: %s). Fast memory reads disabled.",
103                         __FUNCTION__, strerror(errno));
104         }
105     });
106 
107     return is_supported;
108 }
109 
110 namespace
111 {
112 Error
113 ResolveProcessArchitecture(lldb::pid_t pid, ArchSpec &arch)
114 {
115     // Grab process info for the running process.
116     ProcessInstanceInfo process_info;
117     if (!Host::GetProcessInfo(pid, process_info))
118         return Error("failed to get process info");
119 
120     // Resolve the executable module.
121     ModuleSpecList module_specs;
122     if (!ObjectFile::GetModuleSpecifications(process_info.GetExecutableFile(), 0, 0, module_specs))
123         return Error("failed to get module specifications");
124     assert(module_specs.GetSize() == 1);
125 
126     arch = module_specs.GetModuleSpecRefAtIndex(0).GetArchitecture();
127     if (arch.IsValid())
128         return Error();
129     else
130         return Error("failed to retrieve a valid architecture from the exe module");
131 }
132 
133 // Used to notify the parent about which part of the launch sequence failed.
134 enum LaunchCallSpecifier
135 {
136     ePtraceFailed,
137     eDupStdinFailed,
138     eDupStdoutFailed,
139     eDupStderrFailed,
140     eChdirFailed,
141     eExecFailed,
142     eSetGidFailed,
143     eSetSigMaskFailed,
144     eLaunchCallMax = eSetSigMaskFailed
145 };
146 
147 static uint8_t LLVM_ATTRIBUTE_NORETURN
148 ExitChildAbnormally(LaunchCallSpecifier spec)
149 {
150     static_assert(eLaunchCallMax < 0x8, "Have more launch calls than we are able to represent");
151     // This may truncate the topmost bits of the errno because the exit code is only 8 bits wide.
152     // However, it should still give us a pretty good indication of what went wrong. (And the
153     // most common errors have small numbers anyway).
154     _exit(unsigned(spec) | (errno << 3));
155 }
156 
157 // The second member is the errno (or its 5 lowermost bits anyway).
158 inline std::pair<LaunchCallSpecifier, uint8_t>
159 DecodeChildExitCode(int exit_code)
160 {
161     return std::make_pair(LaunchCallSpecifier(exit_code & 0x7), exit_code >> 3);
162 }
163 
164     void
165     DisplayBytes (StreamString &s, void *bytes, uint32_t count)
166     {
167         uint8_t *ptr = (uint8_t *)bytes;
168         const uint32_t loop_count = std::min<uint32_t>(DEBUG_PTRACE_MAXBYTES, count);
169         for(uint32_t i=0; i<loop_count; i++)
170         {
171             s.Printf ("[%x]", *ptr);
172             ptr++;
173         }
174     }
175 
176     void
177     PtraceDisplayBytes(int &req, void *data, size_t data_size)
178     {
179         StreamString buf;
180         Log *verbose_log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (
181                     POSIX_LOG_PTRACE | POSIX_LOG_VERBOSE));
182 
183         if (verbose_log)
184         {
185             switch(req)
186             {
187             case PTRACE_POKETEXT:
188             {
189                 DisplayBytes(buf, &data, 8);
190                 verbose_log->Printf("PTRACE_POKETEXT %s", buf.GetData());
191                 break;
192             }
193             case PTRACE_POKEDATA:
194             {
195                 DisplayBytes(buf, &data, 8);
196                 verbose_log->Printf("PTRACE_POKEDATA %s", buf.GetData());
197                 break;
198             }
199             case PTRACE_POKEUSER:
200             {
201                 DisplayBytes(buf, &data, 8);
202                 verbose_log->Printf("PTRACE_POKEUSER %s", buf.GetData());
203                 break;
204             }
205             case PTRACE_SETREGS:
206             {
207                 DisplayBytes(buf, data, data_size);
208                 verbose_log->Printf("PTRACE_SETREGS %s", buf.GetData());
209                 break;
210             }
211             case PTRACE_SETFPREGS:
212             {
213                 DisplayBytes(buf, data, data_size);
214                 verbose_log->Printf("PTRACE_SETFPREGS %s", buf.GetData());
215                 break;
216             }
217             case PTRACE_SETSIGINFO:
218             {
219                 DisplayBytes(buf, data, sizeof(siginfo_t));
220                 verbose_log->Printf("PTRACE_SETSIGINFO %s", buf.GetData());
221                 break;
222             }
223             case PTRACE_SETREGSET:
224             {
225                 // Extract iov_base from data, which is a pointer to the struct IOVEC
226                 DisplayBytes(buf, *(void **)data, data_size);
227                 verbose_log->Printf("PTRACE_SETREGSET %s", buf.GetData());
228                 break;
229             }
230             default:
231             {
232             }
233             }
234         }
235     }
236 
237     static constexpr unsigned k_ptrace_word_size = sizeof(void*);
238     static_assert(sizeof(long) >= k_ptrace_word_size, "Size of long must be larger than ptrace word size");
239 } // end of anonymous namespace
240 
241 // Simple helper function to ensure flags are enabled on the given file
242 // descriptor.
243 static Error
244 EnsureFDFlags(int fd, int flags)
245 {
246     Error error;
247 
248     int status = fcntl(fd, F_GETFL);
249     if (status == -1)
250     {
251         error.SetErrorToErrno();
252         return error;
253     }
254 
255     if (fcntl(fd, F_SETFL, status | flags) == -1)
256     {
257         error.SetErrorToErrno();
258         return error;
259     }
260 
261     return error;
262 }
263 
264 NativeProcessLinux::LaunchArgs::LaunchArgs(char const **argv, char const **envp, const FileSpec &stdin_file_spec,
265                                            const FileSpec &stdout_file_spec, const FileSpec &stderr_file_spec,
266                                            const FileSpec &working_dir, const ProcessLaunchInfo &launch_info)
267     : m_argv(argv),
268       m_envp(envp),
269       m_stdin_file_spec(stdin_file_spec),
270       m_stdout_file_spec(stdout_file_spec),
271       m_stderr_file_spec(stderr_file_spec),
272       m_working_dir(working_dir),
273       m_launch_info(launch_info)
274 {
275 }
276 
277 NativeProcessLinux::LaunchArgs::~LaunchArgs()
278 { }
279 
280 // -----------------------------------------------------------------------------
281 // Public Static Methods
282 // -----------------------------------------------------------------------------
283 
284 Error
285 NativeProcessProtocol::Launch (
286     ProcessLaunchInfo &launch_info,
287     NativeProcessProtocol::NativeDelegate &native_delegate,
288     MainLoop &mainloop,
289     NativeProcessProtocolSP &native_process_sp)
290 {
291     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
292 
293     Error error;
294 
295     // Verify the working directory is valid if one was specified.
296     FileSpec working_dir{launch_info.GetWorkingDirectory()};
297     if (working_dir &&
298             (!working_dir.ResolvePath() ||
299              working_dir.GetFileType() != FileSpec::eFileTypeDirectory))
300     {
301         error.SetErrorStringWithFormat ("No such file or directory: %s",
302                 working_dir.GetCString());
303         return error;
304     }
305 
306     const FileAction *file_action;
307 
308     // Default of empty will mean to use existing open file descriptors.
309     FileSpec stdin_file_spec{};
310     FileSpec stdout_file_spec{};
311     FileSpec stderr_file_spec{};
312 
313     file_action = launch_info.GetFileActionForFD (STDIN_FILENO);
314     if (file_action)
315         stdin_file_spec = file_action->GetFileSpec();
316 
317     file_action = launch_info.GetFileActionForFD (STDOUT_FILENO);
318     if (file_action)
319         stdout_file_spec = file_action->GetFileSpec();
320 
321     file_action = launch_info.GetFileActionForFD (STDERR_FILENO);
322     if (file_action)
323         stderr_file_spec = file_action->GetFileSpec();
324 
325     if (log)
326     {
327         if (stdin_file_spec)
328             log->Printf ("NativeProcessLinux::%s setting STDIN to '%s'",
329                     __FUNCTION__, stdin_file_spec.GetCString());
330         else
331             log->Printf ("NativeProcessLinux::%s leaving STDIN as is", __FUNCTION__);
332 
333         if (stdout_file_spec)
334             log->Printf ("NativeProcessLinux::%s setting STDOUT to '%s'",
335                     __FUNCTION__, stdout_file_spec.GetCString());
336         else
337             log->Printf ("NativeProcessLinux::%s leaving STDOUT as is", __FUNCTION__);
338 
339         if (stderr_file_spec)
340             log->Printf ("NativeProcessLinux::%s setting STDERR to '%s'",
341                     __FUNCTION__, stderr_file_spec.GetCString());
342         else
343             log->Printf ("NativeProcessLinux::%s leaving STDERR as is", __FUNCTION__);
344     }
345 
346     // Create the NativeProcessLinux in launch mode.
347     native_process_sp.reset (new NativeProcessLinux ());
348 
349     if (log)
350     {
351         int i = 0;
352         for (const char **args = launch_info.GetArguments ().GetConstArgumentVector (); *args; ++args, ++i)
353         {
354             log->Printf ("NativeProcessLinux::%s arg %d: \"%s\"", __FUNCTION__, i, *args ? *args : "nullptr");
355             ++i;
356         }
357     }
358 
359     if (!native_process_sp->RegisterNativeDelegate (native_delegate))
360     {
361         native_process_sp.reset ();
362         error.SetErrorStringWithFormat ("failed to register the native delegate");
363         return error;
364     }
365 
366     std::static_pointer_cast<NativeProcessLinux> (native_process_sp)->LaunchInferior (
367             mainloop,
368             launch_info.GetArguments ().GetConstArgumentVector (),
369             launch_info.GetEnvironmentEntries ().GetConstArgumentVector (),
370             stdin_file_spec,
371             stdout_file_spec,
372             stderr_file_spec,
373             working_dir,
374             launch_info,
375             error);
376 
377     if (error.Fail ())
378     {
379         native_process_sp.reset ();
380         if (log)
381             log->Printf ("NativeProcessLinux::%s failed to launch process: %s", __FUNCTION__, error.AsCString ());
382         return error;
383     }
384 
385     launch_info.SetProcessID (native_process_sp->GetID ());
386 
387     return error;
388 }
389 
390 Error
391 NativeProcessProtocol::Attach (
392     lldb::pid_t pid,
393     NativeProcessProtocol::NativeDelegate &native_delegate,
394     MainLoop &mainloop,
395     NativeProcessProtocolSP &native_process_sp)
396 {
397     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
398     if (log && log->GetMask ().Test (POSIX_LOG_VERBOSE))
399         log->Printf ("NativeProcessLinux::%s(pid = %" PRIi64 ")", __FUNCTION__, pid);
400 
401     // Retrieve the architecture for the running process.
402     ArchSpec process_arch;
403     Error error = ResolveProcessArchitecture(pid, process_arch);
404     if (!error.Success ())
405         return error;
406 
407     std::shared_ptr<NativeProcessLinux> native_process_linux_sp (new NativeProcessLinux ());
408 
409     if (!native_process_linux_sp->RegisterNativeDelegate (native_delegate))
410     {
411         error.SetErrorStringWithFormat ("failed to register the native delegate");
412         return error;
413     }
414 
415     native_process_linux_sp->AttachToInferior (mainloop, pid, error);
416     if (!error.Success ())
417         return error;
418 
419     native_process_sp = native_process_linux_sp;
420     return error;
421 }
422 
423 // -----------------------------------------------------------------------------
424 // Public Instance Methods
425 // -----------------------------------------------------------------------------
426 
427 NativeProcessLinux::NativeProcessLinux () :
428     NativeProcessProtocol (LLDB_INVALID_PROCESS_ID),
429     m_arch (),
430     m_supports_mem_region (eLazyBoolCalculate),
431     m_mem_region_cache (),
432     m_pending_notification_tid(LLDB_INVALID_THREAD_ID)
433 {
434 }
435 
436 void
437 NativeProcessLinux::LaunchInferior (
438     MainLoop &mainloop,
439     const char *argv[],
440     const char *envp[],
441     const FileSpec &stdin_file_spec,
442     const FileSpec &stdout_file_spec,
443     const FileSpec &stderr_file_spec,
444     const FileSpec &working_dir,
445     const ProcessLaunchInfo &launch_info,
446     Error &error)
447 {
448     m_sigchld_handle = mainloop.RegisterSignal(SIGCHLD,
449             [this] (MainLoopBase &) { SigchldHandler(); }, error);
450     if (! m_sigchld_handle)
451         return;
452 
453     SetState (eStateLaunching);
454 
455     std::unique_ptr<LaunchArgs> args(
456         new LaunchArgs(argv, envp, stdin_file_spec, stdout_file_spec, stderr_file_spec, working_dir, launch_info));
457 
458     Launch(args.get(), error);
459 }
460 
461 void
462 NativeProcessLinux::AttachToInferior (MainLoop &mainloop, lldb::pid_t pid, Error &error)
463 {
464     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
465     if (log)
466         log->Printf ("NativeProcessLinux::%s (pid = %" PRIi64 ")", __FUNCTION__, pid);
467 
468     m_sigchld_handle = mainloop.RegisterSignal(SIGCHLD,
469             [this] (MainLoopBase &) { SigchldHandler(); }, error);
470     if (! m_sigchld_handle)
471         return;
472 
473     error = ResolveProcessArchitecture(pid, m_arch);
474     if (!error.Success())
475         return;
476 
477     // Set the architecture to the exe architecture.
478     if (log)
479         log->Printf ("NativeProcessLinux::%s (pid = %" PRIi64 ") detected architecture %s", __FUNCTION__, pid, m_arch.GetArchitectureName ());
480 
481     m_pid = pid;
482     SetState(eStateAttaching);
483 
484     Attach(pid, error);
485 }
486 
487 void
488 NativeProcessLinux::ChildFunc(const LaunchArgs &args)
489 {
490     // Start tracing this child that is about to exec.
491     if (ptrace(PTRACE_TRACEME, 0, nullptr, nullptr) == -1)
492         ExitChildAbnormally(ePtraceFailed);
493 
494     // Do not inherit setgid powers.
495     if (setgid(getgid()) != 0)
496         ExitChildAbnormally(eSetGidFailed);
497 
498     // Attempt to have our own process group.
499     if (setpgid(0, 0) != 0)
500     {
501         // FIXME log that this failed. This is common.
502         // Don't allow this to prevent an inferior exec.
503     }
504 
505     // Dup file descriptors if needed.
506     if (args.m_stdin_file_spec)
507         if (!DupDescriptor(args.m_stdin_file_spec, STDIN_FILENO, O_RDONLY))
508             ExitChildAbnormally(eDupStdinFailed);
509 
510     if (args.m_stdout_file_spec)
511         if (!DupDescriptor(args.m_stdout_file_spec, STDOUT_FILENO, O_WRONLY | O_CREAT | O_TRUNC))
512             ExitChildAbnormally(eDupStdoutFailed);
513 
514     if (args.m_stderr_file_spec)
515         if (!DupDescriptor(args.m_stderr_file_spec, STDERR_FILENO, O_WRONLY | O_CREAT | O_TRUNC))
516             ExitChildAbnormally(eDupStderrFailed);
517 
518     // Close everything besides stdin, stdout, and stderr that has no file
519     // action to avoid leaking
520     for (int fd = 3; fd < sysconf(_SC_OPEN_MAX); ++fd)
521         if (!args.m_launch_info.GetFileActionForFD(fd))
522             close(fd);
523 
524     // Change working directory
525     if (args.m_working_dir && 0 != ::chdir(args.m_working_dir.GetCString()))
526         ExitChildAbnormally(eChdirFailed);
527 
528     // Disable ASLR if requested.
529     if (args.m_launch_info.GetFlags().Test(lldb::eLaunchFlagDisableASLR))
530     {
531         const int old_personality = personality(LLDB_PERSONALITY_GET_CURRENT_SETTINGS);
532         if (old_personality == -1)
533         {
534             // Can't retrieve Linux personality.  Cannot disable ASLR.
535         }
536         else
537         {
538             const int new_personality = personality(ADDR_NO_RANDOMIZE | old_personality);
539             if (new_personality == -1)
540             {
541                 // Disabling ASLR failed.
542             }
543             else
544             {
545                 // Disabling ASLR succeeded.
546             }
547         }
548     }
549 
550     // Clear the signal mask to prevent the child from being affected by
551     // any masking done by the parent.
552     sigset_t set;
553     if (sigemptyset(&set) != 0 || pthread_sigmask(SIG_SETMASK, &set, nullptr) != 0)
554         ExitChildAbnormally(eSetSigMaskFailed);
555 
556     // Propagate the environment if one is not supplied.
557     const char **envp = args.m_envp;
558     if (envp == NULL || envp[0] == NULL)
559         envp = const_cast<const char **>(environ);
560 
561     // Execute.  We should never return...
562     execve(args.m_argv[0], const_cast<char *const *>(args.m_argv), const_cast<char *const *>(envp));
563 
564     if (errno == ETXTBSY)
565     {
566         // On android M and earlier we can get this error because the adb deamon can hold a write
567         // handle on the executable even after it has finished uploading it. This state lasts
568         // only a short time and happens only when there are many concurrent adb commands being
569         // issued, such as when running the test suite. (The file remains open when someone does
570         // an "adb shell" command in the fork() child before it has had a chance to exec.) Since
571         // this state should clear up quickly, wait a while and then give it one more go.
572         usleep(50000);
573         execve(args.m_argv[0], const_cast<char *const *>(args.m_argv), const_cast<char *const *>(envp));
574     }
575 
576     // ...unless exec fails.  In which case we definitely need to end the child here.
577     ExitChildAbnormally(eExecFailed);
578 }
579 
580 ::pid_t
581 NativeProcessLinux::Launch(LaunchArgs *args, Error &error)
582 {
583     assert (args && "null args");
584 
585     lldb_utility::PseudoTerminal terminal;
586     const size_t err_len = 1024;
587     char err_str[err_len];
588     lldb::pid_t pid;
589 
590     if ((pid = terminal.Fork(err_str, err_len)) == static_cast<lldb::pid_t> (-1))
591     {
592         error.SetErrorToGenericError();
593         error.SetErrorStringWithFormat("Process fork failed: %s", err_str);
594         return -1;
595     }
596 
597     // Child process.
598     if (pid == 0)
599     {
600         // First, make sure we disable all logging. If we are logging to stdout, our logs can be
601         // mistaken for inferior output.
602         Log::DisableAllLogChannels(nullptr);
603 
604         // terminal has already dupped the tty descriptors to stdin/out/err.
605         // This closes original fd from which they were copied (and avoids
606         // leaking descriptors to the debugged process.
607         terminal.CloseSlaveFileDescriptor();
608 
609         ChildFunc(*args);
610     }
611 
612     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
613 
614     // Wait for the child process to trap on its call to execve.
615     ::pid_t wpid;
616     int status;
617     if ((wpid = waitpid(pid, &status, 0)) < 0)
618     {
619         error.SetErrorToErrno();
620         if (log)
621             log->Printf ("NativeProcessLinux::%s waitpid for inferior failed with %s",
622                     __FUNCTION__, error.AsCString ());
623 
624         // Mark the inferior as invalid.
625         // FIXME this could really use a new state - eStateLaunchFailure.  For now, using eStateInvalid.
626         SetState (StateType::eStateInvalid);
627 
628         return -1;
629     }
630     else if (WIFEXITED(status))
631     {
632         auto p = DecodeChildExitCode(WEXITSTATUS(status));
633         Error child_error(p.second, eErrorTypePOSIX);
634         const char *failure_reason;
635         switch (p.first)
636         {
637             case ePtraceFailed:
638                 failure_reason = "Child ptrace failed";
639                 break;
640             case eDupStdinFailed:
641                 failure_reason = "Child open stdin failed";
642                 break;
643             case eDupStdoutFailed:
644                 failure_reason = "Child open stdout failed";
645                 break;
646             case eDupStderrFailed:
647                 failure_reason = "Child open stderr failed";
648                 break;
649             case eChdirFailed:
650                 failure_reason = "Child failed to set working directory";
651                 break;
652             case eExecFailed:
653                 failure_reason = "Child exec failed";
654                 break;
655             case eSetGidFailed:
656                 failure_reason = "Child setgid failed";
657                 break;
658             case eSetSigMaskFailed:
659                 failure_reason = "Child failed to set signal mask";
660                 break;
661         }
662         error.SetErrorStringWithFormat("%s: %d - %s (error code truncated)", failure_reason, child_error.GetError(), child_error.AsCString());
663 
664         if (log)
665         {
666             log->Printf ("NativeProcessLinux::%s inferior exited with status %d before issuing a STOP",
667                     __FUNCTION__,
668                     WEXITSTATUS(status));
669         }
670 
671         // Mark the inferior as invalid.
672         // FIXME this could really use a new state - eStateLaunchFailure.  For now, using eStateInvalid.
673         SetState (StateType::eStateInvalid);
674 
675         return -1;
676     }
677     assert(WIFSTOPPED(status) && (wpid == static_cast< ::pid_t> (pid)) &&
678            "Could not sync with inferior process.");
679 
680     if (log)
681         log->Printf ("NativeProcessLinux::%s inferior started, now in stopped state", __FUNCTION__);
682 
683     error = SetDefaultPtraceOpts(pid);
684     if (error.Fail())
685     {
686         if (log)
687             log->Printf ("NativeProcessLinux::%s inferior failed to set default ptrace options: %s",
688                     __FUNCTION__, error.AsCString ());
689 
690         // Mark the inferior as invalid.
691         // FIXME this could really use a new state - eStateLaunchFailure.  For now, using eStateInvalid.
692         SetState (StateType::eStateInvalid);
693 
694         return -1;
695     }
696 
697     // Release the master terminal descriptor and pass it off to the
698     // NativeProcessLinux instance.  Similarly stash the inferior pid.
699     m_terminal_fd = terminal.ReleaseMasterFileDescriptor();
700     m_pid = pid;
701 
702     // Set the terminal fd to be in non blocking mode (it simplifies the
703     // implementation of ProcessLinux::GetSTDOUT to have a non-blocking
704     // descriptor to read from).
705     error = EnsureFDFlags(m_terminal_fd, O_NONBLOCK);
706     if (error.Fail())
707     {
708         if (log)
709             log->Printf ("NativeProcessLinux::%s inferior EnsureFDFlags failed for ensuring terminal O_NONBLOCK setting: %s",
710                     __FUNCTION__, error.AsCString ());
711 
712         // Mark the inferior as invalid.
713         // FIXME this could really use a new state - eStateLaunchFailure.  For now, using eStateInvalid.
714         SetState (StateType::eStateInvalid);
715 
716         return -1;
717     }
718 
719     if (log)
720         log->Printf ("NativeProcessLinux::%s() adding pid = %" PRIu64, __FUNCTION__, pid);
721 
722     ResolveProcessArchitecture(m_pid, m_arch);
723     NativeThreadLinuxSP thread_sp = AddThread(pid);
724     assert (thread_sp && "AddThread() returned a nullptr thread");
725     thread_sp->SetStoppedBySignal(SIGSTOP);
726     ThreadWasCreated(*thread_sp);
727 
728     // Let our process instance know the thread has stopped.
729     SetCurrentThreadID (thread_sp->GetID ());
730     SetState (StateType::eStateStopped);
731 
732     if (log)
733     {
734         if (error.Success ())
735         {
736             log->Printf ("NativeProcessLinux::%s inferior launching succeeded", __FUNCTION__);
737         }
738         else
739         {
740             log->Printf ("NativeProcessLinux::%s inferior launching failed: %s",
741                 __FUNCTION__, error.AsCString ());
742             return -1;
743         }
744     }
745     return pid;
746 }
747 
748 ::pid_t
749 NativeProcessLinux::Attach(lldb::pid_t pid, Error &error)
750 {
751     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
752 
753     // Use a map to keep track of the threads which we have attached/need to attach.
754     Host::TidMap tids_to_attach;
755     if (pid <= 1)
756     {
757         error.SetErrorToGenericError();
758         error.SetErrorString("Attaching to process 1 is not allowed.");
759         return -1;
760     }
761 
762     while (Host::FindProcessThreads(pid, tids_to_attach))
763     {
764         for (Host::TidMap::iterator it = tids_to_attach.begin();
765              it != tids_to_attach.end();)
766         {
767             if (it->second == false)
768             {
769                 lldb::tid_t tid = it->first;
770 
771                 // Attach to the requested process.
772                 // An attach will cause the thread to stop with a SIGSTOP.
773                 error = PtraceWrapper(PTRACE_ATTACH, tid);
774                 if (error.Fail())
775                 {
776                     // No such thread. The thread may have exited.
777                     // More error handling may be needed.
778                     if (error.GetError() == ESRCH)
779                     {
780                         it = tids_to_attach.erase(it);
781                         continue;
782                     }
783                     else
784                         return -1;
785                 }
786 
787                 int status;
788                 // Need to use __WALL otherwise we receive an error with errno=ECHLD
789                 // At this point we should have a thread stopped if waitpid succeeds.
790                 if ((status = waitpid(tid, NULL, __WALL)) < 0)
791                 {
792                     // No such thread. The thread may have exited.
793                     // More error handling may be needed.
794                     if (errno == ESRCH)
795                     {
796                         it = tids_to_attach.erase(it);
797                         continue;
798                     }
799                     else
800                     {
801                         error.SetErrorToErrno();
802                         return -1;
803                     }
804                 }
805 
806                 error = SetDefaultPtraceOpts(tid);
807                 if (error.Fail())
808                     return -1;
809 
810                 if (log)
811                     log->Printf ("NativeProcessLinux::%s() adding tid = %" PRIu64, __FUNCTION__, tid);
812 
813                 it->second = true;
814 
815                 // Create the thread, mark it as stopped.
816                 NativeThreadLinuxSP thread_sp (AddThread(static_cast<lldb::tid_t>(tid)));
817                 assert (thread_sp && "AddThread() returned a nullptr");
818 
819                 // This will notify this is a new thread and tell the system it is stopped.
820                 thread_sp->SetStoppedBySignal(SIGSTOP);
821                 ThreadWasCreated(*thread_sp);
822                 SetCurrentThreadID (thread_sp->GetID ());
823             }
824 
825             // move the loop forward
826             ++it;
827         }
828     }
829 
830     if (tids_to_attach.size() > 0)
831     {
832         m_pid = pid;
833         // Let our process instance know the thread has stopped.
834         SetState (StateType::eStateStopped);
835     }
836     else
837     {
838         error.SetErrorToGenericError();
839         error.SetErrorString("No such process.");
840         return -1;
841     }
842 
843     return pid;
844 }
845 
846 Error
847 NativeProcessLinux::SetDefaultPtraceOpts(lldb::pid_t pid)
848 {
849     long ptrace_opts = 0;
850 
851     // Have the child raise an event on exit.  This is used to keep the child in
852     // limbo until it is destroyed.
853     ptrace_opts |= PTRACE_O_TRACEEXIT;
854 
855     // Have the tracer trace threads which spawn in the inferior process.
856     // TODO: if we want to support tracing the inferiors' child, add the
857     // appropriate ptrace flags here (PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK)
858     ptrace_opts |= PTRACE_O_TRACECLONE;
859 
860     // Have the tracer notify us before execve returns
861     // (needed to disable legacy SIGTRAP generation)
862     ptrace_opts |= PTRACE_O_TRACEEXEC;
863 
864     return PtraceWrapper(PTRACE_SETOPTIONS, pid, nullptr, (void*)ptrace_opts);
865 }
866 
867 static ExitType convert_pid_status_to_exit_type (int status)
868 {
869     if (WIFEXITED (status))
870         return ExitType::eExitTypeExit;
871     else if (WIFSIGNALED (status))
872         return ExitType::eExitTypeSignal;
873     else if (WIFSTOPPED (status))
874         return ExitType::eExitTypeStop;
875     else
876     {
877         // We don't know what this is.
878         return ExitType::eExitTypeInvalid;
879     }
880 }
881 
882 static int convert_pid_status_to_return_code (int status)
883 {
884     if (WIFEXITED (status))
885         return WEXITSTATUS (status);
886     else if (WIFSIGNALED (status))
887         return WTERMSIG (status);
888     else if (WIFSTOPPED (status))
889         return WSTOPSIG (status);
890     else
891     {
892         // We don't know what this is.
893         return ExitType::eExitTypeInvalid;
894     }
895 }
896 
897 // Handles all waitpid events from the inferior process.
898 void
899 NativeProcessLinux::MonitorCallback(lldb::pid_t pid,
900                                     bool exited,
901                                     int signal,
902                                     int status)
903 {
904     Log *log (GetLogIfAnyCategoriesSet (LIBLLDB_LOG_PROCESS));
905 
906     // Certain activities differ based on whether the pid is the tid of the main thread.
907     const bool is_main_thread = (pid == GetID ());
908 
909     // Handle when the thread exits.
910     if (exited)
911     {
912         if (log)
913             log->Printf ("NativeProcessLinux::%s() got exit signal(%d) , tid = %"  PRIu64 " (%s main thread)", __FUNCTION__, signal, pid, is_main_thread ? "is" : "is not");
914 
915         // This is a thread that exited.  Ensure we're not tracking it anymore.
916         const bool thread_found = StopTrackingThread (pid);
917 
918         if (is_main_thread)
919         {
920             // We only set the exit status and notify the delegate if we haven't already set the process
921             // state to an exited state.  We normally should have received a SIGTRAP | (PTRACE_EVENT_EXIT << 8)
922             // for the main thread.
923             const bool already_notified = (GetState() == StateType::eStateExited) || (GetState () == StateType::eStateCrashed);
924             if (!already_notified)
925             {
926                 if (log)
927                     log->Printf ("NativeProcessLinux::%s() tid = %"  PRIu64 " handling main thread exit (%s), expected exit state already set but state was %s instead, setting exit state now", __FUNCTION__, pid, thread_found ? "stopped tracking thread metadata" : "thread metadata not found", StateAsCString (GetState ()));
928                 // The main thread exited.  We're done monitoring.  Report to delegate.
929                 SetExitStatus (convert_pid_status_to_exit_type (status), convert_pid_status_to_return_code (status), nullptr, true);
930 
931                 // Notify delegate that our process has exited.
932                 SetState (StateType::eStateExited, true);
933             }
934             else
935             {
936                 if (log)
937                     log->Printf ("NativeProcessLinux::%s() tid = %"  PRIu64 " main thread now exited (%s)", __FUNCTION__, pid, thread_found ? "stopped tracking thread metadata" : "thread metadata not found");
938             }
939         }
940         else
941         {
942             // Do we want to report to the delegate in this case?  I think not.  If this was an orderly
943             // thread exit, we would already have received the SIGTRAP | (PTRACE_EVENT_EXIT << 8) signal,
944             // and we would have done an all-stop then.
945             if (log)
946                 log->Printf ("NativeProcessLinux::%s() tid = %"  PRIu64 " handling non-main thread exit (%s)", __FUNCTION__, pid, thread_found ? "stopped tracking thread metadata" : "thread metadata not found");
947         }
948         return;
949     }
950 
951     siginfo_t info;
952     const auto info_err = GetSignalInfo(pid, &info);
953     auto thread_sp = GetThreadByID(pid);
954 
955     if (! thread_sp)
956     {
957         // Normally, the only situation when we cannot find the thread is if we have just
958         // received a new thread notification. This is indicated by GetSignalInfo() returning
959         // si_code == SI_USER and si_pid == 0
960         if (log)
961             log->Printf("NativeProcessLinux::%s received notification about an unknown tid %" PRIu64 ".", __FUNCTION__, pid);
962 
963         if (info_err.Fail())
964         {
965             if (log)
966                 log->Printf("NativeProcessLinux::%s (tid %" PRIu64 ") GetSignalInfo failed (%s). Ingoring this notification.", __FUNCTION__, pid, info_err.AsCString());
967             return;
968         }
969 
970         if (log && (info.si_code != SI_USER || info.si_pid != 0))
971             log->Printf("NativeProcessLinux::%s (tid %" PRIu64 ") unexpected signal info (si_code: %d, si_pid: %d). Treating as a new thread notification anyway.", __FUNCTION__, pid, info.si_code, info.si_pid);
972 
973         auto thread_sp = AddThread(pid);
974         // Resume the newly created thread.
975         ResumeThread(*thread_sp, eStateRunning, LLDB_INVALID_SIGNAL_NUMBER);
976         ThreadWasCreated(*thread_sp);
977         return;
978     }
979 
980     // Get details on the signal raised.
981     if (info_err.Success())
982     {
983         // We have retrieved the signal info.  Dispatch appropriately.
984         if (info.si_signo == SIGTRAP)
985             MonitorSIGTRAP(info, *thread_sp);
986         else
987             MonitorSignal(info, *thread_sp, exited);
988     }
989     else
990     {
991         if (info_err.GetError() == EINVAL)
992         {
993             // This is a group stop reception for this tid.
994             // We can reach here if we reinject SIGSTOP, SIGSTP, SIGTTIN or SIGTTOU into the
995             // tracee, triggering the group-stop mechanism. Normally receiving these would stop
996             // the process, pending a SIGCONT. Simulating this state in a debugger is hard and is
997             // generally not needed (one use case is debugging background task being managed by a
998             // shell). For general use, it is sufficient to stop the process in a signal-delivery
999             // stop which happens before the group stop. This done by MonitorSignal and works
1000             // correctly for all signals.
1001             if (log)
1002                 log->Printf("NativeProcessLinux::%s received a group stop for pid %" PRIu64 " tid %" PRIu64 ". Transparent handling of group stops not supported, resuming the thread.", __FUNCTION__, GetID (), pid);
1003             ResumeThread(*thread_sp, thread_sp->GetState(), LLDB_INVALID_SIGNAL_NUMBER);
1004         }
1005         else
1006         {
1007             // ptrace(GETSIGINFO) failed (but not due to group-stop).
1008 
1009             // A return value of ESRCH means the thread/process is no longer on the system,
1010             // so it was killed somehow outside of our control.  Either way, we can't do anything
1011             // with it anymore.
1012 
1013             // Stop tracking the metadata for the thread since it's entirely off the system now.
1014             const bool thread_found = StopTrackingThread (pid);
1015 
1016             if (log)
1017                 log->Printf ("NativeProcessLinux::%s GetSignalInfo failed: %s, tid = %" PRIu64 ", signal = %d, status = %d (%s, %s, %s)",
1018                              __FUNCTION__, info_err.AsCString(), pid, signal, status, info_err.GetError() == ESRCH ? "thread/process killed" : "unknown reason", is_main_thread ? "is main thread" : "is not main thread", thread_found ? "thread metadata removed" : "thread metadata not found");
1019 
1020             if (is_main_thread)
1021             {
1022                 // Notify the delegate - our process is not available but appears to have been killed outside
1023                 // our control.  Is eStateExited the right exit state in this case?
1024                 SetExitStatus (convert_pid_status_to_exit_type (status), convert_pid_status_to_return_code (status), nullptr, true);
1025                 SetState (StateType::eStateExited, true);
1026             }
1027             else
1028             {
1029                 // This thread was pulled out from underneath us.  Anything to do here? Do we want to do an all stop?
1030                 if (log)
1031                     log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " tid %" PRIu64 " non-main thread exit occurred, didn't tell delegate anything since thread disappeared out from underneath us", __FUNCTION__, GetID (), pid);
1032             }
1033         }
1034     }
1035 }
1036 
1037 void
1038 NativeProcessLinux::WaitForNewThread(::pid_t tid)
1039 {
1040     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1041 
1042     NativeThreadLinuxSP new_thread_sp = GetThreadByID(tid);
1043 
1044     if (new_thread_sp)
1045     {
1046         // We are already tracking the thread - we got the event on the new thread (see
1047         // MonitorSignal) before this one. We are done.
1048         return;
1049     }
1050 
1051     // The thread is not tracked yet, let's wait for it to appear.
1052     int status = -1;
1053     ::pid_t wait_pid;
1054     do
1055     {
1056         if (log)
1057             log->Printf ("NativeProcessLinux::%s() received thread creation event for tid %" PRIu32 ". tid not tracked yet, waiting for thread to appear...", __FUNCTION__, tid);
1058         wait_pid = waitpid(tid, &status, __WALL);
1059     }
1060     while (wait_pid == -1 && errno == EINTR);
1061     // Since we are waiting on a specific tid, this must be the creation event. But let's do
1062     // some checks just in case.
1063     if (wait_pid != tid) {
1064         if (log)
1065             log->Printf ("NativeProcessLinux::%s() waiting for tid %" PRIu32 " failed. Assuming the thread has disappeared in the meantime", __FUNCTION__, tid);
1066         // The only way I know of this could happen is if the whole process was
1067         // SIGKILLed in the mean time. In any case, we can't do anything about that now.
1068         return;
1069     }
1070     if (WIFEXITED(status))
1071     {
1072         if (log)
1073             log->Printf ("NativeProcessLinux::%s() waiting for tid %" PRIu32 " returned an 'exited' event. Not tracking the thread.", __FUNCTION__, tid);
1074         // Also a very improbable event.
1075         return;
1076     }
1077 
1078     siginfo_t info;
1079     Error error = GetSignalInfo(tid, &info);
1080     if (error.Fail())
1081     {
1082         if (log)
1083             log->Printf ("NativeProcessLinux::%s() GetSignalInfo for tid %" PRIu32 " failed. Assuming the thread has disappeared in the meantime.", __FUNCTION__, tid);
1084         return;
1085     }
1086 
1087     if (((info.si_pid != 0) || (info.si_code != SI_USER)) && log)
1088     {
1089         // We should be getting a thread creation signal here, but we received something
1090         // else. There isn't much we can do about it now, so we will just log that. Since the
1091         // thread is alive and we are receiving events from it, we shall pretend that it was
1092         // created properly.
1093         log->Printf ("NativeProcessLinux::%s() GetSignalInfo for tid %" PRIu32 " received unexpected signal with code %d from pid %d.", __FUNCTION__, tid, info.si_code, info.si_pid);
1094     }
1095 
1096     if (log)
1097         log->Printf ("NativeProcessLinux::%s() pid = %" PRIu64 ": tracking new thread tid %" PRIu32,
1098                  __FUNCTION__, GetID (), tid);
1099 
1100     new_thread_sp = AddThread(tid);
1101     ResumeThread(*new_thread_sp, eStateRunning, LLDB_INVALID_SIGNAL_NUMBER);
1102     ThreadWasCreated(*new_thread_sp);
1103 }
1104 
1105 void
1106 NativeProcessLinux::MonitorSIGTRAP(const siginfo_t &info, NativeThreadLinux &thread)
1107 {
1108     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1109     const bool is_main_thread = (thread.GetID() == GetID ());
1110 
1111     assert(info.si_signo == SIGTRAP && "Unexpected child signal!");
1112 
1113     switch (info.si_code)
1114     {
1115     // TODO: these two cases are required if we want to support tracing of the inferiors' children.  We'd need this to debug a monitor.
1116     // case (SIGTRAP | (PTRACE_EVENT_FORK << 8)):
1117     // case (SIGTRAP | (PTRACE_EVENT_VFORK << 8)):
1118 
1119     case (SIGTRAP | (PTRACE_EVENT_CLONE << 8)):
1120     {
1121         // This is the notification on the parent thread which informs us of new thread
1122         // creation.
1123         // We don't want to do anything with the parent thread so we just resume it. In case we
1124         // want to implement "break on thread creation" functionality, we would need to stop
1125         // here.
1126 
1127         unsigned long event_message = 0;
1128         if (GetEventMessage(thread.GetID(), &event_message).Fail())
1129         {
1130             if (log)
1131                 log->Printf ("NativeProcessLinux::%s() pid %" PRIu64 " received thread creation event but GetEventMessage failed so we don't know the new tid", __FUNCTION__, thread.GetID());
1132         } else
1133             WaitForNewThread(event_message);
1134 
1135         ResumeThread(thread, thread.GetState(), LLDB_INVALID_SIGNAL_NUMBER);
1136         break;
1137     }
1138 
1139     case (SIGTRAP | (PTRACE_EVENT_EXEC << 8)):
1140     {
1141         NativeThreadLinuxSP main_thread_sp;
1142         if (log)
1143             log->Printf ("NativeProcessLinux::%s() received exec event, code = %d", __FUNCTION__, info.si_code ^ SIGTRAP);
1144 
1145         // Exec clears any pending notifications.
1146         m_pending_notification_tid = LLDB_INVALID_THREAD_ID;
1147 
1148         // Remove all but the main thread here.  Linux fork creates a new process which only copies the main thread.
1149         if (log)
1150             log->Printf ("NativeProcessLinux::%s exec received, stop tracking all but main thread", __FUNCTION__);
1151 
1152         for (auto thread_sp : m_threads)
1153         {
1154             const bool is_main_thread = thread_sp && thread_sp->GetID () == GetID ();
1155             if (is_main_thread)
1156             {
1157                 main_thread_sp = std::static_pointer_cast<NativeThreadLinux>(thread_sp);
1158                 if (log)
1159                     log->Printf ("NativeProcessLinux::%s found main thread with tid %" PRIu64 ", keeping", __FUNCTION__, main_thread_sp->GetID ());
1160             }
1161             else
1162             {
1163                 if (log)
1164                     log->Printf ("NativeProcessLinux::%s discarding non-main-thread tid %" PRIu64 " due to exec", __FUNCTION__, thread_sp->GetID ());
1165             }
1166         }
1167 
1168         m_threads.clear ();
1169 
1170         if (main_thread_sp)
1171         {
1172             m_threads.push_back (main_thread_sp);
1173             SetCurrentThreadID (main_thread_sp->GetID ());
1174             main_thread_sp->SetStoppedByExec();
1175         }
1176         else
1177         {
1178             SetCurrentThreadID (LLDB_INVALID_THREAD_ID);
1179             if (log)
1180                 log->Printf ("NativeProcessLinux::%s pid %" PRIu64 "no main thread found, discarded all threads, we're in a no-thread state!", __FUNCTION__, GetID ());
1181         }
1182 
1183         // Tell coordinator about about the "new" (since exec) stopped main thread.
1184         ThreadWasCreated(*main_thread_sp);
1185 
1186         // Let our delegate know we have just exec'd.
1187         NotifyDidExec ();
1188 
1189         // If we have a main thread, indicate we are stopped.
1190         assert (main_thread_sp && "exec called during ptraced process but no main thread metadata tracked");
1191 
1192         // Let the process know we're stopped.
1193         StopRunningThreads(main_thread_sp->GetID());
1194 
1195         break;
1196     }
1197 
1198     case (SIGTRAP | (PTRACE_EVENT_EXIT << 8)):
1199     {
1200         // The inferior process or one of its threads is about to exit.
1201         // We don't want to do anything with the thread so we just resume it. In case we
1202         // want to implement "break on thread exit" functionality, we would need to stop
1203         // here.
1204 
1205         unsigned long data = 0;
1206         if (GetEventMessage(thread.GetID(), &data).Fail())
1207             data = -1;
1208 
1209         if (log)
1210         {
1211             log->Printf ("NativeProcessLinux::%s() received PTRACE_EVENT_EXIT, data = %lx (WIFEXITED=%s,WIFSIGNALED=%s), pid = %" PRIu64 " (%s)",
1212                          __FUNCTION__,
1213                          data, WIFEXITED (data) ? "true" : "false", WIFSIGNALED (data) ? "true" : "false",
1214                          thread.GetID(),
1215                     is_main_thread ? "is main thread" : "not main thread");
1216         }
1217 
1218         if (is_main_thread)
1219         {
1220             SetExitStatus (convert_pid_status_to_exit_type (data), convert_pid_status_to_return_code (data), nullptr, true);
1221         }
1222 
1223         StateType state = thread.GetState();
1224         if (! StateIsRunningState(state))
1225         {
1226             // Due to a kernel bug, we may sometimes get this stop after the inferior gets a
1227             // SIGKILL. This confuses our state tracking logic in ResumeThread(), since normally,
1228             // we should not be receiving any ptrace events while the inferior is stopped. This
1229             // makes sure that the inferior is resumed and exits normally.
1230             state = eStateRunning;
1231         }
1232         ResumeThread(thread, state, LLDB_INVALID_SIGNAL_NUMBER);
1233 
1234         break;
1235     }
1236 
1237     case 0:
1238     case TRAP_TRACE:  // We receive this on single stepping.
1239     case TRAP_HWBKPT: // We receive this on watchpoint hit
1240     {
1241         // If a watchpoint was hit, report it
1242         uint32_t wp_index;
1243         Error error = thread.GetRegisterContext()->GetWatchpointHitIndex(wp_index, (uintptr_t)info.si_addr);
1244         if (error.Fail() && log)
1245             log->Printf("NativeProcessLinux::%s() "
1246                         "received error while checking for watchpoint hits, "
1247                         "pid = %" PRIu64 " error = %s",
1248                         __FUNCTION__, thread.GetID(), error.AsCString());
1249         if (wp_index != LLDB_INVALID_INDEX32)
1250         {
1251             MonitorWatchpoint(thread, wp_index);
1252             break;
1253         }
1254 
1255         // Otherwise, report step over
1256         MonitorTrace(thread);
1257         break;
1258     }
1259 
1260     case SI_KERNEL:
1261 #if defined __mips__
1262         // For mips there is no special signal for watchpoint
1263         // So we check for watchpoint in kernel trap
1264     {
1265         // If a watchpoint was hit, report it
1266         uint32_t wp_index;
1267         Error error = thread.GetRegisterContext()->GetWatchpointHitIndex(wp_index, LLDB_INVALID_ADDRESS);
1268         if (error.Fail() && log)
1269             log->Printf("NativeProcessLinux::%s() "
1270                         "received error while checking for watchpoint hits, "
1271                         "pid = %" PRIu64 " error = %s",
1272                         __FUNCTION__, thread.GetID(), error.AsCString());
1273         if (wp_index != LLDB_INVALID_INDEX32)
1274         {
1275             MonitorWatchpoint(thread, wp_index);
1276             break;
1277         }
1278     }
1279         // NO BREAK
1280 #endif
1281     case TRAP_BRKPT:
1282         MonitorBreakpoint(thread);
1283         break;
1284 
1285     case SIGTRAP:
1286     case (SIGTRAP | 0x80):
1287         if (log)
1288             log->Printf ("NativeProcessLinux::%s() received unknown SIGTRAP system call stop event, pid %" PRIu64 "tid %" PRIu64 ", resuming", __FUNCTION__, GetID (), thread.GetID());
1289 
1290         // Ignore these signals until we know more about them.
1291         ResumeThread(thread, thread.GetState(), LLDB_INVALID_SIGNAL_NUMBER);
1292         break;
1293 
1294     default:
1295         assert(false && "Unexpected SIGTRAP code!");
1296         if (log)
1297             log->Printf ("NativeProcessLinux::%s() pid %" PRIu64 "tid %" PRIu64 " received unhandled SIGTRAP code: 0x%d",
1298                     __FUNCTION__, GetID(), thread.GetID(), info.si_code);
1299         break;
1300 
1301     }
1302 }
1303 
1304 void
1305 NativeProcessLinux::MonitorTrace(NativeThreadLinux &thread)
1306 {
1307     Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS));
1308     if (log)
1309         log->Printf("NativeProcessLinux::%s() received trace event, pid = %" PRIu64 " (single stepping)",
1310                 __FUNCTION__, thread.GetID());
1311 
1312     // This thread is currently stopped.
1313     thread.SetStoppedByTrace();
1314 
1315     StopRunningThreads(thread.GetID());
1316 }
1317 
1318 void
1319 NativeProcessLinux::MonitorBreakpoint(NativeThreadLinux &thread)
1320 {
1321     Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_BREAKPOINTS));
1322     if (log)
1323         log->Printf("NativeProcessLinux::%s() received breakpoint event, pid = %" PRIu64,
1324                 __FUNCTION__, thread.GetID());
1325 
1326     // Mark the thread as stopped at breakpoint.
1327     thread.SetStoppedByBreakpoint();
1328     Error error = FixupBreakpointPCAsNeeded(thread);
1329     if (error.Fail())
1330         if (log)
1331             log->Printf("NativeProcessLinux::%s() pid = %" PRIu64 " fixup: %s",
1332                     __FUNCTION__, thread.GetID(), error.AsCString());
1333 
1334     if (m_threads_stepping_with_breakpoint.find(thread.GetID()) != m_threads_stepping_with_breakpoint.end())
1335         thread.SetStoppedByTrace();
1336 
1337     StopRunningThreads(thread.GetID());
1338 }
1339 
1340 void
1341 NativeProcessLinux::MonitorWatchpoint(NativeThreadLinux &thread, uint32_t wp_index)
1342 {
1343     Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_WATCHPOINTS));
1344     if (log)
1345         log->Printf("NativeProcessLinux::%s() received watchpoint event, "
1346                     "pid = %" PRIu64 ", wp_index = %" PRIu32,
1347                     __FUNCTION__, thread.GetID(), wp_index);
1348 
1349     // Mark the thread as stopped at watchpoint.
1350     // The address is at (lldb::addr_t)info->si_addr if we need it.
1351     thread.SetStoppedByWatchpoint(wp_index);
1352 
1353     // We need to tell all other running threads before we notify the delegate about this stop.
1354     StopRunningThreads(thread.GetID());
1355 }
1356 
1357 void
1358 NativeProcessLinux::MonitorSignal(const siginfo_t &info, NativeThreadLinux &thread, bool exited)
1359 {
1360     const int signo = info.si_signo;
1361     const bool is_from_llgs = info.si_pid == getpid ();
1362 
1363     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1364 
1365     // POSIX says that process behaviour is undefined after it ignores a SIGFPE,
1366     // SIGILL, SIGSEGV, or SIGBUS *unless* that signal was generated by a
1367     // kill(2) or raise(3).  Similarly for tgkill(2) on Linux.
1368     //
1369     // IOW, user generated signals never generate what we consider to be a
1370     // "crash".
1371     //
1372     // Similarly, ACK signals generated by this monitor.
1373 
1374     // Handle the signal.
1375     if (info.si_code == SI_TKILL || info.si_code == SI_USER)
1376     {
1377         if (log)
1378             log->Printf ("NativeProcessLinux::%s() received signal %s (%d) with code %s, (siginfo pid = %d (%s), waitpid pid = %" PRIu64 ")",
1379                             __FUNCTION__,
1380                             Host::GetSignalAsCString(signo),
1381                             signo,
1382                             (info.si_code == SI_TKILL ? "SI_TKILL" : "SI_USER"),
1383                             info.si_pid,
1384                             is_from_llgs ? "from llgs" : "not from llgs",
1385                             thread.GetID());
1386     }
1387 
1388     // Check for thread stop notification.
1389     if (is_from_llgs && (info.si_code == SI_TKILL) && (signo == SIGSTOP))
1390     {
1391         // This is a tgkill()-based stop.
1392         if (log)
1393             log->Printf ("NativeProcessLinux::%s() pid %" PRIu64 " tid %" PRIu64 ", thread stopped",
1394                          __FUNCTION__,
1395                          GetID (),
1396                          thread.GetID());
1397 
1398         // Check that we're not already marked with a stop reason.
1399         // Note this thread really shouldn't already be marked as stopped - if we were, that would imply that
1400         // the kernel signaled us with the thread stopping which we handled and marked as stopped,
1401         // and that, without an intervening resume, we received another stop.  It is more likely
1402         // that we are missing the marking of a run state somewhere if we find that the thread was
1403         // marked as stopped.
1404         const StateType thread_state = thread.GetState();
1405         if (!StateIsStoppedState (thread_state, false))
1406         {
1407             // An inferior thread has stopped because of a SIGSTOP we have sent it.
1408             // Generally, these are not important stops and we don't want to report them as
1409             // they are just used to stop other threads when one thread (the one with the
1410             // *real* stop reason) hits a breakpoint (watchpoint, etc...). However, in the
1411             // case of an asynchronous Interrupt(), this *is* the real stop reason, so we
1412             // leave the signal intact if this is the thread that was chosen as the
1413             // triggering thread.
1414             if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID)
1415             {
1416                 if (m_pending_notification_tid == thread.GetID())
1417                     thread.SetStoppedBySignal(SIGSTOP, &info);
1418                 else
1419                     thread.SetStoppedWithNoReason();
1420 
1421                 SetCurrentThreadID (thread.GetID ());
1422                 SignalIfAllThreadsStopped();
1423             }
1424             else
1425             {
1426                 // We can end up here if stop was initiated by LLGS but by this time a
1427                 // thread stop has occurred - maybe initiated by another event.
1428                 Error error = ResumeThread(thread, thread.GetState(), 0);
1429                 if (error.Fail() && log)
1430                 {
1431                     log->Printf("NativeProcessLinux::%s failed to resume thread tid  %" PRIu64 ": %s",
1432                             __FUNCTION__, thread.GetID(), error.AsCString());
1433                 }
1434             }
1435         }
1436         else
1437         {
1438             if (log)
1439             {
1440                 // Retrieve the signal name if the thread was stopped by a signal.
1441                 int stop_signo = 0;
1442                 const bool stopped_by_signal = thread.IsStopped(&stop_signo);
1443                 const char *signal_name = stopped_by_signal ? Host::GetSignalAsCString(stop_signo) : "<not stopped by signal>";
1444                 if (!signal_name)
1445                     signal_name = "<no-signal-name>";
1446 
1447                 log->Printf ("NativeProcessLinux::%s() pid %" PRIu64 " tid %" PRIu64 ", thread was already marked as a stopped state (state=%s, signal=%d (%s)), leaving stop signal as is",
1448                              __FUNCTION__,
1449                              GetID (),
1450                              thread.GetID(),
1451                              StateAsCString (thread_state),
1452                              stop_signo,
1453                              signal_name);
1454             }
1455             SignalIfAllThreadsStopped();
1456         }
1457 
1458         // Done handling.
1459         return;
1460     }
1461 
1462     if (log)
1463         log->Printf ("NativeProcessLinux::%s() received signal %s", __FUNCTION__, Host::GetSignalAsCString(signo));
1464 
1465     // This thread is stopped.
1466     thread.SetStoppedBySignal(signo, &info);
1467 
1468     // Send a stop to the debugger after we get all other threads to stop.
1469     StopRunningThreads(thread.GetID());
1470 }
1471 
1472 namespace {
1473 
1474 struct EmulatorBaton
1475 {
1476     NativeProcessLinux* m_process;
1477     NativeRegisterContext* m_reg_context;
1478 
1479     // eRegisterKindDWARF -> RegsiterValue
1480     std::unordered_map<uint32_t, RegisterValue> m_register_values;
1481 
1482     EmulatorBaton(NativeProcessLinux* process, NativeRegisterContext* reg_context) :
1483             m_process(process), m_reg_context(reg_context) {}
1484 };
1485 
1486 } // anonymous namespace
1487 
1488 static size_t
1489 ReadMemoryCallback (EmulateInstruction *instruction,
1490                     void *baton,
1491                     const EmulateInstruction::Context &context,
1492                     lldb::addr_t addr,
1493                     void *dst,
1494                     size_t length)
1495 {
1496     EmulatorBaton* emulator_baton = static_cast<EmulatorBaton*>(baton);
1497 
1498     size_t bytes_read;
1499     emulator_baton->m_process->ReadMemory(addr, dst, length, bytes_read);
1500     return bytes_read;
1501 }
1502 
1503 static bool
1504 ReadRegisterCallback (EmulateInstruction *instruction,
1505                       void *baton,
1506                       const RegisterInfo *reg_info,
1507                       RegisterValue &reg_value)
1508 {
1509     EmulatorBaton* emulator_baton = static_cast<EmulatorBaton*>(baton);
1510 
1511     auto it = emulator_baton->m_register_values.find(reg_info->kinds[eRegisterKindDWARF]);
1512     if (it != emulator_baton->m_register_values.end())
1513     {
1514         reg_value = it->second;
1515         return true;
1516     }
1517 
1518     // The emulator only fill in the dwarf regsiter numbers (and in some case
1519     // the generic register numbers). Get the full register info from the
1520     // register context based on the dwarf register numbers.
1521     const RegisterInfo* full_reg_info = emulator_baton->m_reg_context->GetRegisterInfo(
1522             eRegisterKindDWARF, reg_info->kinds[eRegisterKindDWARF]);
1523 
1524     Error error = emulator_baton->m_reg_context->ReadRegister(full_reg_info, reg_value);
1525     if (error.Success())
1526         return true;
1527 
1528     return false;
1529 }
1530 
1531 static bool
1532 WriteRegisterCallback (EmulateInstruction *instruction,
1533                        void *baton,
1534                        const EmulateInstruction::Context &context,
1535                        const RegisterInfo *reg_info,
1536                        const RegisterValue &reg_value)
1537 {
1538     EmulatorBaton* emulator_baton = static_cast<EmulatorBaton*>(baton);
1539     emulator_baton->m_register_values[reg_info->kinds[eRegisterKindDWARF]] = reg_value;
1540     return true;
1541 }
1542 
1543 static size_t
1544 WriteMemoryCallback (EmulateInstruction *instruction,
1545                      void *baton,
1546                      const EmulateInstruction::Context &context,
1547                      lldb::addr_t addr,
1548                      const void *dst,
1549                      size_t length)
1550 {
1551     return length;
1552 }
1553 
1554 static lldb::addr_t
1555 ReadFlags (NativeRegisterContext* regsiter_context)
1556 {
1557     const RegisterInfo* flags_info = regsiter_context->GetRegisterInfo(
1558             eRegisterKindGeneric, LLDB_REGNUM_GENERIC_FLAGS);
1559     return regsiter_context->ReadRegisterAsUnsigned(flags_info, LLDB_INVALID_ADDRESS);
1560 }
1561 
1562 Error
1563 NativeProcessLinux::SetupSoftwareSingleStepping(NativeThreadLinux &thread)
1564 {
1565     Error error;
1566     NativeRegisterContextSP register_context_sp = thread.GetRegisterContext();
1567 
1568     std::unique_ptr<EmulateInstruction> emulator_ap(
1569         EmulateInstruction::FindPlugin(m_arch, eInstructionTypePCModifying, nullptr));
1570 
1571     if (emulator_ap == nullptr)
1572         return Error("Instruction emulator not found!");
1573 
1574     EmulatorBaton baton(this, register_context_sp.get());
1575     emulator_ap->SetBaton(&baton);
1576     emulator_ap->SetReadMemCallback(&ReadMemoryCallback);
1577     emulator_ap->SetReadRegCallback(&ReadRegisterCallback);
1578     emulator_ap->SetWriteMemCallback(&WriteMemoryCallback);
1579     emulator_ap->SetWriteRegCallback(&WriteRegisterCallback);
1580 
1581     if (!emulator_ap->ReadInstruction())
1582         return Error("Read instruction failed!");
1583 
1584     bool emulation_result = emulator_ap->EvaluateInstruction(eEmulateInstructionOptionAutoAdvancePC);
1585 
1586     const RegisterInfo* reg_info_pc = register_context_sp->GetRegisterInfo(eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC);
1587     const RegisterInfo* reg_info_flags = register_context_sp->GetRegisterInfo(eRegisterKindGeneric, LLDB_REGNUM_GENERIC_FLAGS);
1588 
1589     auto pc_it = baton.m_register_values.find(reg_info_pc->kinds[eRegisterKindDWARF]);
1590     auto flags_it = baton.m_register_values.find(reg_info_flags->kinds[eRegisterKindDWARF]);
1591 
1592     lldb::addr_t next_pc;
1593     lldb::addr_t next_flags;
1594     if (emulation_result)
1595     {
1596         assert(pc_it != baton.m_register_values.end() && "Emulation was successfull but PC wasn't updated");
1597         next_pc = pc_it->second.GetAsUInt64();
1598 
1599         if (flags_it != baton.m_register_values.end())
1600             next_flags = flags_it->second.GetAsUInt64();
1601         else
1602             next_flags = ReadFlags (register_context_sp.get());
1603     }
1604     else if (pc_it == baton.m_register_values.end())
1605     {
1606         // Emulate instruction failed and it haven't changed PC. Advance PC
1607         // with the size of the current opcode because the emulation of all
1608         // PC modifying instruction should be successful. The failure most
1609         // likely caused by a not supported instruction which don't modify PC.
1610         next_pc = register_context_sp->GetPC() + emulator_ap->GetOpcode().GetByteSize();
1611         next_flags = ReadFlags (register_context_sp.get());
1612     }
1613     else
1614     {
1615         // The instruction emulation failed after it modified the PC. It is an
1616         // unknown error where we can't continue because the next instruction is
1617         // modifying the PC but we don't  know how.
1618         return Error ("Instruction emulation failed unexpectedly.");
1619     }
1620 
1621     if (m_arch.GetMachine() == llvm::Triple::arm)
1622     {
1623         if (next_flags & 0x20)
1624         {
1625             // Thumb mode
1626             error = SetSoftwareBreakpoint(next_pc, 2);
1627         }
1628         else
1629         {
1630             // Arm mode
1631             error = SetSoftwareBreakpoint(next_pc, 4);
1632         }
1633     }
1634     else if (m_arch.GetMachine() == llvm::Triple::mips64
1635             || m_arch.GetMachine() == llvm::Triple::mips64el
1636             || m_arch.GetMachine() == llvm::Triple::mips
1637             || m_arch.GetMachine() == llvm::Triple::mipsel)
1638         error = SetSoftwareBreakpoint(next_pc, 4);
1639     else
1640     {
1641         // No size hint is given for the next breakpoint
1642         error = SetSoftwareBreakpoint(next_pc, 0);
1643     }
1644 
1645     if (error.Fail())
1646         return error;
1647 
1648     m_threads_stepping_with_breakpoint.insert({thread.GetID(), next_pc});
1649 
1650     return Error();
1651 }
1652 
1653 bool
1654 NativeProcessLinux::SupportHardwareSingleStepping() const
1655 {
1656     if (m_arch.GetMachine() == llvm::Triple::arm
1657         || m_arch.GetMachine() == llvm::Triple::mips64 || m_arch.GetMachine() == llvm::Triple::mips64el
1658         || m_arch.GetMachine() == llvm::Triple::mips || m_arch.GetMachine() == llvm::Triple::mipsel)
1659         return false;
1660     return true;
1661 }
1662 
1663 Error
1664 NativeProcessLinux::Resume (const ResumeActionList &resume_actions)
1665 {
1666     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_THREAD));
1667     if (log)
1668         log->Printf ("NativeProcessLinux::%s called: pid %" PRIu64, __FUNCTION__, GetID ());
1669 
1670     bool software_single_step = !SupportHardwareSingleStepping();
1671 
1672     if (software_single_step)
1673     {
1674         for (auto thread_sp : m_threads)
1675         {
1676             assert (thread_sp && "thread list should not contain NULL threads");
1677 
1678             const ResumeAction *const action = resume_actions.GetActionForThread (thread_sp->GetID (), true);
1679             if (action == nullptr)
1680                 continue;
1681 
1682             if (action->state == eStateStepping)
1683             {
1684                 Error error = SetupSoftwareSingleStepping(static_cast<NativeThreadLinux &>(*thread_sp));
1685                 if (error.Fail())
1686                     return error;
1687             }
1688         }
1689     }
1690 
1691     for (auto thread_sp : m_threads)
1692     {
1693         assert (thread_sp && "thread list should not contain NULL threads");
1694 
1695         const ResumeAction *const action = resume_actions.GetActionForThread (thread_sp->GetID (), true);
1696 
1697         if (action == nullptr)
1698         {
1699             if (log)
1700                 log->Printf ("NativeProcessLinux::%s no action specified for pid %" PRIu64 " tid %" PRIu64,
1701                     __FUNCTION__, GetID (), thread_sp->GetID ());
1702             continue;
1703         }
1704 
1705         if (log)
1706         {
1707             log->Printf ("NativeProcessLinux::%s processing resume action state %s for pid %" PRIu64 " tid %" PRIu64,
1708                     __FUNCTION__, StateAsCString (action->state), GetID (), thread_sp->GetID ());
1709         }
1710 
1711         switch (action->state)
1712         {
1713         case eStateRunning:
1714         case eStateStepping:
1715         {
1716             // Run the thread, possibly feeding it the signal.
1717             const int signo = action->signal;
1718             ResumeThread(static_cast<NativeThreadLinux &>(*thread_sp), action->state, signo);
1719             break;
1720         }
1721 
1722         case eStateSuspended:
1723         case eStateStopped:
1724             lldbassert(0 && "Unexpected state");
1725 
1726         default:
1727             return Error ("NativeProcessLinux::%s (): unexpected state %s specified for pid %" PRIu64 ", tid %" PRIu64,
1728                     __FUNCTION__, StateAsCString (action->state), GetID (), thread_sp->GetID ());
1729         }
1730     }
1731 
1732     return Error();
1733 }
1734 
1735 Error
1736 NativeProcessLinux::Halt ()
1737 {
1738     Error error;
1739 
1740     if (kill (GetID (), SIGSTOP) != 0)
1741         error.SetErrorToErrno ();
1742 
1743     return error;
1744 }
1745 
1746 Error
1747 NativeProcessLinux::Detach ()
1748 {
1749     Error error;
1750 
1751     // Stop monitoring the inferior.
1752     m_sigchld_handle.reset();
1753 
1754     // Tell ptrace to detach from the process.
1755     if (GetID () == LLDB_INVALID_PROCESS_ID)
1756         return error;
1757 
1758     for (auto thread_sp : m_threads)
1759     {
1760         Error e = Detach(thread_sp->GetID());
1761         if (e.Fail())
1762             error = e; // Save the error, but still attempt to detach from other threads.
1763     }
1764 
1765     return error;
1766 }
1767 
1768 Error
1769 NativeProcessLinux::Signal (int signo)
1770 {
1771     Error error;
1772 
1773     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1774     if (log)
1775         log->Printf ("NativeProcessLinux::%s: sending signal %d (%s) to pid %" PRIu64,
1776                 __FUNCTION__, signo, Host::GetSignalAsCString(signo), GetID());
1777 
1778     if (kill(GetID(), signo))
1779         error.SetErrorToErrno();
1780 
1781     return error;
1782 }
1783 
1784 Error
1785 NativeProcessLinux::Interrupt ()
1786 {
1787     // Pick a running thread (or if none, a not-dead stopped thread) as
1788     // the chosen thread that will be the stop-reason thread.
1789     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1790 
1791     NativeThreadProtocolSP running_thread_sp;
1792     NativeThreadProtocolSP stopped_thread_sp;
1793 
1794     if (log)
1795         log->Printf ("NativeProcessLinux::%s selecting running thread for interrupt target", __FUNCTION__);
1796 
1797     for (auto thread_sp : m_threads)
1798     {
1799         // The thread shouldn't be null but lets just cover that here.
1800         if (!thread_sp)
1801             continue;
1802 
1803         // If we have a running or stepping thread, we'll call that the
1804         // target of the interrupt.
1805         const auto thread_state = thread_sp->GetState ();
1806         if (thread_state == eStateRunning ||
1807             thread_state == eStateStepping)
1808         {
1809             running_thread_sp = thread_sp;
1810             break;
1811         }
1812         else if (!stopped_thread_sp && StateIsStoppedState (thread_state, true))
1813         {
1814             // Remember the first non-dead stopped thread.  We'll use that as a backup if there are no running threads.
1815             stopped_thread_sp = thread_sp;
1816         }
1817     }
1818 
1819     if (!running_thread_sp && !stopped_thread_sp)
1820     {
1821         Error error("found no running/stepping or live stopped threads as target for interrupt");
1822         if (log)
1823             log->Printf ("NativeProcessLinux::%s skipping due to error: %s", __FUNCTION__, error.AsCString ());
1824 
1825         return error;
1826     }
1827 
1828     NativeThreadProtocolSP deferred_signal_thread_sp = running_thread_sp ? running_thread_sp : stopped_thread_sp;
1829 
1830     if (log)
1831         log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " %s tid %" PRIu64 " chosen for interrupt target",
1832                      __FUNCTION__,
1833                      GetID (),
1834                      running_thread_sp ? "running" : "stopped",
1835                      deferred_signal_thread_sp->GetID ());
1836 
1837     StopRunningThreads(deferred_signal_thread_sp->GetID());
1838 
1839     return Error();
1840 }
1841 
1842 Error
1843 NativeProcessLinux::Kill ()
1844 {
1845     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1846     if (log)
1847         log->Printf ("NativeProcessLinux::%s called for PID %" PRIu64, __FUNCTION__, GetID ());
1848 
1849     Error error;
1850 
1851     switch (m_state)
1852     {
1853         case StateType::eStateInvalid:
1854         case StateType::eStateExited:
1855         case StateType::eStateCrashed:
1856         case StateType::eStateDetached:
1857         case StateType::eStateUnloaded:
1858             // Nothing to do - the process is already dead.
1859             if (log)
1860                 log->Printf ("NativeProcessLinux::%s ignored for PID %" PRIu64 " due to current state: %s", __FUNCTION__, GetID (), StateAsCString (m_state));
1861             return error;
1862 
1863         case StateType::eStateConnected:
1864         case StateType::eStateAttaching:
1865         case StateType::eStateLaunching:
1866         case StateType::eStateStopped:
1867         case StateType::eStateRunning:
1868         case StateType::eStateStepping:
1869         case StateType::eStateSuspended:
1870             // We can try to kill a process in these states.
1871             break;
1872     }
1873 
1874     if (kill (GetID (), SIGKILL) != 0)
1875     {
1876         error.SetErrorToErrno ();
1877         return error;
1878     }
1879 
1880     return error;
1881 }
1882 
1883 static Error
1884 ParseMemoryRegionInfoFromProcMapsLine (const std::string &maps_line, MemoryRegionInfo &memory_region_info)
1885 {
1886     memory_region_info.Clear();
1887 
1888     StringExtractor line_extractor (maps_line.c_str ());
1889 
1890     // Format: {address_start_hex}-{address_end_hex} perms offset  dev   inode   pathname
1891     // perms: rwxp   (letter is present if set, '-' if not, final character is p=private, s=shared).
1892 
1893     // Parse out the starting address
1894     lldb::addr_t start_address = line_extractor.GetHexMaxU64 (false, 0);
1895 
1896     // Parse out hyphen separating start and end address from range.
1897     if (!line_extractor.GetBytesLeft () || (line_extractor.GetChar () != '-'))
1898         return Error ("malformed /proc/{pid}/maps entry, missing dash between address range");
1899 
1900     // Parse out the ending address
1901     lldb::addr_t end_address = line_extractor.GetHexMaxU64 (false, start_address);
1902 
1903     // Parse out the space after the address.
1904     if (!line_extractor.GetBytesLeft () || (line_extractor.GetChar () != ' '))
1905         return Error ("malformed /proc/{pid}/maps entry, missing space after range");
1906 
1907     // Save the range.
1908     memory_region_info.GetRange ().SetRangeBase (start_address);
1909     memory_region_info.GetRange ().SetRangeEnd (end_address);
1910 
1911     // Any memory region in /proc/{pid}/maps is by definition mapped into the process.
1912     memory_region_info.SetMapped(MemoryRegionInfo::OptionalBool::eYes);
1913 
1914     // Parse out each permission entry.
1915     if (line_extractor.GetBytesLeft () < 4)
1916         return Error ("malformed /proc/{pid}/maps entry, missing some portion of permissions");
1917 
1918     // Handle read permission.
1919     const char read_perm_char = line_extractor.GetChar ();
1920     if (read_perm_char == 'r')
1921         memory_region_info.SetReadable (MemoryRegionInfo::OptionalBool::eYes);
1922     else if (read_perm_char == '-')
1923         memory_region_info.SetReadable (MemoryRegionInfo::OptionalBool::eNo);
1924     else
1925         return Error ("unexpected /proc/{pid}/maps read permission char");
1926 
1927     // Handle write permission.
1928     const char write_perm_char = line_extractor.GetChar ();
1929     if (write_perm_char == 'w')
1930         memory_region_info.SetWritable (MemoryRegionInfo::OptionalBool::eYes);
1931     else if (write_perm_char == '-')
1932         memory_region_info.SetWritable (MemoryRegionInfo::OptionalBool::eNo);
1933     else
1934         return Error ("unexpected /proc/{pid}/maps write permission char");
1935 
1936     // Handle execute permission.
1937     const char exec_perm_char = line_extractor.GetChar ();
1938     if (exec_perm_char == 'x')
1939         memory_region_info.SetExecutable (MemoryRegionInfo::OptionalBool::eYes);
1940     else if (exec_perm_char == '-')
1941         memory_region_info.SetExecutable (MemoryRegionInfo::OptionalBool::eNo);
1942     else
1943         return Error ("unexpected /proc/{pid}/maps exec permission char");
1944 
1945     return Error ();
1946 }
1947 
1948 Error
1949 NativeProcessLinux::GetMemoryRegionInfo (lldb::addr_t load_addr, MemoryRegionInfo &range_info)
1950 {
1951     // FIXME review that the final memory region returned extends to the end of the virtual address space,
1952     // with no perms if it is not mapped.
1953 
1954     // Use an approach that reads memory regions from /proc/{pid}/maps.
1955     // Assume proc maps entries are in ascending order.
1956     // FIXME assert if we find differently.
1957 
1958     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
1959     Error error;
1960 
1961     if (m_supports_mem_region == LazyBool::eLazyBoolNo)
1962     {
1963         // We're done.
1964         error.SetErrorString ("unsupported");
1965         return error;
1966     }
1967 
1968     // If our cache is empty, pull the latest.  There should always be at least one memory region
1969     // if memory region handling is supported.
1970     if (m_mem_region_cache.empty ())
1971     {
1972         error = ProcFileReader::ProcessLineByLine (GetID (), "maps",
1973              [&] (const std::string &line) -> bool
1974              {
1975                  MemoryRegionInfo info;
1976                  const Error parse_error = ParseMemoryRegionInfoFromProcMapsLine (line, info);
1977                  if (parse_error.Success ())
1978                  {
1979                      m_mem_region_cache.push_back (info);
1980                      return true;
1981                  }
1982                  else
1983                  {
1984                      if (log)
1985                          log->Printf ("NativeProcessLinux::%s failed to parse proc maps line '%s': %s", __FUNCTION__, line.c_str (), error.AsCString ());
1986                      return false;
1987                  }
1988              });
1989 
1990         // If we had an error, we'll mark unsupported.
1991         if (error.Fail ())
1992         {
1993             m_supports_mem_region = LazyBool::eLazyBoolNo;
1994             return error;
1995         }
1996         else if (m_mem_region_cache.empty ())
1997         {
1998             // No entries after attempting to read them.  This shouldn't happen if /proc/{pid}/maps
1999             // is supported.  Assume we don't support map entries via procfs.
2000             if (log)
2001                 log->Printf ("NativeProcessLinux::%s failed to find any procfs maps entries, assuming no support for memory region metadata retrieval", __FUNCTION__);
2002             m_supports_mem_region = LazyBool::eLazyBoolNo;
2003             error.SetErrorString ("not supported");
2004             return error;
2005         }
2006 
2007         if (log)
2008             log->Printf ("NativeProcessLinux::%s read %" PRIu64 " memory region entries from /proc/%" PRIu64 "/maps", __FUNCTION__, static_cast<uint64_t> (m_mem_region_cache.size ()), GetID ());
2009 
2010         // We support memory retrieval, remember that.
2011         m_supports_mem_region = LazyBool::eLazyBoolYes;
2012     }
2013     else
2014     {
2015         if (log)
2016             log->Printf ("NativeProcessLinux::%s reusing %" PRIu64 " cached memory region entries", __FUNCTION__, static_cast<uint64_t> (m_mem_region_cache.size ()));
2017     }
2018 
2019     lldb::addr_t prev_base_address = 0;
2020 
2021     // FIXME start by finding the last region that is <= target address using binary search.  Data is sorted.
2022     // There can be a ton of regions on pthreads apps with lots of threads.
2023     for (auto it = m_mem_region_cache.begin(); it != m_mem_region_cache.end (); ++it)
2024     {
2025         MemoryRegionInfo &proc_entry_info = *it;
2026 
2027         // Sanity check assumption that /proc/{pid}/maps entries are ascending.
2028         assert ((proc_entry_info.GetRange ().GetRangeBase () >= prev_base_address) && "descending /proc/pid/maps entries detected, unexpected");
2029         prev_base_address = proc_entry_info.GetRange ().GetRangeBase ();
2030 
2031         // If the target address comes before this entry, indicate distance to next region.
2032         if (load_addr < proc_entry_info.GetRange ().GetRangeBase ())
2033         {
2034             range_info.GetRange ().SetRangeBase (load_addr);
2035             range_info.GetRange ().SetByteSize (proc_entry_info.GetRange ().GetRangeBase () - load_addr);
2036             range_info.SetReadable (MemoryRegionInfo::OptionalBool::eNo);
2037             range_info.SetWritable (MemoryRegionInfo::OptionalBool::eNo);
2038             range_info.SetExecutable (MemoryRegionInfo::OptionalBool::eNo);
2039             range_info.SetMapped(MemoryRegionInfo::OptionalBool::eNo);
2040 
2041             return error;
2042         }
2043         else if (proc_entry_info.GetRange ().Contains (load_addr))
2044         {
2045             // The target address is within the memory region we're processing here.
2046             range_info = proc_entry_info;
2047             return error;
2048         }
2049 
2050         // The target memory address comes somewhere after the region we just parsed.
2051     }
2052 
2053     // If we made it here, we didn't find an entry that contained the given address. Return the
2054     // load_addr as start and the amount of bytes betwwen load address and the end of the memory as
2055     // size.
2056     range_info.GetRange ().SetRangeBase (load_addr);
2057     range_info.GetRange ().SetRangeEnd(LLDB_INVALID_ADDRESS);
2058     range_info.SetReadable (MemoryRegionInfo::OptionalBool::eNo);
2059     range_info.SetWritable (MemoryRegionInfo::OptionalBool::eNo);
2060     range_info.SetExecutable (MemoryRegionInfo::OptionalBool::eNo);
2061     range_info.SetMapped(MemoryRegionInfo::OptionalBool::eNo);
2062     return error;
2063 }
2064 
2065 void
2066 NativeProcessLinux::DoStopIDBumped (uint32_t newBumpId)
2067 {
2068     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
2069     if (log)
2070         log->Printf ("NativeProcessLinux::%s(newBumpId=%" PRIu32 ") called", __FUNCTION__, newBumpId);
2071 
2072         if (log)
2073             log->Printf ("NativeProcessLinux::%s clearing %" PRIu64 " entries from the cache", __FUNCTION__, static_cast<uint64_t> (m_mem_region_cache.size ()));
2074         m_mem_region_cache.clear ();
2075 }
2076 
2077 Error
2078 NativeProcessLinux::AllocateMemory(size_t size, uint32_t permissions, lldb::addr_t &addr)
2079 {
2080     // FIXME implementing this requires the equivalent of
2081     // InferiorCallPOSIX::InferiorCallMmap, which depends on
2082     // functional ThreadPlans working with Native*Protocol.
2083 #if 1
2084     return Error ("not implemented yet");
2085 #else
2086     addr = LLDB_INVALID_ADDRESS;
2087 
2088     unsigned prot = 0;
2089     if (permissions & lldb::ePermissionsReadable)
2090         prot |= eMmapProtRead;
2091     if (permissions & lldb::ePermissionsWritable)
2092         prot |= eMmapProtWrite;
2093     if (permissions & lldb::ePermissionsExecutable)
2094         prot |= eMmapProtExec;
2095 
2096     // TODO implement this directly in NativeProcessLinux
2097     // (and lift to NativeProcessPOSIX if/when that class is
2098     // refactored out).
2099     if (InferiorCallMmap(this, addr, 0, size, prot,
2100                          eMmapFlagsAnon | eMmapFlagsPrivate, -1, 0)) {
2101         m_addr_to_mmap_size[addr] = size;
2102         return Error ();
2103     } else {
2104         addr = LLDB_INVALID_ADDRESS;
2105         return Error("unable to allocate %" PRIu64 " bytes of memory with permissions %s", size, GetPermissionsAsCString (permissions));
2106     }
2107 #endif
2108 }
2109 
2110 Error
2111 NativeProcessLinux::DeallocateMemory (lldb::addr_t addr)
2112 {
2113     // FIXME see comments in AllocateMemory - required lower-level
2114     // bits not in place yet (ThreadPlans)
2115     return Error ("not implemented");
2116 }
2117 
2118 lldb::addr_t
2119 NativeProcessLinux::GetSharedLibraryInfoAddress ()
2120 {
2121     // punt on this for now
2122     return LLDB_INVALID_ADDRESS;
2123 }
2124 
2125 size_t
2126 NativeProcessLinux::UpdateThreads ()
2127 {
2128     // The NativeProcessLinux monitoring threads are always up to date
2129     // with respect to thread state and they keep the thread list
2130     // populated properly. All this method needs to do is return the
2131     // thread count.
2132     return m_threads.size ();
2133 }
2134 
2135 bool
2136 NativeProcessLinux::GetArchitecture (ArchSpec &arch) const
2137 {
2138     arch = m_arch;
2139     return true;
2140 }
2141 
2142 Error
2143 NativeProcessLinux::GetSoftwareBreakpointPCOffset(uint32_t &actual_opcode_size)
2144 {
2145     // FIXME put this behind a breakpoint protocol class that can be
2146     // set per architecture.  Need ARM, MIPS support here.
2147     static const uint8_t g_i386_opcode [] = { 0xCC };
2148     static const uint8_t g_s390x_opcode[] = { 0x00, 0x01 };
2149 
2150     switch (m_arch.GetMachine ())
2151     {
2152         case llvm::Triple::x86:
2153         case llvm::Triple::x86_64:
2154             actual_opcode_size = static_cast<uint32_t> (sizeof(g_i386_opcode));
2155             return Error ();
2156 
2157         case llvm::Triple::systemz:
2158             actual_opcode_size = static_cast<uint32_t> (sizeof(g_s390x_opcode));
2159             return Error ();
2160 
2161         case llvm::Triple::arm:
2162         case llvm::Triple::aarch64:
2163         case llvm::Triple::mips64:
2164         case llvm::Triple::mips64el:
2165         case llvm::Triple::mips:
2166         case llvm::Triple::mipsel:
2167             // On these architectures the PC don't get updated for breakpoint hits
2168             actual_opcode_size = 0;
2169             return Error ();
2170 
2171         default:
2172             assert(false && "CPU type not supported!");
2173             return Error ("CPU type not supported");
2174     }
2175 }
2176 
2177 Error
2178 NativeProcessLinux::SetBreakpoint (lldb::addr_t addr, uint32_t size, bool hardware)
2179 {
2180     if (hardware)
2181         return Error ("NativeProcessLinux does not support hardware breakpoints");
2182     else
2183         return SetSoftwareBreakpoint (addr, size);
2184 }
2185 
2186 Error
2187 NativeProcessLinux::GetSoftwareBreakpointTrapOpcode (size_t trap_opcode_size_hint,
2188                                                      size_t &actual_opcode_size,
2189                                                      const uint8_t *&trap_opcode_bytes)
2190 {
2191     // FIXME put this behind a breakpoint protocol class that can be set per
2192     // architecture.  Need MIPS support here.
2193     static const uint8_t g_aarch64_opcode[] = { 0x00, 0x00, 0x20, 0xd4 };
2194     // The ARM reference recommends the use of 0xe7fddefe and 0xdefe but the
2195     // linux kernel does otherwise.
2196     static const uint8_t g_arm_breakpoint_opcode[] = { 0xf0, 0x01, 0xf0, 0xe7 };
2197     static const uint8_t g_i386_opcode [] = { 0xCC };
2198     static const uint8_t g_mips64_opcode[] = { 0x00, 0x00, 0x00, 0x0d };
2199     static const uint8_t g_mips64el_opcode[] = { 0x0d, 0x00, 0x00, 0x00 };
2200     static const uint8_t g_s390x_opcode[] = { 0x00, 0x01 };
2201     static const uint8_t g_thumb_breakpoint_opcode[] = { 0x01, 0xde };
2202 
2203     switch (m_arch.GetMachine ())
2204     {
2205     case llvm::Triple::aarch64:
2206         trap_opcode_bytes = g_aarch64_opcode;
2207         actual_opcode_size = sizeof(g_aarch64_opcode);
2208         return Error ();
2209 
2210     case llvm::Triple::arm:
2211         switch (trap_opcode_size_hint)
2212         {
2213         case 2:
2214             trap_opcode_bytes = g_thumb_breakpoint_opcode;
2215             actual_opcode_size = sizeof(g_thumb_breakpoint_opcode);
2216             return Error ();
2217         case 4:
2218             trap_opcode_bytes = g_arm_breakpoint_opcode;
2219             actual_opcode_size = sizeof(g_arm_breakpoint_opcode);
2220             return Error ();
2221         default:
2222             assert(false && "Unrecognised trap opcode size hint!");
2223             return Error ("Unrecognised trap opcode size hint!");
2224         }
2225 
2226     case llvm::Triple::x86:
2227     case llvm::Triple::x86_64:
2228         trap_opcode_bytes = g_i386_opcode;
2229         actual_opcode_size = sizeof(g_i386_opcode);
2230         return Error ();
2231 
2232     case llvm::Triple::mips:
2233     case llvm::Triple::mips64:
2234         trap_opcode_bytes = g_mips64_opcode;
2235         actual_opcode_size = sizeof(g_mips64_opcode);
2236         return Error ();
2237 
2238     case llvm::Triple::mipsel:
2239     case llvm::Triple::mips64el:
2240         trap_opcode_bytes = g_mips64el_opcode;
2241         actual_opcode_size = sizeof(g_mips64el_opcode);
2242         return Error ();
2243 
2244     case llvm::Triple::systemz:
2245         trap_opcode_bytes = g_s390x_opcode;
2246         actual_opcode_size = sizeof(g_s390x_opcode);
2247         return Error ();
2248 
2249     default:
2250         assert(false && "CPU type not supported!");
2251         return Error ("CPU type not supported");
2252     }
2253 }
2254 
2255 #if 0
2256 ProcessMessage::CrashReason
2257 NativeProcessLinux::GetCrashReasonForSIGSEGV(const siginfo_t *info)
2258 {
2259     ProcessMessage::CrashReason reason;
2260     assert(info->si_signo == SIGSEGV);
2261 
2262     reason = ProcessMessage::eInvalidCrashReason;
2263 
2264     switch (info->si_code)
2265     {
2266     default:
2267         assert(false && "unexpected si_code for SIGSEGV");
2268         break;
2269     case SI_KERNEL:
2270         // Linux will occasionally send spurious SI_KERNEL codes.
2271         // (this is poorly documented in sigaction)
2272         // One way to get this is via unaligned SIMD loads.
2273         reason = ProcessMessage::eInvalidAddress; // for lack of anything better
2274         break;
2275     case SEGV_MAPERR:
2276         reason = ProcessMessage::eInvalidAddress;
2277         break;
2278     case SEGV_ACCERR:
2279         reason = ProcessMessage::ePrivilegedAddress;
2280         break;
2281     }
2282 
2283     return reason;
2284 }
2285 #endif
2286 
2287 
2288 #if 0
2289 ProcessMessage::CrashReason
2290 NativeProcessLinux::GetCrashReasonForSIGILL(const siginfo_t *info)
2291 {
2292     ProcessMessage::CrashReason reason;
2293     assert(info->si_signo == SIGILL);
2294 
2295     reason = ProcessMessage::eInvalidCrashReason;
2296 
2297     switch (info->si_code)
2298     {
2299     default:
2300         assert(false && "unexpected si_code for SIGILL");
2301         break;
2302     case ILL_ILLOPC:
2303         reason = ProcessMessage::eIllegalOpcode;
2304         break;
2305     case ILL_ILLOPN:
2306         reason = ProcessMessage::eIllegalOperand;
2307         break;
2308     case ILL_ILLADR:
2309         reason = ProcessMessage::eIllegalAddressingMode;
2310         break;
2311     case ILL_ILLTRP:
2312         reason = ProcessMessage::eIllegalTrap;
2313         break;
2314     case ILL_PRVOPC:
2315         reason = ProcessMessage::ePrivilegedOpcode;
2316         break;
2317     case ILL_PRVREG:
2318         reason = ProcessMessage::ePrivilegedRegister;
2319         break;
2320     case ILL_COPROC:
2321         reason = ProcessMessage::eCoprocessorError;
2322         break;
2323     case ILL_BADSTK:
2324         reason = ProcessMessage::eInternalStackError;
2325         break;
2326     }
2327 
2328     return reason;
2329 }
2330 #endif
2331 
2332 #if 0
2333 ProcessMessage::CrashReason
2334 NativeProcessLinux::GetCrashReasonForSIGFPE(const siginfo_t *info)
2335 {
2336     ProcessMessage::CrashReason reason;
2337     assert(info->si_signo == SIGFPE);
2338 
2339     reason = ProcessMessage::eInvalidCrashReason;
2340 
2341     switch (info->si_code)
2342     {
2343     default:
2344         assert(false && "unexpected si_code for SIGFPE");
2345         break;
2346     case FPE_INTDIV:
2347         reason = ProcessMessage::eIntegerDivideByZero;
2348         break;
2349     case FPE_INTOVF:
2350         reason = ProcessMessage::eIntegerOverflow;
2351         break;
2352     case FPE_FLTDIV:
2353         reason = ProcessMessage::eFloatDivideByZero;
2354         break;
2355     case FPE_FLTOVF:
2356         reason = ProcessMessage::eFloatOverflow;
2357         break;
2358     case FPE_FLTUND:
2359         reason = ProcessMessage::eFloatUnderflow;
2360         break;
2361     case FPE_FLTRES:
2362         reason = ProcessMessage::eFloatInexactResult;
2363         break;
2364     case FPE_FLTINV:
2365         reason = ProcessMessage::eFloatInvalidOperation;
2366         break;
2367     case FPE_FLTSUB:
2368         reason = ProcessMessage::eFloatSubscriptRange;
2369         break;
2370     }
2371 
2372     return reason;
2373 }
2374 #endif
2375 
2376 #if 0
2377 ProcessMessage::CrashReason
2378 NativeProcessLinux::GetCrashReasonForSIGBUS(const siginfo_t *info)
2379 {
2380     ProcessMessage::CrashReason reason;
2381     assert(info->si_signo == SIGBUS);
2382 
2383     reason = ProcessMessage::eInvalidCrashReason;
2384 
2385     switch (info->si_code)
2386     {
2387     default:
2388         assert(false && "unexpected si_code for SIGBUS");
2389         break;
2390     case BUS_ADRALN:
2391         reason = ProcessMessage::eIllegalAlignment;
2392         break;
2393     case BUS_ADRERR:
2394         reason = ProcessMessage::eIllegalAddress;
2395         break;
2396     case BUS_OBJERR:
2397         reason = ProcessMessage::eHardwareError;
2398         break;
2399     }
2400 
2401     return reason;
2402 }
2403 #endif
2404 
2405 Error
2406 NativeProcessLinux::ReadMemory (lldb::addr_t addr, void *buf, size_t size, size_t &bytes_read)
2407 {
2408     if (ProcessVmReadvSupported()) {
2409         // The process_vm_readv path is about 50 times faster than ptrace api. We want to use
2410         // this syscall if it is supported.
2411 
2412         const ::pid_t pid = GetID();
2413 
2414         struct iovec local_iov, remote_iov;
2415         local_iov.iov_base = buf;
2416         local_iov.iov_len = size;
2417         remote_iov.iov_base = reinterpret_cast<void *>(addr);
2418         remote_iov.iov_len = size;
2419 
2420         bytes_read = process_vm_readv(pid, &local_iov, 1, &remote_iov, 1, 0);
2421         const bool success = bytes_read == size;
2422 
2423         Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
2424         if (log)
2425             log->Printf ("NativeProcessLinux::%s using process_vm_readv to read %zd bytes from inferior address 0x%" PRIx64": %s",
2426                     __FUNCTION__, size, addr, success ? "Success" : strerror(errno));
2427 
2428         if (success)
2429             return Error();
2430         // else
2431         //     the call failed for some reason, let's retry the read using ptrace api.
2432     }
2433 
2434     unsigned char *dst = static_cast<unsigned char*>(buf);
2435     size_t remainder;
2436     long data;
2437 
2438     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_ALL));
2439     if (log)
2440         ProcessPOSIXLog::IncNestLevel();
2441     if (log && ProcessPOSIXLog::AtTopNestLevel() && log->GetMask().Test(POSIX_LOG_MEMORY))
2442         log->Printf ("NativeProcessLinux::%s(%p, %p, %zd, _)", __FUNCTION__, (void*)addr, buf, size);
2443 
2444     for (bytes_read = 0; bytes_read < size; bytes_read += remainder)
2445     {
2446         Error error = NativeProcessLinux::PtraceWrapper(PTRACE_PEEKDATA, GetID(), (void*)addr, nullptr, 0, &data);
2447         if (error.Fail())
2448         {
2449             if (log)
2450                 ProcessPOSIXLog::DecNestLevel();
2451             return error;
2452         }
2453 
2454         remainder = size - bytes_read;
2455         remainder = remainder > k_ptrace_word_size ? k_ptrace_word_size : remainder;
2456 
2457         // Copy the data into our buffer
2458         memcpy(dst, &data, remainder);
2459 
2460         if (log && ProcessPOSIXLog::AtTopNestLevel() &&
2461                 (log->GetMask().Test(POSIX_LOG_MEMORY_DATA_LONG) ||
2462                         (log->GetMask().Test(POSIX_LOG_MEMORY_DATA_SHORT) &&
2463                                 size <= POSIX_LOG_MEMORY_SHORT_BYTES)))
2464         {
2465             uintptr_t print_dst = 0;
2466             // Format bytes from data by moving into print_dst for log output
2467             for (unsigned i = 0; i < remainder; ++i)
2468                 print_dst |= (((data >> i*8) & 0xFF) << i*8);
2469             log->Printf ("NativeProcessLinux::%s() [0x%" PRIx64 "]:0x%" PRIx64 " (0x%" PRIx64 ")",
2470                     __FUNCTION__, addr, uint64_t(print_dst), uint64_t(data));
2471         }
2472         addr += k_ptrace_word_size;
2473         dst += k_ptrace_word_size;
2474     }
2475 
2476     if (log)
2477         ProcessPOSIXLog::DecNestLevel();
2478     return Error();
2479 }
2480 
2481 Error
2482 NativeProcessLinux::ReadMemoryWithoutTrap(lldb::addr_t addr, void *buf, size_t size, size_t &bytes_read)
2483 {
2484     Error error = ReadMemory(addr, buf, size, bytes_read);
2485     if (error.Fail()) return error;
2486     return m_breakpoint_list.RemoveTrapsFromBuffer(addr, buf, size);
2487 }
2488 
2489 Error
2490 NativeProcessLinux::WriteMemory(lldb::addr_t addr, const void *buf, size_t size, size_t &bytes_written)
2491 {
2492     const unsigned char *src = static_cast<const unsigned char*>(buf);
2493     size_t remainder;
2494     Error error;
2495 
2496     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_ALL));
2497     if (log)
2498         ProcessPOSIXLog::IncNestLevel();
2499     if (log && ProcessPOSIXLog::AtTopNestLevel() && log->GetMask().Test(POSIX_LOG_MEMORY))
2500         log->Printf ("NativeProcessLinux::%s(0x%" PRIx64 ", %p, %zu)", __FUNCTION__, addr, buf, size);
2501 
2502     for (bytes_written = 0; bytes_written < size; bytes_written += remainder)
2503     {
2504         remainder = size - bytes_written;
2505         remainder = remainder > k_ptrace_word_size ? k_ptrace_word_size : remainder;
2506 
2507         if (remainder == k_ptrace_word_size)
2508         {
2509             unsigned long data = 0;
2510             memcpy(&data, src, k_ptrace_word_size);
2511 
2512             if (log && ProcessPOSIXLog::AtTopNestLevel() &&
2513                     (log->GetMask().Test(POSIX_LOG_MEMORY_DATA_LONG) ||
2514                             (log->GetMask().Test(POSIX_LOG_MEMORY_DATA_SHORT) &&
2515                                     size <= POSIX_LOG_MEMORY_SHORT_BYTES)))
2516                 log->Printf ("NativeProcessLinux::%s() [%p]:0x%lx (0x%lx)", __FUNCTION__,
2517                         (void*)addr, *(const unsigned long*)src, data);
2518 
2519             error = NativeProcessLinux::PtraceWrapper(PTRACE_POKEDATA, GetID(), (void*)addr, (void*)data);
2520             if (error.Fail())
2521             {
2522                 if (log)
2523                     ProcessPOSIXLog::DecNestLevel();
2524                 return error;
2525             }
2526         }
2527         else
2528         {
2529             unsigned char buff[8];
2530             size_t bytes_read;
2531             error = ReadMemory(addr, buff, k_ptrace_word_size, bytes_read);
2532             if (error.Fail())
2533             {
2534                 if (log)
2535                     ProcessPOSIXLog::DecNestLevel();
2536                 return error;
2537             }
2538 
2539             memcpy(buff, src, remainder);
2540 
2541             size_t bytes_written_rec;
2542             error = WriteMemory(addr, buff, k_ptrace_word_size, bytes_written_rec);
2543             if (error.Fail())
2544             {
2545                 if (log)
2546                     ProcessPOSIXLog::DecNestLevel();
2547                 return error;
2548             }
2549 
2550             if (log && ProcessPOSIXLog::AtTopNestLevel() &&
2551                     (log->GetMask().Test(POSIX_LOG_MEMORY_DATA_LONG) ||
2552                             (log->GetMask().Test(POSIX_LOG_MEMORY_DATA_SHORT) &&
2553                                     size <= POSIX_LOG_MEMORY_SHORT_BYTES)))
2554                 log->Printf ("NativeProcessLinux::%s() [%p]:0x%lx (0x%lx)", __FUNCTION__,
2555                         (void*)addr, *(const unsigned long*)src, *(unsigned long*)buff);
2556         }
2557 
2558         addr += k_ptrace_word_size;
2559         src += k_ptrace_word_size;
2560     }
2561     if (log)
2562         ProcessPOSIXLog::DecNestLevel();
2563     return error;
2564 }
2565 
2566 Error
2567 NativeProcessLinux::GetSignalInfo(lldb::tid_t tid, void *siginfo)
2568 {
2569     return PtraceWrapper(PTRACE_GETSIGINFO, tid, nullptr, siginfo);
2570 }
2571 
2572 Error
2573 NativeProcessLinux::GetEventMessage(lldb::tid_t tid, unsigned long *message)
2574 {
2575     return PtraceWrapper(PTRACE_GETEVENTMSG, tid, nullptr, message);
2576 }
2577 
2578 Error
2579 NativeProcessLinux::Detach(lldb::tid_t tid)
2580 {
2581     if (tid == LLDB_INVALID_THREAD_ID)
2582         return Error();
2583 
2584     return PtraceWrapper(PTRACE_DETACH, tid);
2585 }
2586 
2587 bool
2588 NativeProcessLinux::DupDescriptor(const FileSpec &file_spec, int fd, int flags)
2589 {
2590     int target_fd = open(file_spec.GetCString(), flags, 0666);
2591 
2592     if (target_fd == -1)
2593         return false;
2594 
2595     if (dup2(target_fd, fd) == -1)
2596         return false;
2597 
2598     return (close(target_fd) == -1) ? false : true;
2599 }
2600 
2601 bool
2602 NativeProcessLinux::HasThreadNoLock (lldb::tid_t thread_id)
2603 {
2604     for (auto thread_sp : m_threads)
2605     {
2606         assert (thread_sp && "thread list should not contain NULL threads");
2607         if (thread_sp->GetID () == thread_id)
2608         {
2609             // We have this thread.
2610             return true;
2611         }
2612     }
2613 
2614     // We don't have this thread.
2615     return false;
2616 }
2617 
2618 bool
2619 NativeProcessLinux::StopTrackingThread (lldb::tid_t thread_id)
2620 {
2621     Log *const log = GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD);
2622 
2623     if (log)
2624         log->Printf("NativeProcessLinux::%s (tid: %" PRIu64 ")", __FUNCTION__, thread_id);
2625 
2626     bool found = false;
2627 
2628     for (auto it = m_threads.begin (); it != m_threads.end (); ++it)
2629     {
2630         if (*it && ((*it)->GetID () == thread_id))
2631         {
2632             m_threads.erase (it);
2633             found = true;
2634             break;
2635         }
2636     }
2637 
2638     SignalIfAllThreadsStopped();
2639 
2640     return found;
2641 }
2642 
2643 NativeThreadLinuxSP
2644 NativeProcessLinux::AddThread (lldb::tid_t thread_id)
2645 {
2646     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD));
2647 
2648     if (log)
2649     {
2650         log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " adding thread with tid %" PRIu64,
2651                 __FUNCTION__,
2652                 GetID (),
2653                 thread_id);
2654     }
2655 
2656     assert (!HasThreadNoLock (thread_id) && "attempted to add a thread by id that already exists");
2657 
2658     // If this is the first thread, save it as the current thread
2659     if (m_threads.empty ())
2660         SetCurrentThreadID (thread_id);
2661 
2662     auto thread_sp = std::make_shared<NativeThreadLinux>(this, thread_id);
2663     m_threads.push_back (thread_sp);
2664     return thread_sp;
2665 }
2666 
2667 Error
2668 NativeProcessLinux::FixupBreakpointPCAsNeeded(NativeThreadLinux &thread)
2669 {
2670     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
2671 
2672     Error error;
2673 
2674     // Find out the size of a breakpoint (might depend on where we are in the code).
2675     NativeRegisterContextSP context_sp = thread.GetRegisterContext();
2676     if (!context_sp)
2677     {
2678         error.SetErrorString ("cannot get a NativeRegisterContext for the thread");
2679         if (log)
2680             log->Printf ("NativeProcessLinux::%s failed: %s", __FUNCTION__, error.AsCString ());
2681         return error;
2682     }
2683 
2684     uint32_t breakpoint_size = 0;
2685     error = GetSoftwareBreakpointPCOffset(breakpoint_size);
2686     if (error.Fail ())
2687     {
2688         if (log)
2689             log->Printf ("NativeProcessLinux::%s GetBreakpointSize() failed: %s", __FUNCTION__, error.AsCString ());
2690         return error;
2691     }
2692     else
2693     {
2694         if (log)
2695             log->Printf ("NativeProcessLinux::%s breakpoint size: %" PRIu32, __FUNCTION__, breakpoint_size);
2696     }
2697 
2698     // First try probing for a breakpoint at a software breakpoint location: PC - breakpoint size.
2699     const lldb::addr_t initial_pc_addr = context_sp->GetPCfromBreakpointLocation ();
2700     lldb::addr_t breakpoint_addr = initial_pc_addr;
2701     if (breakpoint_size > 0)
2702     {
2703         // Do not allow breakpoint probe to wrap around.
2704         if (breakpoint_addr >= breakpoint_size)
2705             breakpoint_addr -= breakpoint_size;
2706     }
2707 
2708     // Check if we stopped because of a breakpoint.
2709     NativeBreakpointSP breakpoint_sp;
2710     error = m_breakpoint_list.GetBreakpoint (breakpoint_addr, breakpoint_sp);
2711     if (!error.Success () || !breakpoint_sp)
2712     {
2713         // We didn't find one at a software probe location.  Nothing to do.
2714         if (log)
2715             log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " no lldb breakpoint found at current pc with adjustment: 0x%" PRIx64, __FUNCTION__, GetID (), breakpoint_addr);
2716         return Error ();
2717     }
2718 
2719     // If the breakpoint is not a software breakpoint, nothing to do.
2720     if (!breakpoint_sp->IsSoftwareBreakpoint ())
2721     {
2722         if (log)
2723             log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " breakpoint found at 0x%" PRIx64 ", not software, nothing to adjust", __FUNCTION__, GetID (), breakpoint_addr);
2724         return Error ();
2725     }
2726 
2727     //
2728     // We have a software breakpoint and need to adjust the PC.
2729     //
2730 
2731     // Sanity check.
2732     if (breakpoint_size == 0)
2733     {
2734         // Nothing to do!  How did we get here?
2735         if (log)
2736             log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " breakpoint found at 0x%" PRIx64 ", it is software, but the size is zero, nothing to do (unexpected)", __FUNCTION__, GetID (), breakpoint_addr);
2737         return Error ();
2738     }
2739 
2740     // Change the program counter.
2741     if (log)
2742         log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " tid %" PRIu64 ": changing PC from 0x%" PRIx64 " to 0x%" PRIx64, __FUNCTION__, GetID(), thread.GetID(), initial_pc_addr, breakpoint_addr);
2743 
2744     error = context_sp->SetPC (breakpoint_addr);
2745     if (error.Fail ())
2746     {
2747         if (log)
2748             log->Printf ("NativeProcessLinux::%s pid %" PRIu64 " tid %" PRIu64 ": failed to set PC: %s", __FUNCTION__, GetID(), thread.GetID(), error.AsCString ());
2749         return error;
2750     }
2751 
2752     return error;
2753 }
2754 
2755 Error
2756 NativeProcessLinux::GetLoadedModuleFileSpec(const char* module_path, FileSpec& file_spec)
2757 {
2758     FileSpec module_file_spec(module_path, true);
2759 
2760     bool found = false;
2761     file_spec.Clear();
2762     ProcFileReader::ProcessLineByLine(GetID(), "maps",
2763         [&] (const std::string &line)
2764         {
2765             SmallVector<StringRef, 16> columns;
2766             StringRef(line).split(columns, " ", -1, false);
2767             if (columns.size() < 6)
2768                 return true; // continue searching
2769 
2770             FileSpec this_file_spec(columns[5].str().c_str(), false);
2771             if (this_file_spec.GetFilename() != module_file_spec.GetFilename())
2772                 return true; // continue searching
2773 
2774             file_spec = this_file_spec;
2775             found = true;
2776             return false; // we are done
2777         });
2778 
2779     if (! found)
2780         return Error("Module file (%s) not found in /proc/%" PRIu64 "/maps file!",
2781                 module_file_spec.GetFilename().AsCString(), GetID());
2782 
2783     return Error();
2784 }
2785 
2786 Error
2787 NativeProcessLinux::GetFileLoadAddress(const llvm::StringRef& file_name, lldb::addr_t& load_addr)
2788 {
2789     load_addr = LLDB_INVALID_ADDRESS;
2790     Error error = ProcFileReader::ProcessLineByLine (GetID (), "maps",
2791         [&] (const std::string &line) -> bool
2792         {
2793             StringRef maps_row(line);
2794 
2795             SmallVector<StringRef, 16> maps_columns;
2796             maps_row.split(maps_columns, StringRef(" "), -1, false);
2797 
2798             if (maps_columns.size() < 6)
2799             {
2800                 // Return true to continue reading the proc file
2801                 return true;
2802             }
2803 
2804             if (maps_columns[5] == file_name)
2805             {
2806                 StringExtractor addr_extractor(maps_columns[0].str().c_str());
2807                 load_addr = addr_extractor.GetHexMaxU64(false, LLDB_INVALID_ADDRESS);
2808 
2809                 // Return false to stop reading the proc file further
2810                 return false;
2811             }
2812 
2813             // Return true to continue reading the proc file
2814             return true;
2815         });
2816     return error;
2817 }
2818 
2819 NativeThreadLinuxSP
2820 NativeProcessLinux::GetThreadByID(lldb::tid_t tid)
2821 {
2822     return std::static_pointer_cast<NativeThreadLinux>(NativeProcessProtocol::GetThreadByID(tid));
2823 }
2824 
2825 Error
2826 NativeProcessLinux::ResumeThread(NativeThreadLinux &thread, lldb::StateType state, int signo)
2827 {
2828     Log *const log = GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD);
2829 
2830     if (log)
2831         log->Printf("NativeProcessLinux::%s (tid: %" PRIu64 ")",
2832                 __FUNCTION__, thread.GetID());
2833 
2834     // Before we do the resume below, first check if we have a pending
2835     // stop notification that is currently waiting for
2836     // all threads to stop.  This is potentially a buggy situation since
2837     // we're ostensibly waiting for threads to stop before we send out the
2838     // pending notification, and here we are resuming one before we send
2839     // out the pending stop notification.
2840     if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID && log)
2841     {
2842         log->Printf("NativeProcessLinux::%s about to resume tid %" PRIu64 " per explicit request but we have a pending stop notification (tid %" PRIu64 ") that is actively waiting for this thread to stop. Valid sequence of events?", __FUNCTION__, thread.GetID(), m_pending_notification_tid);
2843     }
2844 
2845     // Request a resume.  We expect this to be synchronous and the system
2846     // to reflect it is running after this completes.
2847     switch (state)
2848     {
2849     case eStateRunning:
2850     {
2851         const auto resume_result = thread.Resume(signo);
2852         if (resume_result.Success())
2853             SetState(eStateRunning, true);
2854         return resume_result;
2855     }
2856     case eStateStepping:
2857     {
2858         const auto step_result = thread.SingleStep(signo);
2859         if (step_result.Success())
2860             SetState(eStateRunning, true);
2861         return step_result;
2862     }
2863     default:
2864         if (log)
2865             log->Printf("NativeProcessLinux::%s Unhandled state %s.",
2866                     __FUNCTION__, StateAsCString(state));
2867         llvm_unreachable("Unhandled state for resume");
2868     }
2869 }
2870 
2871 //===----------------------------------------------------------------------===//
2872 
2873 void
2874 NativeProcessLinux::StopRunningThreads(const lldb::tid_t triggering_tid)
2875 {
2876     Log *const log = GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD);
2877 
2878     if (log)
2879     {
2880         log->Printf("NativeProcessLinux::%s about to process event: (triggering_tid: %" PRIu64 ")",
2881                 __FUNCTION__, triggering_tid);
2882     }
2883 
2884     m_pending_notification_tid = triggering_tid;
2885 
2886     // Request a stop for all the thread stops that need to be stopped
2887     // and are not already known to be stopped.
2888     for (const auto &thread_sp: m_threads)
2889     {
2890         if (StateIsRunningState(thread_sp->GetState()))
2891             static_pointer_cast<NativeThreadLinux>(thread_sp)->RequestStop();
2892     }
2893 
2894     SignalIfAllThreadsStopped();
2895 
2896     if (log)
2897     {
2898         log->Printf("NativeProcessLinux::%s event processing done", __FUNCTION__);
2899     }
2900 }
2901 
2902 void
2903 NativeProcessLinux::SignalIfAllThreadsStopped()
2904 {
2905     if (m_pending_notification_tid == LLDB_INVALID_THREAD_ID)
2906         return; // No pending notification. Nothing to do.
2907 
2908     for (const auto &thread_sp: m_threads)
2909     {
2910         if (StateIsRunningState(thread_sp->GetState()))
2911             return; // Some threads are still running. Don't signal yet.
2912     }
2913 
2914     // We have a pending notification and all threads have stopped.
2915     Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_BREAKPOINTS));
2916 
2917     // Clear any temporary breakpoints we used to implement software single stepping.
2918     for (const auto &thread_info: m_threads_stepping_with_breakpoint)
2919     {
2920         Error error = RemoveBreakpoint (thread_info.second);
2921         if (error.Fail())
2922             if (log)
2923                 log->Printf("NativeProcessLinux::%s() pid = %" PRIu64 " remove stepping breakpoint: %s",
2924                         __FUNCTION__, thread_info.first, error.AsCString());
2925     }
2926     m_threads_stepping_with_breakpoint.clear();
2927 
2928     // Notify the delegate about the stop
2929     SetCurrentThreadID(m_pending_notification_tid);
2930     SetState(StateType::eStateStopped, true);
2931     m_pending_notification_tid = LLDB_INVALID_THREAD_ID;
2932 }
2933 
2934 void
2935 NativeProcessLinux::ThreadWasCreated(NativeThreadLinux &thread)
2936 {
2937     Log *const log = GetLogIfAllCategoriesSet (LIBLLDB_LOG_THREAD);
2938 
2939     if (log)
2940         log->Printf("NativeProcessLinux::%s (tid: %" PRIu64 ")", __FUNCTION__, thread.GetID());
2941 
2942     if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID && StateIsRunningState(thread.GetState()))
2943     {
2944         // We will need to wait for this new thread to stop as well before firing the
2945         // notification.
2946         thread.RequestStop();
2947     }
2948 }
2949 
2950 void
2951 NativeProcessLinux::SigchldHandler()
2952 {
2953     Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS));
2954     // Process all pending waitpid notifications.
2955     while (true)
2956     {
2957         int status = -1;
2958         ::pid_t wait_pid = waitpid(-1, &status, __WALL | __WNOTHREAD | WNOHANG);
2959 
2960         if (wait_pid == 0)
2961             break; // We are done.
2962 
2963         if (wait_pid == -1)
2964         {
2965             if (errno == EINTR)
2966                 continue;
2967 
2968             Error error(errno, eErrorTypePOSIX);
2969             if (log)
2970                 log->Printf("NativeProcessLinux::%s waitpid (-1, &status, __WALL | __WNOTHREAD | WNOHANG) failed: %s",
2971                         __FUNCTION__, error.AsCString());
2972             break;
2973         }
2974 
2975         bool exited = false;
2976         int signal = 0;
2977         int exit_status = 0;
2978         const char *status_cstr = nullptr;
2979         if (WIFSTOPPED(status))
2980         {
2981             signal = WSTOPSIG(status);
2982             status_cstr = "STOPPED";
2983         }
2984         else if (WIFEXITED(status))
2985         {
2986             exit_status = WEXITSTATUS(status);
2987             status_cstr = "EXITED";
2988             exited = true;
2989         }
2990         else if (WIFSIGNALED(status))
2991         {
2992             signal = WTERMSIG(status);
2993             status_cstr = "SIGNALED";
2994             if (wait_pid == static_cast< ::pid_t>(GetID())) {
2995                 exited = true;
2996                 exit_status = -1;
2997             }
2998         }
2999         else
3000             status_cstr = "(\?\?\?)";
3001 
3002         if (log)
3003             log->Printf("NativeProcessLinux::%s: waitpid (-1, &status, __WALL | __WNOTHREAD | WNOHANG)"
3004                 "=> pid = %" PRIi32 ", status = 0x%8.8x (%s), signal = %i, exit_state = %i",
3005                 __FUNCTION__, wait_pid, status, status_cstr, signal, exit_status);
3006 
3007         MonitorCallback (wait_pid, exited, signal, exit_status);
3008     }
3009 }
3010 
3011 // Wrapper for ptrace to catch errors and log calls.
3012 // Note that ptrace sets errno on error because -1 can be a valid result (i.e. for PTRACE_PEEK*)
3013 Error
3014 NativeProcessLinux::PtraceWrapper(int req, lldb::pid_t pid, void *addr, void *data, size_t data_size, long *result)
3015 {
3016     Error error;
3017     long int ret;
3018 
3019     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PTRACE));
3020 
3021     PtraceDisplayBytes(req, data, data_size);
3022 
3023     errno = 0;
3024     if (req == PTRACE_GETREGSET || req == PTRACE_SETREGSET)
3025         ret = ptrace(static_cast<__ptrace_request>(req), static_cast< ::pid_t>(pid), *(unsigned int *)addr, data);
3026     else
3027         ret = ptrace(static_cast<__ptrace_request>(req), static_cast< ::pid_t>(pid), addr, data);
3028 
3029     if (ret == -1)
3030         error.SetErrorToErrno();
3031 
3032     if (result)
3033         *result = ret;
3034 
3035     if (log)
3036         log->Printf("ptrace(%d, %" PRIu64 ", %p, %p, %zu)=%lX", req, pid, addr, data, data_size, ret);
3037 
3038     PtraceDisplayBytes(req, data, data_size);
3039 
3040     if (log && error.GetError() != 0)
3041     {
3042         const char* str;
3043         switch (error.GetError())
3044         {
3045         case ESRCH:  str = "ESRCH"; break;
3046         case EINVAL: str = "EINVAL"; break;
3047         case EBUSY:  str = "EBUSY"; break;
3048         case EPERM:  str = "EPERM"; break;
3049         default:     str = error.AsCString();
3050         }
3051         log->Printf("ptrace() failed; errno=%d (%s)", error.GetError(), str);
3052     }
3053 
3054     return error;
3055 }
3056