<div dir="ltr">Thanks Jim, LinuxSignals.cpp had SIGSTOP marked as suppress = false unlike UnixSignals.cpp which had it correctly marked suppress = true. With that fixed though the SIGSTOP is still getting set due to the call to SetResumeSignal() in POSIXThread::SignalDeliveredNotify() it looks like. Should this code also be using the signals table to decide whether to suppress it?<br>


<div class="gmail_extra"><br></div><div class="gmail_extra">Thanks again.<br><br><br><br></div><div class="gmail_extra"><div class="gmail_quote">On Fri, Mar 21, 2014 at 6:58 PM,  <span dir="ltr"><<a href="mailto:jingham@apple.com" target="_blank">jingham@apple.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Sorry, that's StopInfoSignal::WillResume.<br>
<span><font color="#888888"><br>
Jim<br>
</font></span><div><div><br>
On Mar 21, 2014, at 10:54 AM, <a href="mailto:jingham@apple.com" target="_blank">jingham@apple.com</a> wrote:<br>
<br>
> Somebody is not paying attention to the "process handle" settings.  Normally SIGSTOP is set not to pass:<br>
><br>
> (lldb) process handle SIGSTOP<br>
> NAME        PASS   STOP   NOTIFY<br>
> ==========  =====  =====  ======<br>
> SIGSTOP     false  true   true<br>
><br>
> This check should be done in Process::WillResume:<br>
><br>
>    virtual void<br>
>    WillResume (lldb::StateType resume_state)<br>
>    {<br>
>        ThreadSP thread_sp (m_thread_wp.lock());<br>
>        if (thread_sp)<br>
>        {<br>
>            if (thread_sp->GetProcess()->GetUnixSignals().GetShouldSuppress(m_value) == false)<br>
>                thread_sp->SetResumeSignal(m_value);<br>
>        }<br>
>    }<br>
><br>
> I wonder why this isn't happening in your case?<br>
><br>
> Jim<br>
><br>
><br>
> On Mar 21, 2014, at 10:46 AM, Andrew MacPherson <<a href="mailto:andrew.macp@gmail.com" target="_blank">andrew.macp@gmail.com</a>> wrote:<br>
><br>
>> 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>
>> sudo lldb -p <pid><br>
>> c<br>
>> process interrupt<br>
>> c<br>
>><br>
>> 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>
>> 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>
>><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>
>><br>
>> 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>
>> Any thoughts as to what the proper fix here might be?<br>
>><br>
>> Thanks,<br>
>> Andrew<br>
>> _______________________________________________<br>
>> lldb-dev mailing list<br>
>> <a href="mailto:lldb-dev@cs.uiuc.edu" target="_blank">lldb-dev@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
><br>
> _______________________________________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@cs.uiuc.edu" target="_blank">lldb-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
<br>
</div></div></blockquote></div><br></div></div>