summaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmdCmdMiscellanous.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmdCmdMiscellanous.cpp')
-rw-r--r--tools/lldb-mi/MICmdCmdMiscellanous.cpp879
1 files changed, 450 insertions, 429 deletions
diff --git a/tools/lldb-mi/MICmdCmdMiscellanous.cpp b/tools/lldb-mi/MICmdCmdMiscellanous.cpp
index b09f585598a4..6b863a8ea8db 100644
--- a/tools/lldb-mi/MICmdCmdMiscellanous.cpp
+++ b/tools/lldb-mi/MICmdCmdMiscellanous.cpp
@@ -8,18 +8,18 @@
//===----------------------------------------------------------------------===//
//++
-// File: MICmdCmdMiscellanous.cpp
+// File: MICmdCmdMiscellanous.cpp
//
-// Overview: CMICmdCmdGdbExit implementation.
-// CMICmdCmdListThreadGroups implementation.
-// CMICmdCmdInterpreterExec implementation.
-// CMICmdCmdInferiorTtySet implementation.
+// Overview: CMICmdCmdGdbExit implementation.
+// CMICmdCmdListThreadGroups implementation.
+// CMICmdCmdInterpreterExec implementation.
+// CMICmdCmdInferiorTtySet implementation.
//
-// Environment: Compilers: Visual C++ 12.
-// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
-// Libraries: See MIReadmetxt.
+// Environment: Compilers: Visual C++ 12.
+// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+// Libraries: See MIReadmetxt.
//
-// Copyright: None.
+// Copyright: None.
//--
// Third Party Headers:
@@ -45,86 +45,89 @@
#include "MICmnStreamStderr.h"
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdGdbExit constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdGdbExit constructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdGdbExit::CMICmdCmdGdbExit( void )
+CMICmdCmdGdbExit::CMICmdCmdGdbExit(void)
{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "gdb-exit";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdGdbExit::CreateSelf;
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "gdb-exit";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdGdbExit::CreateSelf;
}
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdGdbExit destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdGdbExit destructor.
+// Type: Overrideable.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdGdbExit::~CMICmdCmdGdbExit( void )
+CMICmdCmdGdbExit::~CMICmdCmdGdbExit(void)
{
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command does work in this function.
+// The command is likely to communicate with the LLDB SBDebugger in here.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdGdbExit::Execute( void )
+bool
+CMICmdCmdGdbExit::Execute(void)
{
- CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag( true );
- const lldb::SBError sbErr = m_rLLDBDebugSessionInfo.m_lldbProcess.Detach();
- // Do not check for sbErr.Fail() here, m_lldbProcess is likely !IsValid()
-
- return MIstatus::success;
+ CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(true);
+ const lldb::SBError sbErr = m_rLLDBDebugSessionInfo.m_lldbProcess.Detach();
+ // Do not check for sbErr.Fail() here, m_lldbProcess is likely !IsValid()
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
-// for the work carried out in the Execute().
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command prepares a MI Record Result
+// for the work carried out in the Execute().
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdGdbExit::Acknowledge( void )
+bool
+CMICmdCmdGdbExit::Acknowledge(void)
{
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Exit );
- m_miResultRecord = miRecordResult;
-
- // Prod the client i.e. Eclipse with out-of-band results to help it 'continue' because it is using LLDB debugger
- // Give the client '=thread-group-exited,id="i1"'
- m_bHasResultRecordExtra = true;
- const CMICmnMIValueConst miValueConst2( "i1" );
- const CMICmnMIValueResult miValueResult2( "id", miValueConst2 );
- const CMICmnMIOutOfBandRecord miOutOfBand( CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult2 );
- m_miResultRecordExtra = miOutOfBand.GetString();
-
- return MIstatus::success;
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Exit);
+ m_miResultRecord = miRecordResult;
+
+ // Prod the client i.e. Eclipse with out-of-band results to help it 'continue' because it is using LLDB debugger
+ // Give the client '=thread-group-exited,id="i1"'
+ m_bHasResultRecordExtra = true;
+ const CMICmnMIValueConst miValueConst2("i1");
+ const CMICmnMIValueResult miValueResult2("id", miValueConst2);
+ const CMICmnMIOutOfBandRecord miOutOfBand(CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult2);
+ m_miResultRecordExtra = miOutOfBand.GetString();
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
-// calls this function to create an instance of *this command.
-// Type: Static method.
-// Args: None.
-// Return: CMICmdBase * - Pointer to a new command.
-// Throws: None.
+// Details: Required by the CMICmdFactory when registering *this command. The factory
+// calls this function to create an instance of *this command.
+// Type: Static method.
+// Args: None.
+// Return: CMICmdBase * - Pointer to a new command.
+// Throws: None.
//--
-CMICmdBase * CMICmdCmdGdbExit::CreateSelf( void )
+CMICmdBase *
+CMICmdCmdGdbExit::CreateSelf(void)
{
- return new CMICmdCmdGdbExit();
+ return new CMICmdCmdGdbExit();
}
//---------------------------------------------------------------------------------------
@@ -132,258 +135,266 @@ CMICmdBase * CMICmdCmdGdbExit::CreateSelf( void )
//---------------------------------------------------------------------------------------
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdListThreadGroups constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdListThreadGroups constructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdListThreadGroups::CMICmdCmdListThreadGroups( void )
-: m_bIsI1( false )
-, m_bHaveArgOption( false )
-, m_bHaveArgRecurse( false )
-, m_constStrArgNamedAvailable( "available" )
-, m_constStrArgNamedRecurse( "recurse" )
-, m_constStrArgNamedGroup( "group" )
-, m_constStrArgNamedThreadGroup( "i1" )
+CMICmdCmdListThreadGroups::CMICmdCmdListThreadGroups(void)
+ : m_bIsI1(false)
+ , m_bHaveArgOption(false)
+ , m_bHaveArgRecurse(false)
+ , m_constStrArgNamedAvailable("available")
+ , m_constStrArgNamedRecurse("recurse")
+ , m_constStrArgNamedGroup("group")
+ , m_constStrArgNamedThreadGroup("i1")
{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "list-thread-groups";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdListThreadGroups::CreateSelf;
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "list-thread-groups";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdListThreadGroups::CreateSelf;
}
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdListThreadGroups destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdListThreadGroups destructor.
+// Type: Overrideable.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdListThreadGroups::~CMICmdCmdListThreadGroups( void )
+CMICmdCmdListThreadGroups::~CMICmdCmdListThreadGroups(void)
{
- m_vecMIValueTuple.clear();
+ m_vecMIValueTuple.clear();
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
-// arguments to extract values for each of those arguments.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The parses the command line options
+// arguments to extract values for each of those arguments.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdListThreadGroups::ParseArgs( void )
+bool
+CMICmdCmdListThreadGroups::ParseArgs(void)
{
- bool bOk = m_setCmdArgs.Add( *(new CMICmdArgValOptionLong( m_constStrArgNamedAvailable, false, true ) ) );
- bOk = bOk && m_setCmdArgs.Add( *(new CMICmdArgValOptionLong( m_constStrArgNamedRecurse, false, true, CMICmdArgValListBase::eArgValType_Number, 1 ) ) );
- bOk = bOk && m_setCmdArgs.Add( *(new CMICmdArgValListOfN( m_constStrArgNamedGroup, false, true, CMICmdArgValListBase::eArgValType_Number ) ) );
- bOk = bOk && m_setCmdArgs.Add( *(new CMICmdArgValThreadGrp( m_constStrArgNamedThreadGroup, false, true ) ) );
- return (bOk && ParseValidateCmdOptions() );
+ bool bOk = m_setCmdArgs.Add(*(new CMICmdArgValOptionLong(m_constStrArgNamedAvailable, false, true)));
+ bOk = bOk &&
+ m_setCmdArgs.Add(
+ *(new CMICmdArgValOptionLong(m_constStrArgNamedRecurse, false, true, CMICmdArgValListBase::eArgValType_Number, 1)));
+ bOk =
+ bOk && m_setCmdArgs.Add(*(new CMICmdArgValListOfN(m_constStrArgNamedGroup, false, true, CMICmdArgValListBase::eArgValType_Number)));
+ bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValThreadGrp(m_constStrArgNamedThreadGroup, false, true)));
+ return (bOk && ParseValidateCmdOptions());
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
-// Synopis: -list-thread-groups [ --available ] [ --recurse 1 ] [ group ... ]
-// This command does not follow the MI documentation exactly. Has an extra
-// argument "i1" to handle.
-// Ref: http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Miscellaneous-Commands.html#GDB_002fMI-Miscellaneous-Commands
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command does work in this function.
+// The command is likely to communicate with the LLDB SBDebugger in here.
+// Synopis: -list-thread-groups [ --available ] [ --recurse 1 ] [ group ... ]
+// This command does not follow the MI documentation exactly. Has an extra
+// argument "i1" to handle.
+// Ref:
+// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Miscellaneous-Commands.html#GDB_002fMI-Miscellaneous-Commands
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdListThreadGroups::Execute( void )
+bool
+CMICmdCmdListThreadGroups::Execute(void)
{
- if( m_setCmdArgs.IsArgContextEmpty() )
- // No options so "top level thread groups"
- return MIstatus::success;
-
- CMICMDBASE_GETOPTION( pArgAvailable, OptionLong, m_constStrArgNamedAvailable );
- CMICMDBASE_GETOPTION( pArgRecurse, OptionLong, m_constStrArgNamedRecurse );
- CMICMDBASE_GETOPTION( pArgThreadGroup, ThreadGrp, m_constStrArgNamedThreadGroup );
-
- // Got some options so "threads"
- if( pArgAvailable->GetFound() )
- {
- if( pArgRecurse->GetFound() )
- {
- m_bHaveArgRecurse = true;
- return MIstatus::success;
- }
-
- m_bHaveArgOption = true;
- return MIstatus::success;
- }
- // "i1" as first argument (pos 0 of possible arg)
- if( !pArgThreadGroup->GetFound() )
- return MIstatus::success;
- m_bIsI1 = true;
-
- CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
- lldb::SBProcess & rProcess = rSessionInfo.m_lldbProcess;
-
- // Note do not check for rProcess is IsValid(), continue
-
- m_vecMIValueTuple.clear();
- const MIuint nThreads = rProcess.GetNumThreads();
- for( MIuint i = 0; i < nThreads; i++ )
- {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- lldb::SBThread thread = rProcess.GetThreadAtIndex( i );
-
- if( thread.IsValid() )
- {
- CMICmnMIValueTuple miTuple;
- if( !rSessionInfo.MIResponseFormThreadInfo2( m_cmdData, thread, miTuple ) )
- return MIstatus::failure;
-
- m_vecMIValueTuple.push_back( miTuple );
- }
- }
-
- return MIstatus::success;
+ if (m_setCmdArgs.IsArgContextEmpty())
+ // No options so "top level thread groups"
+ return MIstatus::success;
+
+ CMICMDBASE_GETOPTION(pArgAvailable, OptionLong, m_constStrArgNamedAvailable);
+ CMICMDBASE_GETOPTION(pArgRecurse, OptionLong, m_constStrArgNamedRecurse);
+ CMICMDBASE_GETOPTION(pArgThreadGroup, ThreadGrp, m_constStrArgNamedThreadGroup);
+
+ // Got some options so "threads"
+ if (pArgAvailable->GetFound())
+ {
+ if (pArgRecurse->GetFound())
+ {
+ m_bHaveArgRecurse = true;
+ return MIstatus::success;
+ }
+
+ m_bHaveArgOption = true;
+ return MIstatus::success;
+ }
+ // "i1" as first argument (pos 0 of possible arg)
+ if (!pArgThreadGroup->GetFound())
+ return MIstatus::success;
+ m_bIsI1 = true;
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
+ lldb::SBProcess &rProcess = rSessionInfo.m_lldbProcess;
+
+ // Note do not check for rProcess is IsValid(), continue
+
+ m_vecMIValueTuple.clear();
+ const MIuint nThreads = rProcess.GetNumThreads();
+ for (MIuint i = 0; i < nThreads; i++)
+ {
+ // GetThreadAtIndex() uses a base 0 index
+ // GetThreadByIndexID() uses a base 1 index
+ lldb::SBThread thread = rProcess.GetThreadAtIndex(i);
+
+ if (thread.IsValid())
+ {
+ CMICmnMIValueTuple miTuple;
+ if (!rSessionInfo.MIResponseFormThreadInfo2(m_cmdData, thread, miTuple))
+ return MIstatus::failure;
+
+ m_vecMIValueTuple.push_back(miTuple);
+ }
+ }
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
-// for the work carried out in the Execute().
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command prepares a MI Record Result
+// for the work carried out in the Execute().
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdListThreadGroups::Acknowledge( void )
+bool
+CMICmdCmdListThreadGroups::Acknowledge(void)
{
- if( m_bHaveArgOption )
- {
- if( m_bHaveArgRecurse )
- {
- const CMICmnMIValueConst miValueConst( MIRSRC( IDS_WORD_NOT_IMPLEMENTED_BRKTS ) );
- const CMICmnMIValueResult miValueResult( "msg", miValueConst );
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult );
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst1( "i1" );
- const CMICmnMIValueResult miValueResult1( "id", miValueConst1 );
- CMICmnMIValueTuple miTuple( miValueResult1 );
-
- const CMICmnMIValueConst miValueConst2( "process" );
- const CMICmnMIValueResult miValueResult2( "type", miValueConst2 );
- miTuple.Add( miValueResult2 );
-
- CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
- if (rSessionInfo.m_lldbProcess.IsValid ())
- {
- const lldb::pid_t pid = rSessionInfo.m_lldbProcess.GetProcessID();
- const CMIUtilString strPid( CMIUtilString::Format( "%lld", pid ) );
- const CMICmnMIValueConst miValueConst3( strPid );
- const CMICmnMIValueResult miValueResult3( "pid", miValueConst3 );
- miTuple.Add( miValueResult3 );
- }
-
- const CMICmnMIValueConst miValueConst4( MIRSRC( IDS_WORD_NOT_IMPLEMENTED_BRKTS ) );
- const CMICmnMIValueResult miValueResult4( "num_children", miValueConst4 );
- miTuple.Add( miValueResult4 );
-
- const CMICmnMIValueConst miValueConst5( MIRSRC( IDS_WORD_NOT_IMPLEMENTED_BRKTS ) );
- const CMICmnMIValueResult miValueResult5( "cores", miValueConst5 );
- miTuple.Add( miValueResult5 );
-
- const CMICmnMIValueList miValueList( miTuple );
- const CMICmnMIValueResult miValueResult6( "groups", miValueList );
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult6 );
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- if( !m_bIsI1 )
- {
- const CMICmnMIValueConst miValueConst1( "i1" );
- const CMICmnMIValueResult miValueResult1( "id", miValueConst1 );
- CMICmnMIValueTuple miTuple( miValueResult1 );
-
- const CMICmnMIValueConst miValueConst2( "process" );
- const CMICmnMIValueResult miValueResult2( "type", miValueConst2 );
- miTuple.Add( miValueResult2 );
-
- CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
- if (rSessionInfo.m_lldbProcess.IsValid ())
- {
- const lldb::pid_t pid = rSessionInfo.m_lldbProcess.GetProcessID();
- const CMIUtilString strPid( CMIUtilString::Format( "%lld", pid ) );
- const CMICmnMIValueConst miValueConst3( strPid );
- const CMICmnMIValueResult miValueResult3( "pid", miValueConst3 );
- miTuple.Add( miValueResult3 );
- }
-
- if (rSessionInfo.m_lldbTarget.IsValid ())
- {
- lldb::SBTarget & rTrgt = rSessionInfo.m_lldbTarget;
- const MIchar * pDir = rTrgt.GetExecutable().GetDirectory();
- const MIchar * pFileName = rTrgt.GetExecutable().GetFilename();
- const CMIUtilString strFile( CMIUtilString::Format( "%s/%s", pDir, pFileName ) );
- const CMICmnMIValueConst miValueConst4( strFile );
- const CMICmnMIValueResult miValueResult4( "executable", miValueConst4 );
- miTuple.Add( miValueResult4 );
- }
-
- const CMICmnMIValueList miValueList( miTuple );
- const CMICmnMIValueResult miValueResult5( "groups", miValueList );
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult5 );
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // Build up a list of thread information from tuples
- VecMIValueTuple_t::const_iterator it = m_vecMIValueTuple.begin();
- if( it == m_vecMIValueTuple.end() )
- {
- const CMICmnMIValueConst miValueConst( "[]" );
- const CMICmnMIValueResult miValueResult( "threads", miValueConst );
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult );
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
- CMICmnMIValueList miValueList( *it );
- ++it;
- while( it != m_vecMIValueTuple.end() )
- {
- const CMICmnMIValueTuple & rTuple( *it );
- miValueList.Add( rTuple );
-
- // Next
- ++it;
- }
-
- const CMICmnMIValueResult miValueResult( "threads", miValueList );
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult );
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
+ if (m_bHaveArgOption)
+ {
+ if (m_bHaveArgRecurse)
+ {
+ const CMICmnMIValueConst miValueConst(MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
+ const CMICmnMIValueResult miValueResult("msg", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+ }
+
+ const CMICmnMIValueConst miValueConst1("i1");
+ const CMICmnMIValueResult miValueResult1("id", miValueConst1);
+ CMICmnMIValueTuple miTuple(miValueResult1);
+
+ const CMICmnMIValueConst miValueConst2("process");
+ const CMICmnMIValueResult miValueResult2("type", miValueConst2);
+ miTuple.Add(miValueResult2);
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
+ if (rSessionInfo.m_lldbProcess.IsValid())
+ {
+ const lldb::pid_t pid = rSessionInfo.m_lldbProcess.GetProcessID();
+ const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
+ const CMICmnMIValueConst miValueConst3(strPid);
+ const CMICmnMIValueResult miValueResult3("pid", miValueConst3);
+ miTuple.Add(miValueResult3);
+ }
+
+ const CMICmnMIValueConst miValueConst4(MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
+ const CMICmnMIValueResult miValueResult4("num_children", miValueConst4);
+ miTuple.Add(miValueResult4);
+
+ const CMICmnMIValueConst miValueConst5(MIRSRC(IDS_WORD_NOT_IMPLEMENTED_BRKTS));
+ const CMICmnMIValueResult miValueResult5("cores", miValueConst5);
+ miTuple.Add(miValueResult5);
+
+ const CMICmnMIValueList miValueList(miTuple);
+ const CMICmnMIValueResult miValueResult6("groups", miValueList);
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult6);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
+ }
+
+ if (!m_bIsI1)
+ {
+ const CMICmnMIValueConst miValueConst1("i1");
+ const CMICmnMIValueResult miValueResult1("id", miValueConst1);
+ CMICmnMIValueTuple miTuple(miValueResult1);
+
+ const CMICmnMIValueConst miValueConst2("process");
+ const CMICmnMIValueResult miValueResult2("type", miValueConst2);
+ miTuple.Add(miValueResult2);
+
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
+ if (rSessionInfo.m_lldbProcess.IsValid())
+ {
+ const lldb::pid_t pid = rSessionInfo.m_lldbProcess.GetProcessID();
+ const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
+ const CMICmnMIValueConst miValueConst3(strPid);
+ const CMICmnMIValueResult miValueResult3("pid", miValueConst3);
+ miTuple.Add(miValueResult3);
+ }
+
+ if (rSessionInfo.m_lldbTarget.IsValid())
+ {
+ lldb::SBTarget &rTrgt = rSessionInfo.m_lldbTarget;
+ const MIchar *pDir = rTrgt.GetExecutable().GetDirectory();
+ const MIchar *pFileName = rTrgt.GetExecutable().GetFilename();
+ const CMIUtilString strFile(CMIUtilString::Format("%s/%s", pDir, pFileName));
+ const CMICmnMIValueConst miValueConst4(strFile);
+ const CMICmnMIValueResult miValueResult4("executable", miValueConst4);
+ miTuple.Add(miValueResult4);
+ }
+
+ const CMICmnMIValueList miValueList(miTuple);
+ const CMICmnMIValueResult miValueResult5("groups", miValueList);
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult5);
+ m_miResultRecord = miRecordResult;
+ return MIstatus::success;
+ }
+
+ // Build up a list of thread information from tuples
+ VecMIValueTuple_t::const_iterator it = m_vecMIValueTuple.begin();
+ if (it == m_vecMIValueTuple.end())
+ {
+ const CMICmnMIValueConst miValueConst("[]");
+ const CMICmnMIValueResult miValueResult("threads", miValueConst);
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
+ m_miResultRecord = miRecordResult;
+ return MIstatus::success;
+ }
+ CMICmnMIValueList miValueList(*it);
+ ++it;
+ while (it != m_vecMIValueTuple.end())
+ {
+ const CMICmnMIValueTuple &rTuple(*it);
+ miValueList.Add(rTuple);
+
+ // Next
+ ++it;
+ }
+
+ const CMICmnMIValueResult miValueResult("threads", miValueList);
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done, miValueResult);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
-// calls this function to create an instance of *this command.
-// Type: Static method.
-// Args: None.
-// Return: CMICmdBase * - Pointer to a new command.
-// Throws: None.
+// Details: Required by the CMICmdFactory when registering *this command. The factory
+// calls this function to create an instance of *this command.
+// Type: Static method.
+// Args: None.
+// Return: CMICmdBase * - Pointer to a new command.
+// Throws: None.
//--
-CMICmdBase * CMICmdCmdListThreadGroups::CreateSelf( void )
+CMICmdBase *
+CMICmdCmdListThreadGroups::CreateSelf(void)
{
- return new CMICmdCmdListThreadGroups();
+ return new CMICmdCmdListThreadGroups();
}
//---------------------------------------------------------------------------------------
@@ -391,123 +402,130 @@ CMICmdBase * CMICmdCmdListThreadGroups::CreateSelf( void )
//---------------------------------------------------------------------------------------
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdInterpreterExec constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdInterpreterExec constructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdInterpreterExec::CMICmdCmdInterpreterExec( void )
-: m_constStrArgNamedInterpreter( "intepreter" )
-, m_constStrArgNamedCommand( "command" )
+CMICmdCmdInterpreterExec::CMICmdCmdInterpreterExec(void)
+ : m_constStrArgNamedInterpreter("intepreter")
+ , m_constStrArgNamedCommand("command")
{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "interpreter-exec";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdInterpreterExec::CreateSelf;
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "interpreter-exec";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdInterpreterExec::CreateSelf;
}
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdInterpreterExec destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdInterpreterExec destructor.
+// Type: Overrideable.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdInterpreterExec::~CMICmdCmdInterpreterExec( void )
+CMICmdCmdInterpreterExec::~CMICmdCmdInterpreterExec(void)
{
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The parses the command line options
-// arguments to extract values for each of those arguments.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The parses the command line options
+// arguments to extract values for each of those arguments.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdInterpreterExec::ParseArgs( void )
+bool
+CMICmdCmdInterpreterExec::ParseArgs(void)
{
- bool bOk = m_setCmdArgs.Add( *(new CMICmdArgValString( m_constStrArgNamedInterpreter, true, true ) ) );
- bOk = bOk && m_setCmdArgs.Add( *(new CMICmdArgValString( m_constStrArgNamedCommand, true, true, true ) ) );
- return (bOk && ParseValidateCmdOptions() );
+ bool bOk = m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgNamedInterpreter, true, true)));
+ bOk = bOk && m_setCmdArgs.Add(*(new CMICmdArgValString(m_constStrArgNamedCommand, true, true, true)));
+ return (bOk && ParseValidateCmdOptions());
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command does work in this function.
+// The command is likely to communicate with the LLDB SBDebugger in here.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdInterpreterExec::Execute( void )
+bool
+CMICmdCmdInterpreterExec::Execute(void)
{
- CMICMDBASE_GETOPTION( pArgInterpreter, String, m_constStrArgNamedInterpreter );
- CMICMDBASE_GETOPTION( pArgCommand, String, m_constStrArgNamedCommand );
-
- // Handle the interpreter parameter by do nothing on purpose (set to 'handled' in
- // the arg definition above)
- const CMIUtilString & rStrInterpreter( pArgInterpreter->GetValue() ); MIunused( rStrInterpreter );
-
- const CMIUtilString & rStrCommand( pArgCommand->GetValue() );
- CMICmnLLDBDebugSessionInfo & rSessionInfo( CMICmnLLDBDebugSessionInfo::Instance() );
- const lldb::ReturnStatus rtn = rSessionInfo.m_rLldbDebugger.GetCommandInterpreter().HandleCommand( rStrCommand.c_str(), m_lldbResult, true ); MIunused( rtn );
-
- return MIstatus::success;
+ CMICMDBASE_GETOPTION(pArgInterpreter, String, m_constStrArgNamedInterpreter);
+ CMICMDBASE_GETOPTION(pArgCommand, String, m_constStrArgNamedCommand);
+
+ // Handle the interpreter parameter by do nothing on purpose (set to 'handled' in
+ // the arg definition above)
+ const CMIUtilString &rStrInterpreter(pArgInterpreter->GetValue());
+ MIunused(rStrInterpreter);
+
+ const CMIUtilString &rStrCommand(pArgCommand->GetValue());
+ CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
+ const lldb::ReturnStatus rtn =
+ rSessionInfo.m_rLldbDebugger.GetCommandInterpreter().HandleCommand(rStrCommand.c_str(), m_lldbResult, true);
+ MIunused(rtn);
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
-// for the work carried out in the Execute().
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command prepares a MI Record Result
+// for the work carried out in the Execute().
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdInterpreterExec::Acknowledge( void )
+bool
+CMICmdCmdInterpreterExec::Acknowledge(void)
{
- if( m_lldbResult.GetOutputSize() > 0 )
- {
- CMIUtilString strMsg( m_lldbResult.GetOutput() );
- strMsg = strMsg.StripCREndOfLine();
- CMICmnStreamStdout::TextToStdout( strMsg );
-
- // Send the LLDB result message to console so the user can see the result of the
- // command they typed. It is not necessary an error message.
- CMICmnStreamStderr::LLDBMsgToConsole( strMsg );
- }
- if( m_lldbResult.GetErrorSize() > 0 )
- {
- CMIUtilString strMsg( m_lldbResult.GetError() );
- strMsg = strMsg.StripCREndOfLine();
- CMICmnStreamStderr::LLDBMsgToConsole( strMsg );
-
- // Send LLDB's error message to the MI Driver's Log file
- CMICmnStreamStdout::TextToStdout( strMsg );
- }
-
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done );
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
+ if (m_lldbResult.GetOutputSize() > 0)
+ {
+ CMIUtilString strMsg(m_lldbResult.GetOutput());
+ strMsg = strMsg.StripCREndOfLine();
+ CMICmnStreamStdout::TextToStdout(strMsg);
+
+ // Send the LLDB result message to console so the user can see the result of the
+ // command they typed. It is not necessary an error message.
+ CMICmnStreamStderr::LLDBMsgToConsole(strMsg);
+ }
+ if (m_lldbResult.GetErrorSize() > 0)
+ {
+ CMIUtilString strMsg(m_lldbResult.GetError());
+ strMsg = strMsg.StripCREndOfLine();
+ CMICmnStreamStderr::LLDBMsgToConsole(strMsg);
+
+ // Send LLDB's error message to the MI Driver's Log file
+ CMICmnStreamStdout::TextToStdout(strMsg);
+ }
+
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+ m_miResultRecord = miRecordResult;
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
-// calls this function to create an instance of *this command.
-// Type: Static method.
-// Args: None.
-// Return: CMICmdBase * - Pointer to a new command.
-// Throws: None.
+// Details: Required by the CMICmdFactory when registering *this command. The factory
+// calls this function to create an instance of *this command.
+// Type: Static method.
+// Args: None.
+// Return: CMICmdBase * - Pointer to a new command.
+// Throws: None.
//--
-CMICmdBase * CMICmdCmdInterpreterExec::CreateSelf( void )
+CMICmdBase *
+CMICmdCmdInterpreterExec::CreateSelf(void)
{
- return new CMICmdCmdInterpreterExec();
+ return new CMICmdCmdInterpreterExec();
}
//---------------------------------------------------------------------------------------
@@ -515,74 +533,77 @@ CMICmdBase * CMICmdCmdInterpreterExec::CreateSelf( void )
//---------------------------------------------------------------------------------------
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdInferiorTtySet constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdInferiorTtySet constructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdInferiorTtySet::CMICmdCmdInferiorTtySet( void )
+CMICmdCmdInferiorTtySet::CMICmdCmdInferiorTtySet(void)
{
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "inferior-tty-set";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdInferiorTtySet::CreateSelf;
+ // Command factory matches this name with that received from the stdin stream
+ m_strMiCmd = "inferior-tty-set";
+
+ // Required by the CMICmdFactory when registering *this command
+ m_pSelfCreatorFn = &CMICmdCmdInferiorTtySet::CreateSelf;
}
//++ ------------------------------------------------------------------------------------
-// Details: CMICmdCmdInferiorTtySet destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
+// Details: CMICmdCmdInferiorTtySet destructor.
+// Type: Overrideable.
+// Args: None.
+// Return: None.
+// Throws: None.
//--
-CMICmdCmdInferiorTtySet::~CMICmdCmdInferiorTtySet( void )
+CMICmdCmdInferiorTtySet::~CMICmdCmdInferiorTtySet(void)
{
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command does work in this function.
-// The command is likely to communicate with the LLDB SBDebugger in here.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command does work in this function.
+// The command is likely to communicate with the LLDB SBDebugger in here.
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdInferiorTtySet::Execute( void )
+bool
+CMICmdCmdInferiorTtySet::Execute(void)
{
- // Do nothing
-
- return MIstatus::success;
+ // Do nothing
+
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: The invoker requires this function. The command prepares a MI Record Result
-// for the work carried out in the Execute().
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
+// Details: The invoker requires this function. The command prepares a MI Record Result
+// for the work carried out in the Execute().
+// Type: Overridden.
+// Args: None.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
//--
-bool CMICmdCmdInferiorTtySet::Acknowledge( void )
+bool
+CMICmdCmdInferiorTtySet::Acknowledge(void)
{
- const CMICmnMIResultRecord miRecordResult( m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done );
- m_miResultRecord = miRecordResult;
+ const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
+ m_miResultRecord = miRecordResult;
- return MIstatus::success;
+ return MIstatus::success;
}
//++ ------------------------------------------------------------------------------------
-// Details: Required by the CMICmdFactory when registering *this command. The factory
-// calls this function to create an instance of *this command.
-// Type: Static method.
-// Args: None.
-// Return: CMICmdBase * - Pointer to a new command.
-// Throws: None.
+// Details: Required by the CMICmdFactory when registering *this command. The factory
+// calls this function to create an instance of *this command.
+// Type: Static method.
+// Args: None.
+// Return: CMICmdBase * - Pointer to a new command.
+// Throws: None.
//--
-CMICmdBase * CMICmdCmdInferiorTtySet::CreateSelf( void )
+CMICmdBase *
+CMICmdCmdInferiorTtySet::CreateSelf(void)
{
- return new CMICmdCmdInferiorTtySet();
+ return new CMICmdCmdInferiorTtySet();
}