Hello Abid, Yes, it works.
FYI: I have added comment back (see r230351). Thanks, Ilia On Tue, Feb 24, 2015 at 8:25 PM, Abid, Hafiz <[email protected]> wrote: > Hi Ilia, > > I have adjusted this test a bit to fix the failure on Linux in 230347. > Please check that it has not broken for you. > > > > Thanks, > > Abid > > > > *From:* Ilia K [mailto:[email protected]] > *Sent:* 24 February 2015 10:37 > *To:* [email protected] > *Cc:* Abid, Hafiz; [email protected] > *Subject:* Re: [Lldb-commits] [lldb] r230237 - Fix a problem where > lldb-mi would not stop the debuggee after -exec-interrupt command. > > > > Fixed by r230320. > > > > Thanks, > > Ilia > > > > On Tue, Feb 24, 2015 at 1:19 PM, Ilia K <[email protected]> wrote: > > Hello Dawn, > > > > I'll fix this problem soon. Sorry for inconvenience. > > > > Thanks, > > Ilia > > > > On Tue, Feb 24, 2015 at 4:31 AM, <[email protected]> wrote: > > This commit the broke test_lldbmi_stopped_when_stopatentry_remote test of > TestMiNotification.py on our master/upstream OSX build. > > > On Mon, Feb 23, 2015 at 06:27:18PM -0000, Hafiz Abid Qadeer wrote: > > Author: abidh > > Date: Mon Feb 23 12:27:17 2015 > > New Revision: 230237 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=230237&view=rev > > Log: > > Fix a problem where lldb-mi would not stop the debuggee after > -exec-interrupt command. > > > > Summary: > > This revision fixes a problem where lldb-mi would not stop the execution > after exec-interrupt call. > > On Linux, SIGSTOP is used to stop the debuggee process. LLDB stopped the > debuggee alright. But when > > lldb-mi received the notification of stopping with reason as SIGSTOP, it > would resume the process. > > This was heppening in > CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal. This function > aslo > > used hard coded numbers for signal istead of symbolic names. > > > > This revision changes code to treat SIGSTOP reason as SIGINT. Also used > symbolic names for signals > > instead of numbers. > > > > Reviewers: ki.stfu, clayborg > > > > Reviewed By: ki.stfu, clayborg > > > > Subscribers: zturner, lldb-commits > > > > Differential Revision: http://reviews.llvm.org/D7783 > > > > Modified: > > 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/test/tools/lldb-mi/signal/TestMiSignal.py > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py?rev=230237&r1=230236&r2=230237&view=diff > > > ============================================================================== > > --- lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py (original) > > +++ lldb/trunk/test/tools/lldb-mi/signal/TestMiSignal.py Mon Feb 23 > 12:27:17 2015 > > @@ -37,7 +37,7 @@ class MiSignalTestCase(lldbmi_testcase.M > > > > # Test that -exec-interrupt can interrupt an execution > > self.runCmd("-exec-interrupt") > > - self.expect("\*stopped,reason=\"signal-received\"") > > + > self.expect("\*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",.*thread-id=\"1\",stopped-threads=\"all\"") > > > > # Continue (to loop forever) > > self.runCmd("-exec-continue") > > @@ -45,7 +45,7 @@ class MiSignalTestCase(lldbmi_testcase.M > > > > # Test that Ctrl+C can interrupt an execution > > self.child.sendintr() #FIXME: here uses self.child directly > > - self.expect("\*stopped,reason=\"signal-received\"") > > + > self.expect("\*stopped,reason=\"signal-received\",signal-name=\"SIGINT\",signal-meaning=\"Interrupt\",.*thread-id=\"1\",stopped-threads=\"all\"") > > > > @lldbmi_test > > @expectedFailureWindows("llvm.org/pr22274: need a pexpect > replacement for windows") > > > > Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp?rev=230237&r1=230236&r2=230237&view=diff > > > ============================================================================== > > --- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp (original) > > +++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp Mon Feb > 23 12:27:17 2015 > > @@ -27,6 +27,7 @@ > > #include "lldb/API/SBThread.h" > > #include "lldb/API/SBCommandInterpreter.h" > > #include "lldb/API/SBCommandReturnObject.h" > > +#include "lldb/API/SBUnixSignals.h" > > #ifdef _WIN32 > > #include <io.h> // For the ::_access() > > #else > > @@ -88,6 +89,11 @@ CMICmnLLDBDebuggerHandleEvents::Initiali > > return MIstatus::success; > > > > m_bInitialized = MIstatus::success; > > + m_bSignalsInitialized = false; > > + m_SIGINT = 0; > > + m_SIGSTOP = 0; > > + m_SIGSEGV = 0; > > + m_SIGTRAP = 0; > > > > return m_bInitialized; > > } > > @@ -832,106 +838,103 @@ CMICmnLLDBDebuggerHandleEvents::HandlePr > > { > > bool bOk = MIstatus::success; > > > > + InitializeSignals (); > > lldb::SBProcess sbProcess = > CMICmnLLDBDebugSessionInfo::Instance().GetProcess(); > > const MIuint64 nStopReason = > sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0); > > - switch (nStopReason) > > + if (nStopReason == m_SIGINT || nStopReason == m_SIGSTOP) > > { > > - case 2: // Terminal interrupt signal. SIGINT > > - { > > - // MI print > "*stopped,reason=\"signal-received\",signal-name=\"SIGNINT\",signal-meaning=\"Interrupt\",frame={%s}" > > - const CMICmnMIValueConst miValueConst("signal-received"); > > - const CMICmnMIValueResult miValueResult("reason", > miValueConst); > > - CMICmnMIOutOfBandRecord > miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, > miValueResult); > > - const CMICmnMIValueConst miValueConst2("SIGINT"); > > - const CMICmnMIValueResult miValueResult2("signal-name", > miValueConst2); > > - bOk = miOutOfBandRecord.Add(miValueResult2); > > - const CMICmnMIValueConst miValueConst3("Interrupt"); > > - const CMICmnMIValueResult miValueResult3("signal-meaning", > miValueConst3); > > - bOk = bOk && miOutOfBandRecord.Add(miValueResult3); > > - CMICmnMIValueTuple miValueTuple; > > - bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple); > > - const CMICmnMIValueResult miValueResult5("frame", > miValueTuple); > > - bOk = bOk && miOutOfBandRecord.Add(miValueResult5); > > - bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord); > > - bOk = bOk && TextToStdout("(gdb)"); > > - } > > - break; > > - case 11: // Invalid memory reference. SIGSEGV > > - { > > - // 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); > > - const CMICmnMIValueConst miValueConst2("SIGSEGV"); > > - const CMICmnMIValueResult miValueResult2("signal-name", > miValueConst2); > > - bOk = miOutOfBandRecord.Add(miValueResult2); > > - 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); > > - bOk = bOk && miOutOfBandRecord.Add(miValueResult5); > > - bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord); > > - // Note no "(gdb)" output here > > - } > > - break; > > - case 19: > > - if (sbProcess.IsValid()) > > - sbProcess.Continue(); > > - break; > > - case 5: // Trace/breakpoint trap. SIGTRAP > > + // MI print > "*stopped,reason=\"signal-received\",signal-name=\"SIGNINT\",signal-meaning=\"Interrupt\",frame={%s}" > > + const CMICmnMIValueConst miValueConst("signal-received"); > > + const CMICmnMIValueResult miValueResult("reason", miValueConst); > > + CMICmnMIOutOfBandRecord > miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, > miValueResult); > > + const CMICmnMIValueConst miValueConst2("SIGINT"); > > + const CMICmnMIValueResult miValueResult2("signal-name", > miValueConst2); > > + bOk = miOutOfBandRecord.Add(miValueResult2); > > + const CMICmnMIValueConst miValueConst3("Interrupt"); > > + const CMICmnMIValueResult miValueResult3("signal-meaning", > miValueConst3); > > + bOk = bOk && miOutOfBandRecord.Add(miValueResult3); > > + CMICmnMIValueTuple miValueTuple; > > + bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple); > > + const CMICmnMIValueResult miValueResult5("frame", miValueTuple); > > + bOk = bOk && miOutOfBandRecord.Add(miValueResult5); > > + const CMIUtilString strThreadId(CMIUtilString::Format("%d", > sbProcess.GetSelectedThread().GetIndexID())); > > + const CMICmnMIValueConst miValueConst6(strThreadId); > > + const CMICmnMIValueResult miValueResult6("thread-id", > 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 && TextToStdout("(gdb)"); > > + } > > + else if (nStopReason == m_SIGSEGV) > > + { > > + // 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); > > + const CMICmnMIValueConst miValueConst2("SIGSEGV"); > > + const CMICmnMIValueResult miValueResult2("signal-name", > miValueConst2); > > + bOk = miOutOfBandRecord.Add(miValueResult2); > > + 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); > > + bOk = bOk && miOutOfBandRecord.Add(miValueResult5); > > + bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord); > > + // Note no "(gdb)" output here > > + } > > + else if (nStopReason == m_SIGTRAP) > > + { > > + lldb::SBThread thread = sbProcess.GetSelectedThread(); > > + const MIuint nFrames = thread.GetNumFrames(); > > + if (nFrames > 0) > > { > > - lldb::SBThread thread = sbProcess.GetSelectedThread(); > > - const MIuint nFrames = thread.GetNumFrames(); > > - if (nFrames > 0) > > + lldb::SBFrame frame = thread.GetFrameAtIndex(0); > > + const char *pFnName = frame.GetFunctionName(); > > + if (pFnName != nullptr) > > { > > - lldb::SBFrame frame = thread.GetFrameAtIndex(0); > > - const char *pFnName = frame.GetFunctionName(); > > - if (pFnName != nullptr) > > - { > > - const CMIUtilString fnName = CMIUtilString(pFnName); > > - static const CMIUtilString threadCloneFn = > CMIUtilString("__pthread_clone"); > > + const CMIUtilString fnName = CMIUtilString(pFnName); > > + static const CMIUtilString threadCloneFn = > CMIUtilString("__pthread_clone"); > > > > - if (CMIUtilString::Compare(threadCloneFn, fnName)) > > + if (CMIUtilString::Compare(threadCloneFn, fnName)) > > + { > > + if (sbProcess.IsValid()) > > { > > - if (sbProcess.IsValid()) > > - { > > - sbProcess.Continue(); > > - vwrbShouldBrk = true; > > - break; > > - } > > + sbProcess.Continue(); > > + vwrbShouldBrk = true; > > } > > } > > } > > } > > - default: > > - { > > - // MI print > "*stopped,reason=\"signal-received\",signal=\"%lld\",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); > > - const CMIUtilString strThreadId(CMIUtilString::Format("%d", > sbProcess.GetSelectedThread().GetIndexID())); > > - const CMICmnMIValueConst miValueConst3(strThreadId); > > - const CMICmnMIValueResult miValueResult3("thread-id", > miValueConst3); > > - bOk = bOk && miOutOfBandRecord.Add(miValueResult3); > > - const CMICmnMIValueConst miValueConst4("all"); > > - const CMICmnMIValueResult miValueResult4("stopped-threads", > miValueConst4); > > - bOk = bOk && miOutOfBandRecord.Add(miValueResult4); > > - bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord); > > - bOk = bOk && TextToStdout("(gdb)"); > > - } > > - } // switch( nStopReason ) > > - > > + } > > + else > > + { > > + // MI print > "*stopped,reason=\"signal-received\",signal=\"%lld\",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); > > + const CMIUtilString strThreadId(CMIUtilString::Format("%d", > sbProcess.GetSelectedThread().GetIndexID())); > > + const CMICmnMIValueConst miValueConst3(strThreadId); > > + const CMICmnMIValueResult miValueResult3("thread-id", > miValueConst3); > > + bOk = bOk && miOutOfBandRecord.Add(miValueResult3); > > + const CMICmnMIValueConst miValueConst4("all"); > > + const CMICmnMIValueResult miValueResult4("stopped-threads", > miValueConst4); > > + bOk = bOk && miOutOfBandRecord.Add(miValueResult4); > > + bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord); > > + bOk = bOk && TextToStdout("(gdb)"); > > + } > > return bOk; > > } > > > > @@ -1651,3 +1654,29 @@ CMICmnLLDBDebuggerHandleEvents::TextToSt > > { > > return CMICmnStreamStderr::TextToStderr(vrTxt); > > } > > + > > +//++ > ------------------------------------------------------------------------------------ > > +// Details: Initialize the member variables with the signal values in > this process > > +// file. > > +// Type: Method. > > +// Args: None > > +// Return: Noen > > +// Throws: None. > > +//-- > > +void > > +CMICmnLLDBDebuggerHandleEvents::InitializeSignals() > > +{ > > + if (!m_bSignalsInitialized) > > + { > > + lldb::SBProcess sbProcess = > CMICmnLLDBDebugSessionInfo::Instance().GetProcess(); > > + if (sbProcess.IsValid()) > > + { > > + lldb::SBUnixSignals unix_signals = > sbProcess.GetUnixSignals(); > > + m_SIGINT = unix_signals.GetSignalNumberFromName("SIGINT"); > > + m_SIGSTOP = unix_signals.GetSignalNumberFromName("SIGSTOP"); > > + m_SIGSEGV = unix_signals.GetSignalNumberFromName("SIGSEGV"); > > + m_SIGTRAP = unix_signals.GetSignalNumberFromName("SIGTRAP"); > > + m_bSignalsInitialized = true; > > + } > > + } > > +} > > > > Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h > > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h?rev=230237&r1=230236&r2=230237&view=diff > > > ============================================================================== > > --- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h (original) > > +++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h Mon Feb 23 > 12:27:17 2015 > > @@ -92,4 +92,10 @@ class CMICmnLLDBDebuggerHandleEvents : p > > private: > > // From CMICmnBase > > /* dtor */ virtual ~CMICmnLLDBDebuggerHandleEvents(void); > > + void InitializeSignals(); > > + bool m_bSignalsInitialized; > > + MIuint64 m_SIGINT; > > + MIuint64 m_SIGSTOP; > > + MIuint64 m_SIGSEGV; > > + MIuint64 m_SIGTRAP; > > }; > > > > > > _______________________________________________ > > lldb-commits mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits > _______________________________________________ > lldb-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits > > > > >
_______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
