<div dir="ltr"><div><div>Currently when attaching to a running process on Linux, a SIGSTOP signal is (incorrectly I think) injected into the inferior on resume. This can be reproduced by simply launching any process and then in a separate terminal doing:<br>


<br></div><div>sudo lldb -p <pid><br></div><div>c<br></div><div>process interrupt<br>c<br><br></div><div>On the second continue the SIGSTOP that was used to stop the process is injected into the inferior by being passed to PTRACE_CONT, resulting in the process going into a stop state outside the control of LLDB. The SIGSTOP comes from the SetResumeSignal() call in POSIXThread and StopInfo.<br>


<br></div><div>I can't think of any reason why a SIGSTOP should ever be injected into the inferior so as a test I simply prevented it from ever happening:<br><span style="font-family:courier new,monospace"><br>diff --git a/source/Plugins/Process/Linux/ProcessMonitor.cpp b/source/Plugins/Process/Linux/ProcessMonitor.cpp<br>


index 3dec6de..3079379 100644<br>--- a/source/Plugins/Process/Linux/ProcessMonitor.cpp<br>+++ b/source/Plugins/Process/Linux/ProcessMonitor.cpp<br>@@ -2209,6 +2209,9 @@ ProcessMonitor::Resume(lldb::tid_t tid, uint32_t signo)<br>


     bool result;<br>     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS));<br><br>+    if (signo == SIGSTOP)<br>+      signo = eResumeSignalNone;<br>+<br>     if (log)<br>         log->Printf ("ProcessMonitor::%s() resuming thread = %"  PRIu64 " with signal %s", __FUNCTION__, tid,<br>


                                  m_process->GetUnixSignals().GetSignalAsCString (signo));<br></span><br></div><div>This resolves the issue and doesn't cause any other problems that I can find but almost certainly isn't the proper fix. My main concern is that all of the resume signal code is shared with other OSes which I'm guessing treat this differently.<br>


<br></div><div>Any thoughts as to what the proper fix here might be?<br><br>Thanks,<br>Andrew<br></div></div></div>