[Lldb-commits] [lldb] r230237 - Fix a problem where lldb-mi would not stop the debuggee after -exec-interrupt command.
Ilia K
ki.stfu at gmail.com
Tue Feb 24 09:57:34 PST 2015
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 <Hafiz_Abid at mentor.com> 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:ki.stfu at gmail.com]
> *Sent:* 24 February 2015 10:37
> *To:* dawn at burble.org
> *Cc:* Abid, Hafiz; lldb-commits at cs.uiuc.edu
> *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 <ki.stfu at gmail.com> wrote:
>
> Hello Dawn,
>
>
>
> I'll fix this problem soon. Sorry for inconvenience.
>
>
>
> Thanks,
>
> Ilia
>
>
>
> On Tue, Feb 24, 2015 at 4:31 AM, <dawn at burble.org> 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
> > lldb-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150224/d2028fa3/attachment.html>
More information about the lldb-commits
mailing list