[Lldb-commits] [lldb] r237426 - Fix a reason of *stopped notifications due to SIGINT/SIGSTOP signals (MI)

jingham at apple.com jingham at apple.com
Fri May 15 09:17:25 PDT 2015


I can't comment on the MI side, but exposing GetInterruptedFromEvent is fine.

Jim

> On May 15, 2015, at 2:29 AM, Ilia K <ki.stfu at gmail.com> wrote:
> 
> Author: ki.stfu
> Date: Fri May 15 04:29:09 2015
> New Revision: 237426
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=237426&view=rev
> Log:
> Fix a reason of *stopped notifications due to SIGINT/SIGSTOP signals (MI)
> 
> # Add SBProcess::GetInterruptedFromEvent
> # Add vrEvent arg in CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped
>  and CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal
> # Refactor CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal
> ## Clean up and fix typos
> ## Remove vwrbShouldBrk arg
> # Fix MiSignalTestCase.test_lldbmi_stopped_when_stopatentry_{local,remote}
>  to expect SIGSTOP instead of SIGINT
> 
> 
> Modified:
>    lldb/trunk/include/lldb/API/SBProcess.h
>    lldb/trunk/scripts/interface/SBProcess.i
>    lldb/trunk/source/API/SBProcess.cpp
>    lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py
>    lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
>    lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h
> 
> Modified: lldb/trunk/include/lldb/API/SBProcess.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBProcess.h?rev=237426&r1=237425&r2=237426&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/API/SBProcess.h (original)
> +++ lldb/trunk/include/lldb/API/SBProcess.h Fri May 15 04:29:09 2015
> @@ -260,6 +260,9 @@ public:
> 
>     static lldb::SBProcess
>     GetProcessFromEvent (const lldb::SBEvent &event);
> +
> +    static bool
> +    GetInterruptedFromEvent (const lldb::SBEvent &event);
> 
>     static bool
>     EventIsProcessEvent (const lldb::SBEvent &event);
> 
> Modified: lldb/trunk/scripts/interface/SBProcess.i
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBProcess.i?rev=237426&r1=237425&r2=237426&view=diff
> ==============================================================================
> --- lldb/trunk/scripts/interface/SBProcess.i (original)
> +++ lldb/trunk/scripts/interface/SBProcess.i Fri May 15 04:29:09 2015
> @@ -349,6 +349,9 @@ public:
>     GetProcessFromEvent (const lldb::SBEvent &event);
> 
>     static bool
> +    GetInterruptedFromEvent (const lldb::SBEvent &event);
> +
> +    static bool
>     EventIsProcessEvent (const lldb::SBEvent &event);
> 
>     lldb::SBBroadcaster
> 
> Modified: lldb/trunk/source/API/SBProcess.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBProcess.cpp?rev=237426&r1=237425&r2=237426&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBProcess.cpp (original)
> +++ lldb/trunk/source/API/SBProcess.cpp Fri May 15 04:29:09 2015
> @@ -999,6 +999,12 @@ SBProcess::GetProcessFromEvent (const SB
> }
> 
> bool
> +SBProcess::GetInterruptedFromEvent (const SBEvent &event)
> +{
> +    return Process::ProcessEventData::GetInterruptedFromEvent(event.get());
> +}
> +
> +bool
> SBProcess::EventIsProcessEvent (const SBEvent &event)
> {
>     return event.GetBroadcasterClass() == SBProcess::GetBroadcasterClass();
> 
> Modified: lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py?rev=237426&r1=237425&r2=237426&view=diff
> ==============================================================================
> --- lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py (original)
> +++ lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py Fri May 15 04:29:09 2015
> @@ -66,9 +66,9 @@ class MiSignalTestCase(lldbmi_testcase.M
> 
>         # Test that *stopped is printed
>         # Note that message is different in Darwin and Linux:
> -        # Darwin: "*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",frame={level=\"0\",addr=\"0x[0-9a-f]+\",func=\"_dyld_start\",file=\"??\",fullname=\"??\",line=\"-1\"},thread-id=\"1\",stopped-threads=\"all\"
> +        # Darwin: "*stopped,reason=\"signal-received\",signal-name=\"SIGSTOP\",signal-meaning=\"Stop\",frame={level=\"0\",addr=\"0x[0-9a-f]+\",func=\"_dyld_start\",file=\"??\",fullname=\"??\",line=\"-1\"},thread-id=\"1\",stopped-threads=\"all\"
>         # Linux:  "*stopped,reason=\"end-stepping-range\",frame={addr=\"0x[0-9a-f]+\",func=\"??\",args=[],file=\"??\",fullname=\"??\",line=\"-1\"},thread-id=\"1\",stopped-threads=\"all\"
> -        self.expect([ "\*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",frame=\{level=\"0\",addr=\"0x[0-9a-f]+\",func=\"_dyld_start\",file=\"\?\?\",fullname=\"\?\?\",line=\"-1\"\},thread-id=\"1\",stopped-threads=\"all\"",
> +        self.expect([ "\*stopped,reason=\"signal-received\",signal-name=\"SIGSTOP\",signal-meaning=\"Stop\",frame=\{level=\"0\",addr=\"0x[0-9a-f]+\",func=\"_dyld_start\",file=\"\?\?\",fullname=\"\?\?\",line=\"-1\"\},thread-id=\"1\",stopped-threads=\"all\"",
>                       "\*stopped,reason=\"end-stepping-range\",frame={addr=\"0x[0-9a-f]+\",func=\"\?\?\",args=\[\],file=\"\?\?\",fullname=\"\?\?\",line=\"-1\"},thread-id=\"1\",stopped-threads=\"all\"" ])
> 
>         # Run to main to make sure we have not exited the application
> @@ -111,7 +111,7 @@ class MiSignalTestCase(lldbmi_testcase.M
>         self.expect("\^done")
> 
>         # Test that *stopped is printed
> -        self.expect("\*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",.+?thread-id=\"1\",stopped-threads=\"all\"")
> +        self.expect("\*stopped,reason=\"signal-received\",signal-name=\"SIGSTOP\",signal-meaning=\"Stop\",.+?thread-id=\"1\",stopped-threads=\"all\"")
> 
>         # Exit
>         self.runCmd("-gdb-exit")
> 
> Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp?rev=237426&r1=237425&r2=237426&view=diff
> ==============================================================================
> --- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp (original)
> +++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp Fri May 15 04:29:09 2015
> @@ -835,7 +835,7 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
>             break;
>         case lldb::eStateStopped:
>             pEventType = "eStateStopped";
> -            bOk = HandleProcessEventStateStopped(bShouldBrk);
> +            bOk = HandleProcessEventStateStopped(vEvent, bShouldBrk);
>             if (bShouldBrk)
>                 break;
>         case lldb::eStateCrashed:
> @@ -924,7 +924,7 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
> // Throws:  None.
> //--
> bool
> -CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped(bool &vwrbShouldBrk)
> +CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent, bool &vwrbShouldBrk)
> {
>     if (!UpdateSelectedThread())
>         return MIstatus::failure;
> @@ -955,7 +955,7 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
>             break;
>         case lldb::eStopReasonSignal:
>             pEventType = "eStopReasonSignal";
> -            bOk = HandleProcessEventStopSignal(vwrbShouldBrk);
> +            bOk = HandleProcessEventStopSignal(vrEvent);
>             break;
>         case lldb::eStopReasonException:
>             pEventType = "eStopReasonException";
> @@ -985,22 +985,23 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
> //++ ------------------------------------------------------------------------------------
> // Details: Asynchronous event handler for LLDB Process stop signal.
> // Type:    Method.
> -// Args:    vwrbShouldBrk   - (W) True = Yes break, false = do not.
> +// Args:    vrEvent           - (R) An LLDB broadcast event.
> // Return:  MIstatus::success - Functionality succeeded.
> //          MIstatus::failure - Functionality failed.
> // Throws:  None.
> //--
> bool
> -CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal(bool &vwrbShouldBrk)
> +CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent)
> {
>     bool bOk = MIstatus::success;
> 
>     InitializeSignals ();
>     lldb::SBProcess sbProcess = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
>     const MIuint64 nStopReason = sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
> -    if (nStopReason == m_SIGINT || nStopReason == m_SIGSTOP)
> +    const bool bInterrupted = lldb::SBProcess::GetInterruptedFromEvent(vrEvent);
> +    if (nStopReason == m_SIGINT || (nStopReason == m_SIGSTOP && bInterrupted))
>     {
> -        // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGNINT\",signal-meaning=\"Interrupt\",frame={%s}"
> +        // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",frame={%s},thread-id=\"%d\",stopped-threads=\"all\""
>         const CMICmnMIValueConst miValueConst("signal-received");
>         const CMICmnMIValueResult miValueResult("reason", miValueConst);
>         CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
> @@ -1012,22 +1013,47 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
>         bOk = bOk && miOutOfBandRecord.Add(miValueResult3);
>         CMICmnMIValueTuple miValueTuple;
>         bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
> -        const CMICmnMIValueResult miValueResult5("frame", miValueTuple);
> +        const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
> +        bOk = bOk && miOutOfBandRecord.Add(miValueResult4);
> +        const CMIUtilString strThreadId(CMIUtilString::Format("%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
> +        const CMICmnMIValueConst miValueConst5(strThreadId);
> +        const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
>         bOk = bOk && miOutOfBandRecord.Add(miValueResult5);
> -        const CMIUtilString strThreadId(CMIUtilString::Format("%d", sbProcess.GetSelectedThread().GetIndexID()));
> -        const CMICmnMIValueConst miValueConst6(strThreadId);
> -        const CMICmnMIValueResult miValueResult6("thread-id", miValueConst6);
> +        const CMICmnMIValueConst miValueConst6("all");
> +        const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
> +        bOk = bOk && miOutOfBandRecord.Add(miValueResult6);
> +        bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
> +        bOk = bOk && CMICmnStreamStdout::WritePrompt();
> +    }
> +    else if (nStopReason == m_SIGSTOP)
> +    {
> +        // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGSTOP\",signal-meaning=\"Stop\",frame={%s},thread-id=\"%d\",stopped-threads=\"all\""
> +        const CMICmnMIValueConst miValueConst("signal-received");
> +        const CMICmnMIValueResult miValueResult("reason", miValueConst);
> +        CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
> +        const CMICmnMIValueConst miValueConst2("SIGSTOP");
> +        const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
> +        bOk = miOutOfBandRecord.Add(miValueResult2);
> +        const CMICmnMIValueConst miValueConst3("Stop");
> +        const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
> +        bOk = bOk && miOutOfBandRecord.Add(miValueResult3);
> +        CMICmnMIValueTuple miValueTuple;
> +        bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
> +        const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
> +        bOk = bOk && miOutOfBandRecord.Add(miValueResult4);
> +        const CMIUtilString strThreadId(CMIUtilString::Format("%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
> +        const CMICmnMIValueConst miValueConst5(strThreadId);
> +        const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
> +        bOk = bOk && miOutOfBandRecord.Add(miValueResult5);
> +        const CMICmnMIValueConst miValueConst6("all");
> +        const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
>         bOk = bOk && miOutOfBandRecord.Add(miValueResult6);
> -        const CMICmnMIValueConst miValueConst7("all");
> -        const CMICmnMIValueResult miValueResult7("stopped-threads", miValueConst7);
> -        bOk = bOk && miOutOfBandRecord.Add(miValueResult7);
>         bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
>         bOk = bOk && CMICmnStreamStdout::WritePrompt();
>     }
>     else if (nStopReason == m_SIGSEGV)
>     {
> -        // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGSEGV\",signal-meaning=\"Segmentation
> -        // fault\",thread-id=\"%d\",frame={%s}"
> +        // MI print "*stopped,reason=\"signal-received\",signal-name=\"SIGSEGV\",signal-meaning=\"Segmentation fault\",thread-id=\"%d\",frame={%s}"
>         const CMICmnMIValueConst miValueConst("signal-received");
>         const CMICmnMIValueResult miValueResult("reason", miValueConst);
>         CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
> @@ -1037,13 +1063,13 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
>         const CMICmnMIValueConst miValueConst3("Segmentation fault");
>         const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
>         bOk = bOk && miOutOfBandRecord.Add(miValueResult3);
> -        const CMIUtilString strThreadId(CMIUtilString::Format("%d", sbProcess.GetSelectedThread().GetIndexID()));
> -        const CMICmnMIValueConst miValueConst4(strThreadId);
> -        const CMICmnMIValueResult miValueResult4("thread-id", miValueConst4);
> -        bOk = bOk && miOutOfBandRecord.Add(miValueResult4);
>         CMICmnMIValueTuple miValueTuple;
>         bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
> -        const CMICmnMIValueResult miValueResult5("frame", miValueTuple);
> +        const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
> +        bOk = bOk && miOutOfBandRecord.Add(miValueResult4);
> +        const CMIUtilString strThreadId(CMIUtilString::Format("%d", sbProcess.GetSelectedThread().GetIndexID()));
> +        const CMICmnMIValueConst miValueConst5(strThreadId);
> +        const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
>         bOk = bOk && miOutOfBandRecord.Add(miValueResult5);
>         bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
>         // Note no "(gdb)" output here
> @@ -1064,24 +1090,33 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr
>                 if (CMIUtilString::Compare(threadCloneFn, fnName))
>                 {
>                     if (sbProcess.IsValid())
> -                    {
>                         sbProcess.Continue();
> -                        vwrbShouldBrk = true;
> -                    }
>                 }
>             }
>         }
>     }
>     else
>     {
> -        // MI print "*stopped,reason=\"signal-received\",signal=\"%lld\",thread-id=\"%d\",stopped-threads=\"all\""
> +        // MI print "*stopped,reason=\"signal-received\",signal-name=\"%s\",thread-id=\"%d\",stopped-threads=\"all\""
> +        // MI print "*stopped,reason=\"signal-received\",signal=\"%d\",thread-id=\"%d\",stopped-threads=\"all\""
>         const CMICmnMIValueConst miValueConst("signal-received");
>         const CMICmnMIValueResult miValueResult("reason", miValueConst);
>         CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
> -        const CMIUtilString strReason(CMIUtilString::Format("%lld", nStopReason));
> -        const CMICmnMIValueConst miValueConst2(strReason);
> -        const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
> -        bOk = miOutOfBandRecord.Add(miValueResult2);
> +        lldb::SBUnixSignals sbUnixSignals = sbProcess.GetUnixSignals();
> +        const MIchar *pSignal = sbUnixSignals.GetSignalAsCString(nStopReason);
> +        if (pSignal)
> +        {
> +            const CMICmnMIValueConst miValueConst2(pSignal);
> +            const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
> +            bOk = miOutOfBandRecord.Add(miValueResult2);
> +        }
> +        else
> +        {
> +            const CMIUtilString strSignal(CMIUtilString::Format("%" PRIu64, nStopReason));
> +            const CMICmnMIValueConst miValueConst2(strSignal);
> +            const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
> +            bOk = miOutOfBandRecord.Add(miValueResult2);
> +        }
>         const CMIUtilString strThreadId(CMIUtilString::Format("%d", sbProcess.GetSelectedThread().GetIndexID()));
>         const CMICmnMIValueConst miValueConst3(strThreadId);
>         const CMICmnMIValueResult miValueResult3("thread-id", miValueConst3);
> 
> Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h?rev=237426&r1=237425&r2=237426&view=diff
> ==============================================================================
> --- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h (original)
> +++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h Fri May 15 04:29:09 2015
> @@ -63,10 +63,10 @@ class CMICmnLLDBDebuggerHandleEvents : p
>     bool HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent);
>     bool HandleProcessEventStateRunning(void);
>     bool HandleProcessEventStateExited(void);
> -    bool HandleProcessEventStateStopped(bool &vwrbShouldBrk);
> +    bool HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent, bool &vwrbShouldBrk);
>     bool HandleProcessEventStopReasonTrace(void);
>     bool HandleProcessEventStopReasonBreakpoint(void);
> -    bool HandleProcessEventStopSignal(bool &vwrbShouldBrk);
> +    bool HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent);
>     bool HandleProcessEventStopException(void);
>     bool HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent);
>     bool HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent);
> 
> 
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits





More information about the lldb-commits mailing list