[Lldb-commits] [lldb] r366465 - [LLDB] Remove lldb-mi
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Thu Jul 18 10:06:07 PDT 2019
Author: jdevlieghere
Date: Thu Jul 18 10:06:06 2019
New Revision: 366465
URL: http://llvm.org/viewvc/llvm-project?rev=366465&view=rev
Log:
[LLDB] Remove lldb-mi
As discussed on the mailing list [1], this patch removes the lldb-mi
tool and its tests from the LLDB repository. We moved lldb-mi into a
separate repository on GitHub [2] for downstream users or maintainers to
build and package.
[1] http://lists.llvm.org/pipermail/lldb-dev/2019-July/015103.html
[2] https://github.com/lldb-tools/lldb-mi
Differential revision: https://reviews.llvm.org/D64255
Removed:
lldb/trunk/lit/tools/
lldb/trunk/tools/lldb-mi/CMakeLists.txt
lldb/trunk/tools/lldb-mi/MICmdArgContext.cpp
lldb/trunk/tools/lldb-mi/MICmdArgContext.h
lldb/trunk/tools/lldb-mi/MICmdArgSet.cpp
lldb/trunk/tools/lldb-mi/MICmdArgSet.h
lldb/trunk/tools/lldb-mi/MICmdArgValBase.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValBase.h
lldb/trunk/tools/lldb-mi/MICmdArgValConsume.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValConsume.h
lldb/trunk/tools/lldb-mi/MICmdArgValFile.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValFile.h
lldb/trunk/tools/lldb-mi/MICmdArgValListBase.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValListBase.h
lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.h
lldb/trunk/tools/lldb-mi/MICmdArgValNumber.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValNumber.h
lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.h
lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.h
lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.h
lldb/trunk/tools/lldb-mi/MICmdArgValString.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValString.h
lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.cpp
lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.h
lldb/trunk/tools/lldb-mi/MICmdBase.cpp
lldb/trunk/tools/lldb-mi/MICmdBase.h
lldb/trunk/tools/lldb-mi/MICmdCmd.cpp
lldb/trunk/tools/lldb-mi/MICmdCmd.h
lldb/trunk/tools/lldb-mi/MICmdCmdBreak.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdBreak.h
lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdData.h
lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.h
lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdExec.h
lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdFile.h
lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.h
lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.h
lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.h
lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.h
lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h
lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdStack.h
lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h
lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h
lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h
lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h
lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdThread.h
lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h
lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp
lldb/trunk/tools/lldb-mi/MICmdCmdVar.h
lldb/trunk/tools/lldb-mi/MICmdCommands.cpp
lldb/trunk/tools/lldb-mi/MICmdCommands.h
lldb/trunk/tools/lldb-mi/MICmdData.cpp
lldb/trunk/tools/lldb-mi/MICmdData.h
lldb/trunk/tools/lldb-mi/MICmdFactory.cpp
lldb/trunk/tools/lldb-mi/MICmdFactory.h
lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp
lldb/trunk/tools/lldb-mi/MICmdInterpreter.h
lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp
lldb/trunk/tools/lldb-mi/MICmdInvoker.h
lldb/trunk/tools/lldb-mi/MICmdMgr.cpp
lldb/trunk/tools/lldb-mi/MICmdMgr.h
lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp
lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h
lldb/trunk/tools/lldb-mi/MICmnBase.cpp
lldb/trunk/tools/lldb-mi/MICmnBase.h
lldb/trunk/tools/lldb-mi/MICmnConfig.h
lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h
lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h
lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h
lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h
lldb/trunk/tools/lldb-mi/MICmnLog.cpp
lldb/trunk/tools/lldb-mi/MICmnLog.h
lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp
lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h
lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp
lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h
lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp
lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h
lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp
lldb/trunk/tools/lldb-mi/MICmnMIValue.h
lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp
lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h
lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp
lldb/trunk/tools/lldb-mi/MICmnMIValueList.h
lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp
lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h
lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.cpp
lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.h
lldb/trunk/tools/lldb-mi/MICmnResources.cpp
lldb/trunk/tools/lldb-mi/MICmnResources.h
lldb/trunk/tools/lldb-mi/MICmnStreamStderr.cpp
lldb/trunk/tools/lldb-mi/MICmnStreamStderr.h
lldb/trunk/tools/lldb-mi/MICmnStreamStdin.cpp
lldb/trunk/tools/lldb-mi/MICmnStreamStdin.h
lldb/trunk/tools/lldb-mi/MICmnStreamStdout.cpp
lldb/trunk/tools/lldb-mi/MICmnStreamStdout.h
lldb/trunk/tools/lldb-mi/MICmnThreadMgrStd.cpp
lldb/trunk/tools/lldb-mi/MICmnThreadMgrStd.h
lldb/trunk/tools/lldb-mi/MIDataTypes.h
lldb/trunk/tools/lldb-mi/MIDriver.cpp
lldb/trunk/tools/lldb-mi/MIDriver.h
lldb/trunk/tools/lldb-mi/MIDriverBase.cpp
lldb/trunk/tools/lldb-mi/MIDriverBase.h
lldb/trunk/tools/lldb-mi/MIDriverMain.cpp
lldb/trunk/tools/lldb-mi/MIDriverMgr.cpp
lldb/trunk/tools/lldb-mi/MIDriverMgr.h
lldb/trunk/tools/lldb-mi/MIExtensions.txt
lldb/trunk/tools/lldb-mi/MIReadMe.txt
lldb/trunk/tools/lldb-mi/MIUtilDateTimeStd.cpp
lldb/trunk/tools/lldb-mi/MIUtilDateTimeStd.h
lldb/trunk/tools/lldb-mi/MIUtilDebug.cpp
lldb/trunk/tools/lldb-mi/MIUtilDebug.h
lldb/trunk/tools/lldb-mi/MIUtilFileStd.cpp
lldb/trunk/tools/lldb-mi/MIUtilFileStd.h
lldb/trunk/tools/lldb-mi/MIUtilMapIdToVariant.cpp
lldb/trunk/tools/lldb-mi/MIUtilMapIdToVariant.h
lldb/trunk/tools/lldb-mi/MIUtilSingletonBase.h
lldb/trunk/tools/lldb-mi/MIUtilSingletonHelper.h
lldb/trunk/tools/lldb-mi/MIUtilString.cpp
lldb/trunk/tools/lldb-mi/MIUtilString.h
lldb/trunk/tools/lldb-mi/MIUtilThreadBaseStd.cpp
lldb/trunk/tools/lldb-mi/MIUtilThreadBaseStd.h
lldb/trunk/tools/lldb-mi/MIUtilVariant.cpp
lldb/trunk/tools/lldb-mi/MIUtilVariant.h
lldb/trunk/tools/lldb-mi/Platform.h
lldb/trunk/tools/lldb-mi/lldb-Info.plist
lldb/trunk/tools/lldb-mi/module.modulemap
lldb/trunk/unittests/tools/lldb-mi/
Modified:
lldb/trunk/tools/CMakeLists.txt
lldb/trunk/unittests/tools/CMakeLists.txt
Modified: lldb/trunk/tools/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/CMakeLists.txt?rev=366465&r1=366464&r2=366465&view=diff
==============================================================================
--- lldb/trunk/tools/CMakeLists.txt (original)
+++ lldb/trunk/tools/CMakeLists.txt Thu Jul 18 10:06:06 2019
@@ -8,7 +8,6 @@ add_subdirectory(intel-features)
add_subdirectory(lldb-test EXCLUDE_FROM_ALL)
add_lldb_tool_subdirectory(lldb-instr)
-add_lldb_tool_subdirectory(lldb-mi)
add_lldb_tool_subdirectory(lldb-vscode)
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
Removed: lldb/trunk/tools/lldb-mi/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/CMakeLists.txt?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/CMakeLists.txt (original)
+++ lldb/trunk/tools/lldb-mi/CMakeLists.txt (removed)
@@ -1,109 +0,0 @@
-if ( CMAKE_SYSTEM_NAME MATCHES "Windows" OR CMAKE_SYSTEM_NAME MATCHES "NetBSD" )
- add_definitions( -DIMPORT_LIBLLDB )
- list(APPEND extra_libs lldbHost)
-endif ()
-
-if (HAVE_LIBPTHREAD)
- list(APPEND extra_libs pthread)
-endif ()
-
-# We need to include the llvm components we depend on manually, as liblldb does
-# not re-export those.
-set(LLVM_LINK_COMPONENTS Support)
-add_lldb_tool(lldb-mi
- MICmdArgContext.cpp
- MICmdArgSet.cpp
- MICmdArgValBase.cpp
- MICmdArgValConsume.cpp
- MICmdArgValFile.cpp
- MICmdArgValListBase.cpp
- MICmdArgValListOfN.cpp
- MICmdArgValNumber.cpp
- MICmdArgValOptionLong.cpp
- MICmdArgValOptionShort.cpp
- MICmdArgValPrintValues.cpp
- MICmdArgValString.cpp
- MICmdArgValThreadGrp.cpp
- MICmdBase.cpp
- MICmdCommands.cpp
- MICmdCmd.cpp
- MICmdCmdBreak.cpp
- MICmdCmdData.cpp
- MICmdCmdEnviro.cpp
- MICmdCmdExec.cpp
- MICmdCmdFile.cpp
- MICmdCmdGdbInfo.cpp
- MICmdCmdGdbSet.cpp
- MICmdCmdGdbShow.cpp
- MICmdCmdGdbThread.cpp
- MICmdCmdMiscellanous.cpp
- MICmdCmdStack.cpp
- MICmdCmdSupportInfo.cpp
- MICmdCmdSupportList.cpp
- MICmdCmdSymbol.cpp
- MICmdCmdTarget.cpp
- MICmdCmdThread.cpp
- MICmdCmdTrace.cpp
- MICmdCmdVar.cpp
- MICmdData.cpp
- MICmdFactory.cpp
- MICmdInterpreter.cpp
- MICmdInvoker.cpp
- MICmdMgr.cpp
- MICmdMgrSetCmdDeleteCallback.cpp
- MICmnBase.cpp
- MICmnLLDBBroadcaster.cpp
- MICmnLLDBDebugger.cpp
- MICmnLLDBDebuggerHandleEvents.cpp
- MICmnLLDBDebugSessionInfo.cpp
- MICmnLLDBDebugSessionInfoVarObj.cpp
- MICmnLLDBProxySBValue.cpp
- MICmnLLDBUtilSBValue.cpp
- MICmnLog.cpp
- MICmnLogMediumFile.cpp
- MICmnMIOutOfBandRecord.cpp
- MICmnMIResultRecord.cpp
- MICmnMIValue.cpp
- MICmnMIValueConst.cpp
- MICmnMIValueList.cpp
- MICmnMIValueResult.cpp
- MICmnMIValueTuple.cpp
- MICmnResources.cpp
- MICmnStreamStderr.cpp
- MICmnStreamStdin.cpp
- MICmnStreamStdout.cpp
- MICmnThreadMgrStd.cpp
- MIDriver.cpp
- MIDriverBase.cpp
- MIDriverMain.cpp
- MIDriverMgr.cpp
- MIUtilDateTimeStd.cpp
- MIUtilDebug.cpp
- MIUtilFileStd.cpp
- MIUtilMapIdToVariant.cpp
- MIUtilString.cpp
- MIUtilThreadBaseStd.cpp
- MIUtilVariant.cpp
-
- LINK_LIBS
- liblldb
- ${host_lib}
- ${extra_libs}
-
- LINK_COMPONENTS
- Support
- )
-
-if(LLDB_BUILD_FRAMEWORK)
- # In the build-tree, we know the exact path to the framework directory.
- # The installed framework can be in different locations.
- get_target_property(framework_build_dir liblldb LIBRARY_OUTPUT_DIRECTORY)
- lldb_setup_rpaths(lldb-mi
- BUILD_RPATH
- "${framework_build_dir}"
- INSTALL_RPATH
- "@loader_path/../../../SharedFrameworks"
- "@loader_path/../../System/Library/PrivateFrameworks"
- "@loader_path/../../Library/PrivateFrameworks"
- )
-endif()
Removed: lldb/trunk/tools/lldb-mi/MICmdArgContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgContext.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgContext.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgContext.cpp (removed)
@@ -1,221 +0,0 @@
-//===-- MICmdArgContext.cpp -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgContext constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgContext::CMICmdArgContext() {}
-
-//++
-// Details: CMICmdArgContext constructor.
-// Type: Method.
-// Args: vrCmdLineArgsRaw - (R) The text description of the arguments
-// options.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgContext::CMICmdArgContext(const CMIUtilString &vrCmdLineArgsRaw)
- : m_strCmdArgsAndOptions(vrCmdLineArgsRaw) {}
-
-//++
-// Details: CMICmdArgContext destructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgContext::~CMICmdArgContext() {}
-
-//++
-// Details: Retrieve the remainder of the command's argument options left to
-// parse.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Argument options text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmdArgContext::GetArgsLeftToParse() const {
- return m_strCmdArgsAndOptions;
-}
-
-//++
-// Details: Ask if this arguments string has any arguments.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Has one or more arguments present, false = no
-// arguments.
-// Throws: None.
-//--
-bool CMICmdArgContext::IsEmpty() const {
- return m_strCmdArgsAndOptions.empty();
-}
-
-//++
-// Details: Remove the argument from the options text and any space after the
-// argument
-// if applicable.
-// Type: Method.
-// Args: vArg - (R) The name of the argument.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgContext::RemoveArg(const CMIUtilString &vArg) {
- if (vArg.empty())
- return MIstatus::success;
-
- const size_t nLen = vArg.length();
- const size_t nLenCntxt = m_strCmdArgsAndOptions.length();
- if (nLen > nLenCntxt)
- return MIstatus::failure;
-
- size_t nExtraSpace = 0;
- size_t nPos = m_strCmdArgsAndOptions.find(vArg);
- while (1) {
- if (nPos == std::string::npos)
- return MIstatus::success;
-
- bool bPass1 = false;
- if (nPos != 0) {
- if (m_strCmdArgsAndOptions[nPos - 1] == ' ')
- bPass1 = true;
- } else
- bPass1 = true;
-
- const size_t nEnd = nPos + nLen;
-
- if (bPass1) {
- bool bPass2 = false;
- if (nEnd < nLenCntxt) {
- if (m_strCmdArgsAndOptions[nEnd] == ' ') {
- bPass2 = true;
- nExtraSpace = 1;
- }
- } else
- bPass2 = true;
-
- if (bPass2)
- break;
- }
-
- nPos = m_strCmdArgsAndOptions.find(vArg, nEnd);
- }
-
- const size_t nPosEnd = nLen + nExtraSpace;
- m_strCmdArgsAndOptions = m_strCmdArgsAndOptions.replace(nPos, nPosEnd, "");
- m_strCmdArgsAndOptions = m_strCmdArgsAndOptions.Trim();
-
- return MIstatus::success;
-}
-
-//++
-// Details: Remove the argument at the Nth word position along in the context
-// string.
-// Any space after the argument is removed if applicable. A search is
-// not
-// performed as there may be more than one vArg with the same 'name' in
-// the
-// context string.
-// Type: Method.
-// Args: vArg - (R) The name of the argument.
-// nArgIndex - (R) The word count position to which to remove the
-// vArg word.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgContext::RemoveArgAtPos(const CMIUtilString &vArg,
- size_t nArgIndex) {
- size_t nWordIndex = 0;
- CMIUtilString strBuildContextUp;
- const CMIUtilString::VecString_t vecWords(GetArgs());
- const bool bSpaceRequired(GetNumberArgsPresent() > 2);
-
- CMIUtilString::VecString_t::const_iterator it = vecWords.begin();
- const CMIUtilString::VecString_t::const_iterator itEnd = vecWords.end();
- while (it != itEnd) {
- const CMIUtilString &rWord(*it);
- if (nWordIndex++ != nArgIndex) {
- // Single words
- strBuildContextUp += rWord;
- if (bSpaceRequired)
- strBuildContextUp += " ";
- } else {
- // If quoted loose quoted text
- if (++it != itEnd) {
- CMIUtilString words = rWord;
- while (vArg != words) {
- if (bSpaceRequired)
- words += " ";
- words += *it;
- if (++it == itEnd)
- break;
- }
- if (it != itEnd)
- --it;
- }
- }
-
- // Next
- if (it != itEnd)
- ++it;
- }
-
- m_strCmdArgsAndOptions = strBuildContextUp;
- m_strCmdArgsAndOptions = m_strCmdArgsAndOptions.Trim();
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve number of arguments or options present in the command's
-// option text.
-// Type: Method.
-// Args: None.
-// Return: size_t - 0 to n arguments present.
-// Throws: None.
-//--
-size_t CMICmdArgContext::GetNumberArgsPresent() const {
- CMIUtilString::VecString_t vecOptions;
- return m_strCmdArgsAndOptions.SplitConsiderQuotes(" ", vecOptions);
-}
-
-//++
-// Details: Retrieve all the arguments or options remaining in *this context.
-// Type: Method.
-// Args: None.
-// Return: MIUtilString::VecString_t - List of args remaining.
-// Throws: None.
-//--
-CMIUtilString::VecString_t CMICmdArgContext::GetArgs() const {
- CMIUtilString::VecString_t vecOptions;
- m_strCmdArgsAndOptions.SplitConsiderQuotes(" ", vecOptions);
- return vecOptions;
-}
-
-//++
-// Details: Copy assignment operator.
-// Type: Method.
-// Args: vOther - (R) The variable to copy from.
-// Return: CMIUtilString & - this object.
-// Throws: None.
-//--
-CMICmdArgContext &CMICmdArgContext::operator=(const CMICmdArgContext &vOther) {
- if (this != &vOther) {
- m_strCmdArgsAndOptions = vOther.m_strCmdArgsAndOptions;
- }
-
- return *this;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgContext.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgContext.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgContext.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgContext.h (removed)
@@ -1,43 +0,0 @@
-//===-- MICmdArgContext.h ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MIUtilString.h"
-
-//++
-//============================================================================
-// Details: MI common code class. Command arguments and options string. Holds
-// the context string.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgContext {
- // Methods:
-public:
- /* ctor */ CMICmdArgContext();
- /* ctor */ CMICmdArgContext(const CMIUtilString &vrCmdLineArgsRaw);
- //
- const CMIUtilString &GetArgsLeftToParse() const;
- size_t GetNumberArgsPresent() const;
- CMIUtilString::VecString_t GetArgs() const;
- bool IsEmpty() const;
- bool RemoveArg(const CMIUtilString &vArg);
- bool RemoveArgAtPos(const CMIUtilString &vArg, size_t nArgIndex);
- //
- CMICmdArgContext &operator=(const CMICmdArgContext &vOther);
-
- // Overridden:
-public:
- // From CMIUtilString
- /* dtor */ virtual ~CMICmdArgContext();
-
- // Attributes:
-private:
- CMIUtilString m_strCmdArgsAndOptions;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgSet.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgSet.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgSet.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgSet.cpp (removed)
@@ -1,386 +0,0 @@
-//===-- MICmdArgSet.cpp -----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgSet.h"
-#include "MICmdArgValBase.h"
-#include "MICmnLog.h"
-#include "MICmnResources.h"
-
-//++
-// Details: CMICmdArgSet constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgSet::CMICmdArgSet()
- : m_bIsArgsPresentButNotHandledByCmd(false), m_constStrCommaSpc(", ") {}
-
-//++
-// Details: CMICmdArgSet destructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgSet::~CMICmdArgSet() {
- // Tidy up
- Destroy();
-}
-
-//++
-// Details: Release resources used by *this container object.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdArgSet::Destroy() {
- // Delete command argument objects
- if (!m_setCmdArgs.empty()) {
- SetCmdArgs_t::iterator it = m_setCmdArgs.begin();
- while (it != m_setCmdArgs.end()) {
- CMICmdArgValBase *pArg(*it);
- delete pArg;
-
- // Next
- ++it;
- }
- m_setCmdArgs.clear();
- }
-
- m_setCmdArgsThatNotValid.clear();
- m_setCmdArgsThatAreMissing.clear();
- m_setCmdArgsNotHandledByCmd.clear();
- m_setCmdArgsMissingInfo.clear();
- m_bIsArgsPresentButNotHandledByCmd = false;
-}
-
-//++
-// Details: Retrieve the state flag indicating that the command set up ready to
-// parse
-// command arguments or options found that one or more arguments was
-// indeed
-// present but not handled. This is given as a warning in the MI log
-// file.
-// Type: Method.
-// Args: None.
-// Return: bool - True = one or more args not handled, false = all args handled
-// Throws: None.
-//--
-bool CMICmdArgSet::IsArgsPresentButNotHandledByCmd() const {
- return m_bIsArgsPresentButNotHandledByCmd;
-}
-
-//++
-// Details: Add the list of command's arguments to parse and validate another
-// one.
-// Type: Method.
-// Args: vArg - (R) A command argument object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdArgSet::Add(CMICmdArgValBase *vArg) { m_setCmdArgs.push_back(vArg); }
-
-//++
-// Details: After validating an options line of text (the context) and there is
-// a failure,
-// it is likely a mandatory command argument that is required is
-// missing. This
-// function returns the argument that should be present.
-// Type: Method.
-// Args: None.
-// Return: SetCmdArgs_t & - Set of argument objects.
-// Throws: None.
-//--
-const CMICmdArgSet::SetCmdArgs_t &CMICmdArgSet::GetArgsThatAreMissing() const {
- return m_setCmdArgsThatAreMissing;
-}
-
-//++
-// Details: After validating an options line of text (the context) and there is
-// a failure,
-// it may be because one or more arguments were unable to extract a
-// value. This
-// function returns the argument that were found to be invalid.
-// Type: Method.
-// Args: None.
-// Return: SetCmdArgs_t & - Set of argument objects.
-// Throws: None.
-//--
-const CMICmdArgSet::SetCmdArgs_t &CMICmdArgSet::GetArgsThatInvalid() const {
- return m_setCmdArgsThatNotValid;
-}
-
-//++
-// Details: The list of argument or option (objects) that were specified by the
-// command
-// and so recognised when parsed but were not handled. Ideally the
-// command
-// should handle all arguments and options presented to it. The command
-// sends
-// warning to the MI log file to say that these options were not
-// handled.
-// Used as one way to determine option that maybe should really be
-// implemented
-// and not just ignored.
-// Type: Method.
-// Args: None.
-// Return: SetCmdArgs_t & - Set of argument objects.
-// Throws: None.
-//--
-const CMICmdArgSet::SetCmdArgs_t &CMICmdArgSet::GetArgsNotHandledByCmd() const {
- return m_setCmdArgsNotHandledByCmd;
-}
-
-//++
-// Details: Given a set of command argument objects parse the context option
-// string to
-// find those argument and retrieve their value. If the function fails
-// call
-// GetArgsThatAreMissing() to see which commands that were mandatory
-// were
-// missing or failed to parse.
-// Type: Method.
-// Args: vStrMiCmd - (R) Command's name.
-// vCmdArgsText - (RW) A command's options or argument.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgSet::Validate(const CMIUtilString &vStrMiCmd,
- CMICmdArgContext &vwCmdArgsText) {
- m_cmdArgContext = vwCmdArgsText;
-
- // Iterate all the arguments or options required by a command
- SetCmdArgs_t::const_iterator it = m_setCmdArgs.begin();
- while (it != m_setCmdArgs.end()) {
- CMICmdArgValBase *pArg = *it;
-
- if (!pArg->Validate(vwCmdArgsText)) {
- if (pArg->GetFound()) {
- if (pArg->GetIsMissingOptions())
- m_setCmdArgsMissingInfo.push_back(pArg);
- else if (!pArg->GetValid())
- m_setCmdArgsThatNotValid.push_back(pArg);
- } else if (pArg->GetIsMandatory())
- m_setCmdArgsThatAreMissing.push_back(pArg);
- }
-
- if (pArg->GetFound() && !pArg->GetIsHandledByCmd()) {
- m_bIsArgsPresentButNotHandledByCmd = true;
- m_setCmdArgsNotHandledByCmd.push_back(pArg);
- }
-
- // Next
- ++it;
- }
-
- // report any issues with arguments/options
- if (IsArgsPresentButNotHandledByCmd())
- WarningArgsNotHandledbyCmdLogFile(vStrMiCmd);
-
- return ValidationFormErrorMessages(vwCmdArgsText);
-}
-
-//++
-// Details: Having validated the command's options text and failed for some
-// reason form
-// the error message made up with the faults found.
-// Type: Method.
-// vCmdArgsText - (RW) A command's options or argument.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgSet::ValidationFormErrorMessages(
- const CMICmdArgContext &vwCmdArgsText) {
- CMIUtilString strListMissing;
- CMIUtilString strListInvalid;
- CMIUtilString strListMissingInfo;
- const bool bArgsMissing = (m_setCmdArgsThatAreMissing.size() > 0);
- const bool bArgsInvalid = (m_setCmdArgsThatNotValid.size() > 0);
- const bool bArgsMissingInfo = (m_setCmdArgsMissingInfo.size() > 0);
- if (!(bArgsMissing || bArgsInvalid || bArgsMissingInfo))
- return MIstatus::success;
- if (bArgsMissing) {
- MIuint i = 0;
- SetCmdArgs_t::const_iterator it = m_setCmdArgsThatAreMissing.begin();
- while (it != m_setCmdArgsThatAreMissing.end()) {
- if (i++ > 0)
- strListMissing += m_constStrCommaSpc;
-
- const CMICmdArgValBase *pArg(*it);
- strListMissing += pArg->GetName();
-
- // Next
- ++it;
- }
- }
- if (bArgsInvalid) {
- MIuint i = 0;
- SetCmdArgs_t::const_iterator it = m_setCmdArgsThatNotValid.begin();
- while (it != m_setCmdArgsThatNotValid.end()) {
- if (i++ > 0)
- strListMissing += m_constStrCommaSpc;
-
- const CMICmdArgValBase *pArg(*it);
- strListInvalid += pArg->GetName();
-
- // Next
- ++it;
- }
- }
- if (bArgsMissingInfo) {
- MIuint i = 0;
- SetCmdArgs_t::const_iterator it = m_setCmdArgsMissingInfo.begin();
- while (it != m_setCmdArgsMissingInfo.end()) {
- if (i++ > 0)
- strListMissingInfo += m_constStrCommaSpc;
-
- const CMICmdArgValBase *pArg(*it);
- strListMissingInfo += pArg->GetName();
-
- // Next
- ++it;
- }
- }
-
- bool bHaveOneError = false;
- CMIUtilString strError = MIRSRC(IDS_CMD_ARGS_ERR_PREFIX_MSG);
- if (bArgsMissing && bArgsInvalid) {
- bHaveOneError = true;
- strError +=
- CMIUtilString::Format(MIRSRC(IDS_CMD_ARGS_ERR_VALIDATION_MAN_INVALID),
- strListMissing.c_str(), strListInvalid.c_str());
- }
- if (bArgsMissing) {
- if (bHaveOneError)
- strError += ". ";
- bHaveOneError = true;
- strError += CMIUtilString::Format(
- MIRSRC(IDS_CMD_ARGS_ERR_VALIDATION_MANDATORY), strListMissing.c_str());
- }
- if (bArgsMissingInfo) {
- if (bHaveOneError)
- strError += ". ";
- bHaveOneError = true;
- strError +=
- CMIUtilString::Format(MIRSRC(IDS_CMD_ARGS_ERR_VALIDATION_MISSING_INF),
- strListMissingInfo.c_str());
- }
- if (bArgsInvalid) {
- if (bHaveOneError)
- strError += ". ";
- bHaveOneError = true;
- strError += CMIUtilString::Format(
- MIRSRC(IDS_CMD_ARGS_ERR_VALIDATION_INVALID), strListInvalid.c_str());
- }
- if (!vwCmdArgsText.IsEmpty()) {
- if (bHaveOneError)
- strError += ". ";
- bHaveOneError = true;
- strError +=
- CMIUtilString::Format(MIRSRC(IDS_CMD_ARGS_ERR_CONTEXT_NOT_ALL_EATTEN),
- vwCmdArgsText.GetArgsLeftToParse().c_str());
- }
-
- if (bHaveOneError) {
- SetErrorDescription(strError);
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Ask if the command's argument options text had any arguments.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Has one or more arguments present, false = no
-// arguments.
-// Throws: None.
-//--
-bool CMICmdArgSet::IsArgContextEmpty() const {
- return m_cmdArgContext.IsEmpty();
-}
-
-//++
-// Details: Retrieve the number of arguments that are being used for the
-// command.
-// Type: Method.
-// Args: None.
-// Return: size_t - Argument count.
-// Throws: None.
-//--
-size_t CMICmdArgSet::GetCount() const { return m_setCmdArgs.size(); }
-
-//++
-// Details: Given a set of command argument objects retrieve the argument with
-// the
-// specified name.
-// Type: Method.
-// Args: vpArg - (W) A pointer to a command's argument object.
-// Return: True - Argument found.
-// False - Argument not found.
-// Throws: None.
-//--
-bool CMICmdArgSet::GetArg(const CMIUtilString &vArgName,
- CMICmdArgValBase *&vpArg) const {
- bool bFound = false;
- SetCmdArgs_t::const_iterator it = m_setCmdArgs.begin();
- while (it != m_setCmdArgs.end()) {
- CMICmdArgValBase *pArg(*it);
- if (pArg->GetName() == vArgName) {
- bFound = true;
- vpArg = pArg;
- break;
- }
-
- // Next
- ++it;
- }
-
- return bFound;
-}
-
-//++
-// Details: Write a warning message to the MI Log file about the command's
-// arguments or
-// options that were found present but not handled.
-// Type: Method.
-// Args: vrCmdName - (R) The command's name.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdArgSet::WarningArgsNotHandledbyCmdLogFile(
- const CMIUtilString &vrCmdName) {
-#if MICONFIG_GIVE_WARNING_CMD_ARGS_NOT_HANDLED
-
- CMIUtilString strArgsNotHandled;
- const CMICmdArgSet::SetCmdArgs_t &rSetArgs = GetArgsNotHandledByCmd();
- MIuint nCnt = 0;
- CMICmdArgSet::SetCmdArgs_t::const_iterator it = rSetArgs.begin();
- while (it != rSetArgs.end()) {
- if (nCnt++ > 0)
- strArgsNotHandled += m_constStrCommaSpc;
- const CMICmdArgValBase *pArg = *it;
- strArgsNotHandled += pArg->GetName();
-
- // Next
- ++it;
- }
-
- const CMIUtilString strWarningMsg(
- CMIUtilString::Format(MIRSRC(IDS_CMD_WRN_ARGS_NOT_HANDLED),
- vrCmdName.c_str(), strArgsNotHandled.c_str()));
- m_pLog->WriteLog(strWarningMsg);
-
-#endif // MICONFIG_GIVE_WARNING_CMD_ARGS_NOT_HANDLED
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgSet.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgSet.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgSet.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgSet.h (removed)
@@ -1,107 +0,0 @@
-//===-- MICmdArgSet.h -------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-#include <vector>
-
-#include "MICmdArgContext.h"
-#include "MICmnBase.h"
-
-// Declarations:
-class CMICmdArgValBase;
-
-//++
-//============================================================================
-// Details: MI common code class. Command arguments container class.
-// A command may have one or more arguments of which some may be
-// optional.
-// *this class contains a list of the command's arguments which are
-// validates against the commands argument options string (context
-// string).
-// Each argument tries to extract the value it is looking for.
-// Argument objects added to *this container are owned by this
-// container
-// and are deleted when this container goes out of scope. Allocate
-// argument
-// objects on the heap.
-// It is assumed the arguments to be parsed are read from left to right
-// in
-// order. The order added to *this container is the order they will
-// parsed.
-//--
-class CMICmdArgSet : public CMICmnBase {
- // Classes:
-public:
- //++
- // Description: ArgSet's interface for command arguments to implement.
- //--
- class IArg {
- public:
- virtual bool GetFound() const = 0;
- virtual bool GetIsHandledByCmd() const = 0;
- virtual bool GetIsMandatory() const = 0;
- virtual bool GetIsMissingOptions() const = 0;
- virtual const CMIUtilString &GetName() const = 0;
- virtual bool GetValid() const = 0;
- virtual bool Validate(CMICmdArgContext &vwArgContext) = 0;
-
- virtual ~IArg() = default;
- };
-
- // Typedefs:
- typedef std::vector<CMICmdArgValBase *> SetCmdArgs_t;
-
- // Methods:
- CMICmdArgSet();
-
- void Add(CMICmdArgValBase *vArg);
- bool GetArg(const CMIUtilString &vArgName, CMICmdArgValBase *&vpArg) const;
- const SetCmdArgs_t &GetArgsThatAreMissing() const;
- const SetCmdArgs_t &GetArgsThatInvalid() const;
- size_t GetCount() const;
- bool IsArgContextEmpty() const;
- bool IsArgsPresentButNotHandledByCmd() const;
- void WarningArgsNotHandledbyCmdLogFile(const CMIUtilString &vrCmdName);
- bool Validate(const CMIUtilString &vStrMiCmd,
- CMICmdArgContext &vwCmdArgsText);
-
- // Overrideable:
- ~CMICmdArgSet() override;
-
- // Methods:
-private:
- const SetCmdArgs_t &GetArgsNotHandledByCmd() const;
- void Destroy(); // Release resources used by *this object
- bool ValidationFormErrorMessages(const CMICmdArgContext &vwCmdArgsText);
-
- // Attributes:
- bool m_bIsArgsPresentButNotHandledByCmd; // True = The driver's client
- // presented the command with options
- // recognised but not handled by
- // a command, false = all args handled
- SetCmdArgs_t m_setCmdArgs; // The set of arguments that are that the command
- // is expecting to find in the options string
- SetCmdArgs_t m_setCmdArgsThatAreMissing; // The set of arguments that are
- // required by the command but are
- // missing
- SetCmdArgs_t m_setCmdArgsThatNotValid; // The set of arguments found in the
- // text but for some reason unable to
- // extract a value
- SetCmdArgs_t m_setCmdArgsNotHandledByCmd; // The set of arguments specified by
- // the command which were present to
- // the command but not handled
- SetCmdArgs_t m_setCmdArgsMissingInfo; // The set of arguments that were
- // present but were found to be missing
- // additional information i.e.
- // --thread 3 but 3 is missing
- CMICmdArgContext m_cmdArgContext; // Copy of the command's argument options
- // text before validate takes place (empties
- // it of content)
- const CMIUtilString m_constStrCommaSpc;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValBase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValBase.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValBase.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValBase.cpp (removed)
@@ -1,129 +0,0 @@
-//===-- MICmdArgValBase.cpp -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "MICmdArgValBase.h"
-#include "MICmdArgContext.h"
-#include "MIUtilString.h"
-
-//++
-// Details: CMICmdArgValBase constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValBase::CMICmdArgValBase()
- : m_bFound(false), m_bValid(false), m_bMandatory(false), m_bHandled(false),
- m_bIsMissingOptions(false) {}
-
-//++
-// Details: CMICmdArgValBase constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValBase::CMICmdArgValBase(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd)
- : m_bFound(false), m_bValid(false), m_bMandatory(vbMandatory),
- m_strArgName(vrArgName), m_bHandled(vbHandleByCmd),
- m_bIsMissingOptions(false) {}
-
-//++
-// Details: Retrieve the state flag of whether the argument is handled by the
-// command or
-// not.
-// Type: Method.
-// Args: None.
-// Return: True - Command needs more information.
-// False - All information is present as expected.
-// Throws: None.
-//--
-bool CMICmdArgValBase::GetIsMissingOptions() const {
- return m_bIsMissingOptions;
-}
-
-//++
-// Details: Retrieve the state flag of whether the argument is handled by the
-// command or
-// not.
-// Type: Method.
-// Args: None.
-// Return: True - Command handles *this argument or option.
-// False - Not handled (argument specified but ignored).
-// Throws: None.
-//--
-bool CMICmdArgValBase::GetIsHandledByCmd() const { return m_bHandled; }
-
-//++
-// Details: Retrieve the name of *this argument.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Return the text name.
-// Throws: None.
-//--
-const CMIUtilString &CMICmdArgValBase::GetName() const { return m_strArgName; }
-
-//++
-// Details: Retrieve the state flag of whether the argument was found in the
-// command's
-// argument / options string.
-// Type: Method.
-// Args: None.
-// Return: True - Argument found.
-// False - Argument not found.
-// Throws: None.
-//--
-bool CMICmdArgValBase::GetFound() const { return m_bFound; }
-
-//++
-// Details: Retrieve the state flag indicating whether the value was obtained
-// from the
-// text arguments string and is valid.
-// Type: Method.
-// Args: None.
-// Return: True - Argument valid.
-// False - Argument not valid.
-// Throws: None.
-//--
-bool CMICmdArgValBase::GetValid() const { return m_bValid; }
-
-//++
-// Details: Retrieve the state flag indicating whether *this argument is a
-// mandatory
-// argument for the command or is optional to be present.
-// Type: Method.
-// Args: None.
-// Return: True - Mandatory.
-// False - Optional.
-// Throws: None.
-//--
-bool CMICmdArgValBase::GetIsMandatory() const { return m_bMandatory; }
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// value *this
-// argument is looking for.
-// Type: Overrideable.
-// Args: vArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValBase::Validate(CMICmdArgContext &vwArgContext) {
- MIunused(vwArgContext);
-
- // Override to implement
-
- return MIstatus::failure;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValBase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValBase.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValBase.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValBase.h (removed)
@@ -1,115 +0,0 @@
-//===-- MICmdArgValBase.h ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-#include "MICmdArgSet.h"
-#include "MIUtilString.h"
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument base class. Arguments objects
-// needing specialization derived from *this class. An argument knows
-// what type of argument it is and how it is to interpret the options
-// (context) string to find and validate a matching argument and so
-// extract a value from it.
-// Argument objects are added to the CMICmdArgSet container object.
-// Once added the container they belong to that contain and will be
-// deleted when the container goes out of scope. Allocate argument
-// objects on the heap and pass in to the Add().
-// Note the code is written such that a command will produce an error
-// should it be presented with arguments or options it does not
-// understand.
-// A command can recognise an option or argument then ignore if it
-// wishes (a warning is sent to the MI's Log file). This is so it is
-// hardwired to fail and catch arguments or options that presented by
-// different driver clients.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValBase : public CMICmdArgSet::IArg {
- // Methods:
-public:
- CMICmdArgValBase();
- CMICmdArgValBase(const CMIUtilString &vrArgName, const bool vbMandatory,
- const bool vbHandleByCmd);
-
- // Overrideable:
- ~CMICmdArgValBase() override = default;
-
- // Overridden:
- // From CMICmdArgSet::IArg
- bool GetFound() const override;
- bool GetIsHandledByCmd() const override;
- bool GetIsMandatory() const override;
- bool GetIsMissingOptions() const override;
- const CMIUtilString &GetName() const override;
- bool GetValid() const override;
- bool Validate(CMICmdArgContext &vwArgContext) override;
-
- // Attributes:
-protected:
- bool
- m_bFound; // True = yes found in arguments options text, false = not found
- bool m_bValid; // True = yes argument parsed and valid, false = not valid
- bool
- m_bMandatory; // True = yes arg must be present, false = optional argument
- CMIUtilString m_strArgName;
- bool m_bHandled; // True = Command processes *this option, false = not handled
- bool m_bIsMissingOptions; // True = Command needs more information, false = ok
-};
-
-//++
-//============================================================================
-// Details: MI common code class. Templated command argument base class.
-//--
-template <class T> class CMICmdArgValBaseTemplate : public CMICmdArgValBase {
- // Methods:
-public:
- CMICmdArgValBaseTemplate() = default;
- CMICmdArgValBaseTemplate(const CMIUtilString &vrArgName,
- const bool vbMandatory, const bool vbHandleByCmd);
- //
- const T &GetValue() const;
-
- // Overrideable:
- ~CMICmdArgValBaseTemplate() override = default;
-
- // Attributes:
-protected:
- T m_argValue;
-};
-
-//++
-// Details: CMICmdArgValBaseTemplate constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-template <class T>
-CMICmdArgValBaseTemplate<T>::CMICmdArgValBaseTemplate(
- const CMIUtilString &vrArgName, const bool vbMandatory,
- const bool vbHandleByCmd)
- : CMICmdArgValBase(vrArgName, vbMandatory, vbHandleByCmd) {}
-
-//++
-// Details: Retrieve the value the argument parsed from the command's argument /
-// options
-// text string.
-// Type: Method.
-// Args: None.
-// Return: Template type & - The arg value of *this object.
-// Throws: None.
-//--
-template <class T> const T &CMICmdArgValBaseTemplate<T>::GetValue() const {
- return m_argValue;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValConsume.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValConsume.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValConsume.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValConsume.cpp (removed)
@@ -1,88 +0,0 @@
-//===-- MICmdArgValConsume.cpp ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValConsume.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValConsume constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValConsume::CMICmdArgValConsume() {}
-
-//++
-// Details: CMICmdArgValConsume constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValConsume::CMICmdArgValConsume(const CMIUtilString &vrArgName,
- const bool vbMandatory)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, true) {}
-
-//++
-// Details: CMICmdArgValConsume destructor.
-// Type: Overidden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValConsume::~CMICmdArgValConsume() {}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// value *this
-// argument is looking for.
-// Type: Overridden.
-// Args: vwArgContext - (R) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValConsume::Validate(CMICmdArgContext &vwArgContext) {
- if (vwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- // Consume the optional file, line, linenum arguments till the mode '--'
- // argument
- const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rTxt(*it);
-
- if (rTxt == "--") {
- m_bFound = true;
- m_bValid = true;
- if (!vwArgContext.RemoveArg(rTxt))
- return MIstatus::failure;
- return MIstatus::success;
- }
- // Next
- ++it;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Nothing to examine as we just want to consume the argument or option
-// (ignore
-// it).
-// Type: Method.
-// Args: None.
-// Return: bool - True = yes ok, false = not ok.
-// Throws: None.
-//--
-bool CMICmdArgValConsume::IsOk() const { return true; }
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValConsume.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValConsume.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValConsume.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValConsume.h (removed)
@@ -1,53 +0,0 @@
-//===-- MICmdArgValConsume.h ------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument. This type having recognised its argument name just
-// consumes
-// that argument or option (ignores it). This is the so the validation
-// process can then ask if all arguments or options have been
-// recognised
-// other an error will occurred "argument not recognised". For example
-// this can be used to consume the "--" text which is not an argument
-// in
-// itself. Normally the GetValue() function (in base class) would
-// return
-// a value for the argument but is not the case for *this argument type
-// object.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValConsume : public CMICmdArgValBaseTemplate<CMIUtilString> {
- // Methods:
-public:
- /* ctor */ CMICmdArgValConsume();
- /* ctor */ CMICmdArgValConsume(const CMIUtilString &vrArgName,
- const bool vbMandatory);
- //
- bool IsOk() const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValConsume() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vwArgContext) override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValFile.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValFile.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValFile.cpp (removed)
@@ -1,178 +0,0 @@
-//===-- MICmdArgValFile.cpp -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValFile.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValFile constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValFile::CMICmdArgValFile() {}
-
-//++
-// Details: CMICmdArgValFile constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValFile::CMICmdArgValFile(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd) {}
-
-//++
-// Details: CMICmdArgValFile destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValFile::~CMICmdArgValFile() {}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// value *this
-// argument is looking for.
-// Type: Overridden.
-// Args: vwArgContext - (R) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValFile::Validate(CMICmdArgContext &vwArgContext) {
- if (vwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- // The GDB/MI spec suggests there is only parameter
-
- if (vwArgContext.GetNumberArgsPresent() == 1) {
- const CMIUtilString &rFile(vwArgContext.GetArgsLeftToParse());
- if (IsFilePath(rFile)) {
- m_bFound = true;
- m_bValid = true;
- m_argValue = rFile.Trim('"');
- vwArgContext.RemoveArg(rFile);
- return MIstatus::success;
- } else
- return MIstatus::failure;
- }
-
- // In reality there are more than one option, if so the file option
- // is the last one (don't handle that here - find the best looking one)
- const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rTxt(*it);
- if (IsFilePath(rTxt)) {
- m_bFound = true;
-
- if (vwArgContext.RemoveArg(rTxt)) {
- m_bValid = true;
- m_argValue = rTxt.Trim('"');
- return MIstatus::success;
- } else
- return MIstatus::success;
- }
-
- // Next
- ++it;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Given some text extract the file name path from it. If a space is
-// found in
-// path done return the path surrounded in quotes.
-// Type: Method.
-// Args: vrTxt - (R) The text to extract the file name path from.
-// Return: CMIUtilString - File name and or path.
-// Throws: None.
-//--
-CMIUtilString
-CMICmdArgValFile::GetFileNamePath(const CMIUtilString &vrTxt) const {
- CMIUtilString fileNamePath(vrTxt);
-
- // Look for a space in the path
- const char cSpace = ' ';
- const size_t nPos = fileNamePath.find(cSpace);
- if (nPos != std::string::npos)
- fileNamePath = CMIUtilString::Format("\"%s\"", fileNamePath.c_str());
-
- return fileNamePath;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid file name path.
-// Type: Method.
-// Args: vrFileNamePath - (R) File's name and directory path.
-// Return: bool - True = yes valid file path, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValFile::IsFilePath(const CMIUtilString &vrFileNamePath) const {
- if (vrFileNamePath.empty())
- return false;
-
- const bool bHavePosSlash = (vrFileNamePath.find('/') != std::string::npos);
- const bool bHaveBckSlash = (vrFileNamePath.find('\\') != std::string::npos);
-
- // Look for --someLongOption
- size_t nPos = vrFileNamePath.find("--");
- const bool bLong = (nPos == 0);
- if (bLong)
- return false;
-
- // Look for -f type short parameters
- nPos = vrFileNamePath.find('-');
- const bool bShort = (nPos == 0);
- if (bShort)
- return false;
-
- // Look for i1 i2 i3....
- nPos = vrFileNamePath.find('i');
- const bool bFoundI1 = ((nPos == 0) && (::isdigit(vrFileNamePath[1])));
- if (bFoundI1)
- return false;
-
- const bool bValidChars = IsValidChars(vrFileNamePath);
- return bValidChars || bHavePosSlash || bHaveBckSlash;
-}
-
-//++
-// Details: Determine if the path contains valid characters for a file path.
-// Letters can be
-// either upper or lower case.
-// Type: Method.
-// Args: vrText - (R) The text data to examine.
-// Return: bool - True = yes valid, false = one or more chars is valid.
-// Throws: None.
-//--
-bool CMICmdArgValFile::IsValidChars(const CMIUtilString &vrText) const {
- static CMIUtilString s_strSpecialCharacters(".'\"`@#$%^&*()_+-={}[]| ");
- const char *pPtr = vrText.c_str();
- for (MIuint i = 0; i < vrText.length(); i++, pPtr++) {
- const char c = *pPtr;
- if (::isalnum((int)c) == 0) {
- if (s_strSpecialCharacters.find(c) == CMIUtilString::npos)
- return false;
- }
- }
-
- return true;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValFile.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValFile.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValFile.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValFile.h (removed)
@@ -1,47 +0,0 @@
-//===-- MICmdArgValFile.h ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it .
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValFile : public CMICmdArgValBaseTemplate<CMIUtilString> {
- // Methods:
-public:
- /* ctor */ CMICmdArgValFile();
- /* ctor */ CMICmdArgValFile(const CMIUtilString &vrArgName,
- const bool vbMandatory, const bool vbHandleByCmd);
- //
- bool IsFilePath(const CMIUtilString &vrFileNamePath) const;
- CMIUtilString GetFileNamePath(const CMIUtilString &vrTxt) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValFile() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vwArgContext) override;
-
- // Methods:
-private:
- bool IsValidChars(const CMIUtilString &vrText) const;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValListBase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValListBase.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValListBase.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValListBase.cpp (removed)
@@ -1,209 +0,0 @@
-//===-- MICmdArgValListBase.cpp ---------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValListBase.h"
-#include "MICmdArgContext.h"
-#include "MICmdArgValConsume.h"
-#include "MICmdArgValFile.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-
-//++
-// Details: CMICmdArgValListBase constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValListBase::CMICmdArgValListBase()
- : m_eArgType(eArgValType_invalid) {}
-
-//++
-// Details: CMICmdArgValListBase constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValListBase::CMICmdArgValListBase(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
- m_eArgType(eArgValType_invalid) {}
-
-//++
-// Details: CMICmdArgValListBase constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// veType - (R) The type of argument to look for and create
-// argument object of a certain type.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValListBase::CMICmdArgValListBase(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const ArgValType_e veType)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
- m_eArgType(veType) {}
-
-//++
-// Details: CMICmdArgValListBase destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValListBase::~CMICmdArgValListBase() {
- // Tidy up
- Destroy();
-}
-
-//++
-// Details: Tear down resources used by *this object.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdArgValListBase::Destroy() {
- // Tidy up
- VecArgObjPtr_t::const_iterator it = m_argValue.begin();
- while (it != m_argValue.end()) {
- CMICmdArgValBase *pArgObj = *it;
- delete pArgObj;
-
- // Next
- ++it;
- }
- m_argValue.clear();
-}
-
-//++
-// Details: Create an CMICmdArgValBase derived object matching the type
-// specified
-// and put the option or argument's value inside it.
-// Type: Method.
-// Args: vrTxt - (R) Text version the option or argument.
-// veType - (R) The type of argument or option object to create.
-// Return: CMICmdArgValBase * - Option object holding the value.
-// - NULL = Functional failed.
-// Throws: None.
-//--
-CMICmdArgValBase *
-CMICmdArgValListBase::CreationObj(const CMIUtilString &vrTxt,
- const ArgValType_e veType) const {
- CMICmdArgValBase *pOptionObj = nullptr;
- switch (veType) {
- case eArgValType_File:
- pOptionObj = new CMICmdArgValFile();
- break;
- case eArgValType_Consume:
- pOptionObj = new CMICmdArgValConsume();
- break;
- case eArgValType_Number:
- pOptionObj = new CMICmdArgValNumber();
- break;
- case eArgValType_OptionLong:
- pOptionObj = new CMICmdArgValOptionLong();
- break;
- case eArgValType_OptionShort:
- pOptionObj = new CMICmdArgValOptionShort();
- break;
- case eArgValType_String:
- pOptionObj = new CMICmdArgValString();
- break;
- case eArgValType_StringQuoted:
- pOptionObj = new CMICmdArgValString(true, false, false);
- break;
- case eArgValType_StringQuotedNumber:
- pOptionObj = new CMICmdArgValString(true, true, false);
- break;
- case eArgValType_StringQuotedNumberPath:
- pOptionObj = new CMICmdArgValString(true, true, true);
- break;
- case eArgValType_StringAnything:
- pOptionObj = new CMICmdArgValString(true);
- break;
- case eArgValType_ThreadGrp:
- pOptionObj = new CMICmdArgValThreadGrp();
- break;
- default:
- return nullptr;
- }
-
- CMICmdArgContext argCntxt(vrTxt);
- if (!pOptionObj->Validate(argCntxt))
- return nullptr;
-
- return pOptionObj;
-}
-
-//++
-// Details: Validate the option or argument is the correct type.
-// Type: Method.
-// Args: vrTxt - (R) Text version the option or argument.
-// veType - (R) The type of value to expect.
-// Return: bool - True = Yes expected type present, False = no.
-// Throws: None.
-//--
-bool CMICmdArgValListBase::IsExpectedCorrectType(
- const CMIUtilString &vrTxt, const ArgValType_e veType) const {
- bool bValid = false;
- switch (veType) {
- case eArgValType_File:
- bValid = CMICmdArgValFile().IsFilePath(vrTxt);
- break;
- case eArgValType_Consume:
- bValid = CMICmdArgValConsume().IsOk();
- break;
- case eArgValType_Number:
- bValid = CMICmdArgValNumber().IsArgNumber(vrTxt);
- break;
- case eArgValType_OptionLong:
- bValid = CMICmdArgValOptionLong().IsArgLongOption(vrTxt);
- break;
- case eArgValType_OptionShort:
- bValid = CMICmdArgValOptionShort().IsArgShortOption(vrTxt);
- break;
- case eArgValType_String:
- bValid = CMICmdArgValString().IsStringArg(vrTxt);
- break;
- case eArgValType_StringQuoted:
- bValid = CMICmdArgValString(true, false, false).IsStringArg(vrTxt);
- break;
- case eArgValType_StringQuotedNumber:
- bValid = CMICmdArgValString(true, true, false).IsStringArg(vrTxt);
- break;
- case eArgValType_StringQuotedNumberPath:
- bValid = CMICmdArgValString(true, true, true).IsStringArg(vrTxt);
- break;
- case eArgValType_StringAnything:
- bValid = CMICmdArgValString(true).IsStringArg(vrTxt);
- break;
- case eArgValType_ThreadGrp:
- bValid = CMICmdArgValThreadGrp().IsArgThreadGrp(vrTxt);
- break;
- default:
- return false;
- }
-
- return bValid;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValListBase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValListBase.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValListBase.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValListBase.h (removed)
@@ -1,101 +0,0 @@
-//===-- MICmdArgValListBase.h -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers:
-#include <vector>
-
-// In-house headers:
-#include "MICmdArgValBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument with addition options class.
-// For example --recurse 1 2 4 [group ...]. Arguments object that
-// require a list of options associated with them derive from the
-// CMICmdArgValListBase class. Additional options are also extracted
-// from
-// the command arguments text string.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// options and so extract a values from it .
-// The CMICmdArgValBase objects are added to the derived argument
-// class's
-// container. The option arguments belong to that derived class and
-// will
-// be deleted that object goes out of scope.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValListBase
- : public CMICmdArgValBaseTemplate<std::vector<CMICmdArgValBase *>> {
- // Typedef:
-public:
- typedef std::vector<CMICmdArgValBase *> VecArgObjPtr_t;
-
- // Enums:
-public:
- //++
- // Details: CMICmdArgValListBase needs to know what type of argument to look
- // for in
- // the command options text. It also needs to create argument objects
- // of
- // a specific type.
- //--
- enum ArgValType_e {
- eArgValType_File = 0,
- eArgValType_Consume,
- eArgValType_Number,
- eArgValType_OptionLong,
- eArgValType_OptionShort,
- eArgValType_String,
- eArgValType_StringQuoted,
- eArgValType_StringQuotedNumber,
- eArgValType_StringQuotedNumberPath,
- eArgValType_StringAnything, // Accept any words for a string 'type' even if
- // they look like --longOptions for example
- eArgValType_ThreadGrp,
- eArgValType_count, // Always the last one
- eArgValType_invalid
- };
-
- // Methods:
-public:
- /* ctor */ CMICmdArgValListBase();
- /* ctor */ CMICmdArgValListBase(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd);
- /* ctor */ CMICmdArgValListBase(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const ArgValType_e veType);
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValListBase() override;
-
- // Methods:
-protected:
- bool IsExpectedCorrectType(const CMIUtilString &vrTxt,
- const ArgValType_e veType) const;
- CMICmdArgValBase *CreationObj(const CMIUtilString &vrTxt,
- const ArgValType_e veType) const;
-
- // Attributes:
-protected:
- ArgValType_e m_eArgType;
-
- // Methods:
-private:
- void Destroy();
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.cpp (removed)
@@ -1,167 +0,0 @@
-//===-- MICmdArgValListOfN.cpp ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgContext.h"
-#include "MICmdArgValFile.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-
-//++
-// Details: CMICmdArgValListOfN constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValListOfN::CMICmdArgValListOfN() {}
-
-//++
-// Details: CMICmdArgValListOfN constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// veType - (R) The type of argument to look for and create
-// argument object of a certain type.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValListOfN::CMICmdArgValListOfN(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const ArgValType_e veType)
- : CMICmdArgValListBase(vrArgName, vbMandatory, vbHandleByCmd, veType) {}
-
-//++
-// Details: CMICmdArgValListOfN destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValListOfN::~CMICmdArgValListOfN() {}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// list of
-// arguments based on the argument object type to look for.
-// Type: Overridden.
-// Args: vwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValListOfN::Validate(CMICmdArgContext &vwArgContext) {
- if (m_eArgType >= eArgValType_count) {
- m_eArgType = eArgValType_invalid;
- return MIstatus::failure;
- }
-
- if (vwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- const CMIUtilString &rArg(vwArgContext.GetArgsLeftToParse());
- if (IsListOfN(rArg) && CreateList(rArg)) {
- m_bFound = true;
- m_bValid = true;
- vwArgContext.RemoveArg(rArg);
- return MIstatus::success;
- } else
- return MIstatus::failure;
-}
-
-//++
-// Details: Create list of argument objects each holding a value extract from
-// the command
-// options line.
-// Type: Method.
-// Args: vrTxt - (R) Some options text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValListOfN::CreateList(const CMIUtilString &vrTxt) {
- CMIUtilString::VecString_t vecOptions;
- if ((m_eArgType == eArgValType_StringQuoted) ||
- (m_eArgType == eArgValType_StringQuotedNumber) ||
- (m_eArgType == eArgValType_StringQuotedNumberPath) ||
- (m_eArgType == eArgValType_StringAnything)) {
- if (vrTxt.SplitConsiderQuotes(" ", vecOptions) == 0)
- return MIstatus::failure;
- } else if (vrTxt.Split(" ", vecOptions) == 0)
- return MIstatus::failure;
-
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rOption = *it;
- CMICmdArgValBase *pOption = CreationObj(rOption, m_eArgType);
- if (pOption != nullptr)
- m_argValue.push_back(pOption);
- else
- return MIstatus::failure;
-
- // Next
- ++it;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValListOfN::IsListOfN(const CMIUtilString &vrTxt) const {
- CMIUtilString::VecString_t vecOptions;
- if ((m_eArgType == eArgValType_StringQuoted) ||
- (m_eArgType == eArgValType_StringQuotedNumber) ||
- (m_eArgType == eArgValType_StringQuotedNumberPath) ||
- (m_eArgType == eArgValType_StringAnything)) {
- if (vrTxt.SplitConsiderQuotes(" ", vecOptions) == 0)
- return false;
- } else if (vrTxt.Split(" ", vecOptions) == 0)
- return false;
-
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rOption = *it;
- if (!IsExpectedCorrectType(rOption, m_eArgType))
- break;
-
- // Next
- ++it;
- }
-
- return true;
-}
-
-//++
-// Details: Retrieve the list of CMICmdArgValBase derived option objects found
-// following
-// *this long option argument. For example "list-thread-groups [
-// --recurse 1 ]"
-// where 1 is the list of expected option to follow.
-// Type: Method.
-// Args: None.
-// Return: CMICmdArgValListBase::VecArgObjPtr_t & - List of options.
-// Throws: None.
-//--
-const CMICmdArgValListBase::VecArgObjPtr_t &
-CMICmdArgValListOfN::GetExpectedOptions() const {
- return m_argValue;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValListOfN.h (removed)
@@ -1,92 +0,0 @@
-//===-- MICmdArgValListOfN.h ------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers:
-#include <vector>
-
-// In-house headers:
-#include "MICmdArgValListBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it .
-// The CMICmdArgValBase objects added to *this ListOfN container belong
-// to this container and will be deleted when *this object goes out of
-// scope.
-// To parse arguments like 'thread-id ...' i.e. 1 10 12 13 ...
-// If vbMandatory argument is true it takes on the (...)+ specification
-// otherwise assumed to be (...)* specification.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValListOfN : public CMICmdArgValListBase {
- // Methods:
-public:
- /* ctor */ CMICmdArgValListOfN();
- /* ctor */ CMICmdArgValListOfN(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const ArgValType_e veType);
- //
- const VecArgObjPtr_t &GetExpectedOptions() const;
- template <class T1, typename T2>
- bool GetExpectedOption(T2 &vrwValue,
- const VecArgObjPtr_t::size_type vnAt = 0) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValListOfN() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vArgContext) override;
-
- // Methods:
-private:
- bool IsListOfN(const CMIUtilString &vrTxt) const;
- bool CreateList(const CMIUtilString &vrTxt);
-};
-
-//++
-// Details: Retrieve the first argument or option value from the list of 1 or
-// more options
-// parsed from the command's options string.
-// Type: Template method.
-// Args: vrwValue - (W) Templated type return value.
-// vnAt - (R) Value at the specific position.
-// T1 - The argument value's class type of the data hold in
-// the list of options.
-// T2 - The type pf the variable which holds the value wanted.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed. List of object was empty.
-// Throws: None.
-//--
-template <class T1, typename T2>
-bool CMICmdArgValListOfN::GetExpectedOption(
- T2 &vrwValue, const VecArgObjPtr_t::size_type vnAt) const {
- const VecArgObjPtr_t &rVecOptions(GetExpectedOptions());
- if (rVecOptions.size() <= vnAt)
- return MIstatus::failure;
-
- VecArgObjPtr_t::const_iterator it2 = rVecOptions.begin() + vnAt;
- if (it2 != rVecOptions.end()) {
- const T1 *pOption = static_cast<T1 *>(*it2);
- vrwValue = pOption->GetValue();
- return MIstatus::success;
- }
-
- return MIstatus::failure;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValNumber.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValNumber.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValNumber.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValNumber.cpp (removed)
@@ -1,156 +0,0 @@
-//===-- MICmdArgValNumber.cpp -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValNumber.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValNumber constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValNumber::CMICmdArgValNumber()
- : m_nNumberFormatMask(CMICmdArgValNumber::eArgValNumberFormat_Decimal),
- m_nNumber(0) {}
-
-//++
-// Details: CMICmdArgValNumber constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false =
-// optional argument.
-// vbHandleByCmd - (R) True = Command processes *this option,
-// false = not handled.
-// vnNumberFormatMask - (R) Mask of the number formats. (Dflt =
-// CMICmdArgValNumber::eArgValNumberFormat_Decimal)
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValNumber::CMICmdArgValNumber(
- const CMIUtilString &vrArgName, const bool vbMandatory,
- const bool vbHandleByCmd,
- const MIuint
- vnNumberFormatMask /* = CMICmdArgValNumber::eArgValNumberFormat_Decimal*/)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
- m_nNumberFormatMask(vnNumberFormatMask), m_nNumber(0) {}
-
-//++
-// Details: CMICmdArgValNumber destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValNumber::~CMICmdArgValNumber() {}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// value *this
-// argument is looking for.
-// Type: Overridden.
-// Args: vwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValNumber::Validate(CMICmdArgContext &vwArgContext) {
- if (vwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- if (vwArgContext.GetNumberArgsPresent() == 1) {
- const CMIUtilString &rArg(vwArgContext.GetArgsLeftToParse());
- if (IsArgNumber(rArg) && ExtractNumber(rArg)) {
- m_bFound = true;
- m_bValid = true;
- m_argValue = GetNumber();
- vwArgContext.RemoveArg(rArg);
- return MIstatus::success;
- } else
- return MIstatus::failure;
- }
-
- // More than one option...
- const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rArg(*it);
- if (IsArgNumber(rArg) && ExtractNumber(rArg)) {
- m_bFound = true;
-
- if (vwArgContext.RemoveArg(rArg)) {
- m_bValid = true;
- m_argValue = GetNumber();
- return MIstatus::success;
- } else
- return MIstatus::failure;
- }
-
- // Next
- ++it;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValNumber::IsArgNumber(const CMIUtilString &vrTxt) const {
- const bool bFormatDecimal(m_nNumberFormatMask &
- CMICmdArgValNumber::eArgValNumberFormat_Decimal);
- const bool bFormatHexadecimal(
- m_nNumberFormatMask &
- CMICmdArgValNumber::eArgValNumberFormat_Hexadecimal);
-
- // Look for --someLongOption
- if (std::string::npos != vrTxt.find("--"))
- return false;
-
- if (bFormatDecimal && vrTxt.IsNumber())
- return true;
-
- if (bFormatHexadecimal && vrTxt.IsHexadecimalNumber())
- return true;
-
- return false;
-}
-
-//++
-// Details: Extract the thread group number from the thread group argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValNumber::ExtractNumber(const CMIUtilString &vrTxt) {
- MIint64 nNumber = 0;
- bool bOk = vrTxt.ExtractNumber(nNumber);
- if (bOk) {
- m_nNumber = static_cast<MIint64>(nNumber);
- }
-
- return bOk;
-}
-
-//++
-// Details: Retrieve the thread group ID found in the argument.
-// Type: Method.
-// Args: None.
-// Return: MIuint - Thread group ID.
-// Throws: None.
-//--
-MIint64 CMICmdArgValNumber::GetNumber() const { return m_nNumber; }
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValNumber.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValNumber.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValNumber.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValNumber.h (removed)
@@ -1,69 +0,0 @@
-//===-- MICmdArgValNumber.h -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it .
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValNumber : public CMICmdArgValBaseTemplate<MIint64> {
- // Enums:
-public:
- //++
- // Details: CMICmdArgValNumber needs to know what format of argument to look
- // for in
- // the command options text.
- //--
- enum ArgValNumberFormat_e {
- eArgValNumberFormat_Decimal = (1u << 0),
- eArgValNumberFormat_Hexadecimal = (1u << 1),
- eArgValNumberFormat_Auto =
- ((eArgValNumberFormat_Hexadecimal << 1) -
- 1u) ///< Indicates to try and lookup everything up during a query.
- };
-
- // Methods:
-public:
- /* ctor */ CMICmdArgValNumber();
- /* ctor */ CMICmdArgValNumber(
- const CMIUtilString &vrArgName, const bool vbMandatory,
- const bool vbHandleByCmd,
- const MIuint vnNumberFormatMask = eArgValNumberFormat_Decimal);
- //
- bool IsArgNumber(const CMIUtilString &vrTxt) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValNumber() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vwArgContext) override;
-
- // Methods:
-private:
- bool ExtractNumber(const CMIUtilString &vrTxt);
- MIint64 GetNumber() const;
-
- // Attributes:
-private:
- MIuint m_nNumberFormatMask;
- MIint64 m_nNumber;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.cpp (removed)
@@ -1,291 +0,0 @@
-//===-- MICmdArgValOptionLong.cpp -------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValOptionLong constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionLong::CMICmdArgValOptionLong()
- : m_nExpectingNOptions(0), m_eExpectingOptionType(eArgValType_invalid) {}
-
-//++
-// Details: CMICmdArgValOptionLong constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionLong::CMICmdArgValOptionLong(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd)
- : CMICmdArgValListBase(vrArgName, vbMandatory, vbHandleByCmd),
- m_nExpectingNOptions(0), m_eExpectingOptionType(eArgValType_invalid) {}
-
-//++
-// Details: CMICmdArgValOptionLong constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false =
-// optional argument.
-// vbHandleByCmd - (R) True = Command processes *this option,
-// false = not handled.
-// veType - (R) The type of argument to look for and
-// create argument object of a certain type.
-// vnExpectingNOptions - (R) The number of options expected to read
-// following *this argument.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionLong::CMICmdArgValOptionLong(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const ArgValType_e veType,
- const MIuint vnExpectingNOptions)
- : CMICmdArgValListBase(vrArgName, vbMandatory, vbHandleByCmd),
- m_nExpectingNOptions(vnExpectingNOptions),
- m_eExpectingOptionType(veType) {}
-
-//++
-// Details: CMICmdArgValOptionLong destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionLong::~CMICmdArgValOptionLong() {
- // Tidy up
- Destroy();
-}
-
-//++
-// Details: Tear down resources used by *this object.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdArgValOptionLong::Destroy() {
- // Tidy up
- VecArgObjPtr_t::const_iterator it = m_vecArgsExpected.begin();
- while (it != m_vecArgsExpected.end()) {
- CMICmdArgValBase *pOptionObj = *it;
- delete pOptionObj;
-
- // Next
- ++it;
- }
- m_vecArgsExpected.clear();
-}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// long
-// argument *this argument type is looking for.
-// Type: Overridden.
-// Args: vwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValOptionLong::Validate(CMICmdArgContext &vwArgContext) {
- if (vwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- if (vwArgContext.GetNumberArgsPresent() == 1) {
- const CMIUtilString &rArg(vwArgContext.GetArgsLeftToParse());
- if (IsArgLongOption(rArg) && ArgNameMatch(rArg)) {
- m_bFound = true;
-
- if (!vwArgContext.RemoveArg(rArg))
- return MIstatus::failure;
-
- if (m_nExpectingNOptions == 0) {
- m_bValid = true;
- return MIstatus::success;
- }
-
- m_bIsMissingOptions = true;
- return MIstatus::failure;
- } else
- return MIstatus::failure;
- }
-
- // More than one option...
- MIuint nArgIndex = 0;
- const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rArg(*it);
- if (IsArgOptionCorrect(rArg) && ArgNameMatch(rArg)) {
- m_bFound = true;
-
- if (!vwArgContext.RemoveArg(rArg))
- return MIstatus::failure;
-
- if (m_nExpectingNOptions != 0) {
- if (ExtractExpectedOptions(vwArgContext, nArgIndex)) {
- m_bValid = true;
- return MIstatus::success;
- }
-
- m_bIsMissingOptions = true;
- return MIstatus::failure;
- } else {
- m_bValid = true;
- return MIstatus::success;
- }
- }
-
- // Next
- ++it;
- ++nArgIndex;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Parse the text following *this argument and extract the options the
-// values of
-// CMICmdArgValListBase::m_eArgType forming argument objects for each
-// of those
-// options extracted.
-// Type: Method.
-// Args: vrwTxt - (RW) The command's argument options string.
-// nArgIndex - (R) The Nth arg position in argument context from
-// the left.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValOptionLong::ExtractExpectedOptions(CMICmdArgContext &vrwTxt,
- const MIuint nArgIndex) {
- CMIUtilString::VecString_t vecOptions = vrwTxt.GetArgs();
- if (vecOptions.size() == 0)
- return MIstatus::failure;
-
- MIuint nArgIndexCnt = 0;
- MIuint nTypeCnt = 0;
- MIuint nTypeCnt2 = 0;
- MIuint nFoundNOptionsCnt = 0;
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- // Move to the Nth argument position from left before do validation/checking
- if (nArgIndexCnt++ == nArgIndex) {
- nTypeCnt++;
- const CMIUtilString &rOption(*it);
- if (IsExpectedCorrectType(rOption, m_eExpectingOptionType)) {
- nTypeCnt2++;
- CMICmdArgValBase *pOptionObj =
- CreationObj(rOption, m_eExpectingOptionType);
- if ((pOptionObj != nullptr) &&
- vrwTxt.RemoveArgAtPos(rOption, nArgIndex)) {
- nFoundNOptionsCnt++;
- m_vecArgsExpected.push_back(pOptionObj);
- }
- }
-
- // Is the sequence 'options' of same type broken. Expecting the same type
- // until the
- // next argument.
- if (nTypeCnt != nTypeCnt2)
- return MIstatus::failure;
-
- if (nFoundNOptionsCnt == m_nExpectingNOptions)
- return MIstatus::success;
- }
-
- // Next
- ++it;
- }
- if (nFoundNOptionsCnt != m_nExpectingNOptions)
- return MIstatus::failure;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid long type option
-// argument.
-// Long type argument looks like --someLongOption.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValOptionLong::IsArgLongOption(const CMIUtilString &vrTxt) const {
- const bool bHavePosSlash = (vrTxt.find('/') != std::string::npos);
- const bool bHaveBckSlash = (vrTxt.find('\\') != std::string::npos);
- if (bHavePosSlash || bHaveBckSlash)
- return false;
-
- const size_t nPos = vrTxt.find("--");
- if (nPos != 0)
- return false;
-
- if (vrTxt.length() < 3)
- return false;
-
- const CMIUtilString strArg = vrTxt.substr(2);
- return !strArg.IsNumber();
-}
-
-//++
-// Details: Examine the string and determine if it is a valid long type option
-// argument.
-// Long type argument looks like --someLongOption.
-// Type: Overideable.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValOptionLong::IsArgOptionCorrect(
- const CMIUtilString &vrTxt) const {
- return IsArgLongOption(vrTxt);
-}
-
-//++
-// Details: Does the argument name of the argument being parsed ATM match the
-// name of
-// *this argument object.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes arg name matched, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValOptionLong::ArgNameMatch(const CMIUtilString &vrTxt) const {
- const CMIUtilString strArg = vrTxt.substr(2);
- return (strArg == GetName());
-}
-
-//++
-// Details: Retrieve the list of CMICmdArgValBase derived option objects found
-// following
-// *this long option argument. For example "list-thread-groups [
-// --recurse 1 ]"
-// where 1 is the list of expected option to follow.
-// Type: Method.
-// Args: None.
-// Return: CMICmdArgValListBase::VecArgObjPtr_t & - List of options.
-// Throws: None.
-//--
-const CMICmdArgValListBase::VecArgObjPtr_t &
-CMICmdArgValOptionLong::GetExpectedOptions() const {
- return m_vecArgsExpected;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValOptionLong.h (removed)
@@ -1,104 +0,0 @@
-//===-- MICmdArgValOptionLong.h ---------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValListBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-class CMIUtilString;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it.
-// If *this argument has expected options following it the option
-// objects
-// created to hold each of those option's values belong to *this
-// argument
-// object and so are deleted when *this object goes out of scope.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValOptionLong : public CMICmdArgValListBase {
- // Methods:
-public:
- /* ctor */ CMICmdArgValOptionLong();
- /* ctor */ CMICmdArgValOptionLong(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd);
- /* ctor */ CMICmdArgValOptionLong(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const ArgValType_e veType,
- const MIuint vnExpectingNOptions);
- //
- bool IsArgLongOption(const CMIUtilString &vrTxt) const;
- const VecArgObjPtr_t &GetExpectedOptions() const;
- template <class T1, typename T2> bool GetExpectedOption(T2 &vrwValue) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValOptionLong() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vArgContext) override;
-
- // Methods:
-protected:
- bool ExtractExpectedOptions(CMICmdArgContext &vrwTxt, const MIuint nArgIndex);
-
- // Overrideable:
-protected:
- virtual bool IsArgOptionCorrect(const CMIUtilString &vrTxt) const;
- virtual bool ArgNameMatch(const CMIUtilString &vrTxt) const;
-
- // Methods:
-private:
- void Destroy();
-
- // Attributes:
-private:
- MIuint m_nExpectingNOptions; // The number of options expected to read
- // following *this argument
- VecArgObjPtr_t m_vecArgsExpected; // The option objects holding the value
- // extracted following *this argument
- ArgValType_e m_eExpectingOptionType; // The type of options expected to read
- // following *this argument
-};
-
-//++
-// Details: Retrieve the first argument or option value from the list of 1 or
-// more options
-// parsed from the command's options string.
-// Type: Template method.
-// Args: vrwValue - (W) Templated type return value.
-// T1 - The argument value's class type of the data hold in
-// the list of options.
-// T2 - The type pf the variable which holds the value wanted.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed. List of object was empty.
-// Throws: None.
-//--
-template <class T1, typename T2>
-bool CMICmdArgValOptionLong::GetExpectedOption(T2 &vrwValue) const {
- const VecArgObjPtr_t &rVecOptions(GetExpectedOptions());
- VecArgObjPtr_t::const_iterator it2 = rVecOptions.begin();
- if (it2 != rVecOptions.end()) {
- const T1 *pOption = static_cast<T1 *>(*it2);
- vrwValue = pOption->GetValue();
- return MIstatus::success;
- }
-
- return MIstatus::failure;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.cpp (removed)
@@ -1,121 +0,0 @@
-//===-- MICmdArgValOptionShort.cpp ------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValOptionShort constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionShort::CMICmdArgValOptionShort() {}
-
-//++
-// Details: CMICmdArgValOptionShort constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionShort::CMICmdArgValOptionShort(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd)
- : CMICmdArgValOptionLong(vrArgName, vbMandatory, vbHandleByCmd) {}
-
-//++
-// Details: CMICmdArgValOptionLong constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false =
-// optional argument.
-// vbHandleByCmd - (R) True = Command processes *this option,
-// false = not handled.
-// veType - (R) The type of argument to look for and
-// create argument object of a certain type.
-// vnExpectingNOptions - (R) The number of options expected to read
-// following *this argument.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionShort::CMICmdArgValOptionShort(
- const CMIUtilString &vrArgName, const bool vbMandatory,
- const bool vbHandleByCmd, const ArgValType_e veType,
- const MIuint vnExpectingNOptions)
- : CMICmdArgValOptionLong(vrArgName, vbMandatory, vbHandleByCmd, veType,
- vnExpectingNOptions) {}
-
-//++
-// Details: CMICmdArgValOptionShort destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValOptionShort::~CMICmdArgValOptionShort() {}
-
-//++
-// Details: Examine the string and determine if it is a valid short type option
-// argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValOptionShort::IsArgShortOption(
- const CMIUtilString &vrTxt) const {
- // Look for --someLongOption
- MIint nPos = vrTxt.find("--");
- if (nPos == 0)
- return false;
-
- // Look for -f short option
- nPos = vrTxt.find('-');
- if (nPos != 0)
- return false;
-
- if (vrTxt.length() > 2)
- return false;
-
- return true;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid short type option
-// argument.
-// Long type argument looks like -f some short option.
-// Type: Overridden.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValOptionShort::IsArgOptionCorrect(
- const CMIUtilString &vrTxt) const {
- return IsArgShortOption(vrTxt);
-}
-
-//++
-// Details: Does the argument name of the argument being parsed ATM match the
-// name of
-// *this argument object.
-// Type: Overridden.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes arg name matched, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValOptionShort::ArgNameMatch(const CMIUtilString &vrTxt) const {
- const CMIUtilString strArg = vrTxt.substr(1);
- return (strArg == GetName());
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValOptionShort.h (removed)
@@ -1,59 +0,0 @@
-//===-- MICmdArgValOptionShort.h --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValOptionLong.h"
-
-// Declarations:
-class CMICmdArgContext;
-class CMIUtilString;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValOptionLong
-// class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it.
-// If *this argument has expected options following it the option
-// objects
-// created to hold each of those option's values belong to *this
-// argument
-// object and so are deleted when *this object goes out of scope.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValOptionShort : public CMICmdArgValOptionLong {
- // Methods:
-public:
- /* ctor */ CMICmdArgValOptionShort();
- /* ctor */ CMICmdArgValOptionShort(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd);
- /* ctor */ CMICmdArgValOptionShort(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const ArgValType_e veType,
- const MIuint vnExpectingNOptions);
- //
- bool IsArgShortOption(const CMIUtilString &vrTxt) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValOptionShort() override;
-
- // Overridden:
-private:
- // From CMICmdArgValOptionLong
- bool IsArgOptionCorrect(const CMIUtilString &vrTxt) const override;
- bool ArgNameMatch(const CMIUtilString &vrTxt) const override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.cpp (removed)
@@ -1,125 +0,0 @@
-//===-- MICmdArgValPrintValues.cpp ------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValPrintValues.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValPrintValues constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValPrintValues::CMICmdArgValPrintValues() : m_nPrintValues(0) {}
-
-//++
-// Details: CMICmdArgValPrintValues constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValPrintValues::CMICmdArgValPrintValues(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
- m_nPrintValues(0) {}
-
-//++
-// Details: CMICmdArgValPrintValues destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValPrintValues::~CMICmdArgValPrintValues() {}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// value *this
-// argument is looking for.
-// Type: Overridden.
-// Args: vwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValPrintValues::Validate(CMICmdArgContext &vwArgContext) {
- if (vwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- const CMIUtilString strArg(vwArgContext.GetArgs()[0]);
- if (IsArgPrintValues(strArg) && ExtractPrintValues(strArg)) {
- m_bFound = true;
- m_bValid = true;
- m_argValue = GetPrintValues();
- vwArgContext.RemoveArg(strArg);
- return MIstatus::success;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValPrintValues::IsArgPrintValues(
- const CMIUtilString &vrTxt) const {
- return (CMIUtilString::Compare(vrTxt, "0") ||
- CMIUtilString::Compare(vrTxt, "--no-values") ||
- CMIUtilString::Compare(vrTxt, "1") ||
- CMIUtilString::Compare(vrTxt, "--all-values") ||
- CMIUtilString::Compare(vrTxt, "2") ||
- CMIUtilString::Compare(vrTxt, "--simple-values"));
-}
-
-//++
-// Details: Extract the print-values from the print-values argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValPrintValues::ExtractPrintValues(const CMIUtilString &vrTxt) {
- if (CMIUtilString::Compare(vrTxt, "0") ||
- CMIUtilString::Compare(vrTxt, "--no-values"))
- m_nPrintValues = 0;
- else if (CMIUtilString::Compare(vrTxt, "1") ||
- CMIUtilString::Compare(vrTxt, "--all-values"))
- m_nPrintValues = 1;
- else if (CMIUtilString::Compare(vrTxt, "2") ||
- CMIUtilString::Compare(vrTxt, "--simple-values"))
- m_nPrintValues = 2;
- else
- return MIstatus::failure;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve the print-values found in the argument.
-// Type: Method.
-// Args: None.
-// Return: MIuint - The print-values.
-// Throws: None.
-//--
-MIuint CMICmdArgValPrintValues::GetPrintValues() const {
- return m_nPrintValues;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValPrintValues.h (removed)
@@ -1,56 +0,0 @@
-//===-- MICmdArgValPrintValues.h --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it. The print-values looks
-// like:
-// 0 or --no-values
-// 1 or --all-values
-// 2 or --simple-values
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValPrintValues : public CMICmdArgValBaseTemplate<MIuint> {
- // Methods:
-public:
- /* ctor */ CMICmdArgValPrintValues();
- /* ctor */ CMICmdArgValPrintValues(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd);
- //
- bool IsArgPrintValues(const CMIUtilString &vrTxt) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValPrintValues() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vArgContext) override;
-
- // Methods:
-private:
- bool ExtractPrintValues(const CMIUtilString &vrTxt);
- MIuint GetPrintValues() const;
-
- // Attributes:
-private:
- MIuint m_nPrintValues;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValString.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValString.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValString.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValString.cpp (removed)
@@ -1,380 +0,0 @@
-//===-- MICmdArgValString.cpp -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValString.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValString constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValString::CMICmdArgValString()
- : m_bHandleQuotedString(false), m_bAcceptNumbers(false),
- m_bHandleDirPaths(false), m_bHandleAnything(false) {}
-
-//++
-// Details: CMICmdArgValString constructor.
-// Type: Method.
-// Args: vbAnything - (R) True = Parse a string and accept anything, false =
-// do not accept anything.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValString::CMICmdArgValString(const bool vbAnything)
- : m_bHandleQuotedString(vbAnything), m_bAcceptNumbers(false),
- m_bHandleDirPaths(false), m_bHandleAnything(vbAnything) {}
-
-//++
-// Details: CMICmdArgValString constructor.
-// Type: Method.
-// Args: vbHandleQuotes - (R) True = Parse a string surrounded by quotes
-// spaces are not delimiters, false = only text up to
-// next delimiting space character.
-// vbAcceptNumbers - (R) True = Parse a string and accept as a
-// number if number, false = numbers not recognised
-// as string types.
-// vbHandleDirPaths - (R) True = Parse a string and accept as a file
-// path if a path, false = file paths are not
-// recognised as string types.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValString::CMICmdArgValString(const bool vbHandleQuotes,
- const bool vbAcceptNumbers,
- const bool vbHandleDirPaths)
- : m_bHandleQuotedString(vbHandleQuotes), m_bAcceptNumbers(vbAcceptNumbers),
- m_bHandleDirPaths(vbHandleDirPaths), m_bHandleAnything(false) {}
-
-//++
-// Details: CMICmdArgValString constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// vbHandleQuotes - (R) True = Parse a string surrounded by quotes
-// spaces are not delimiters, false = only text up to
-// next delimiting space character. (Dflt = false)
-// vbAcceptNumbers - (R) True = Parse a string and accept as a number
-// if number, false = numbers not recognised as
-// string types. (Dflt = false)
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValString::CMICmdArgValString(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const bool vbHandleQuotes /* = false */,
- const bool vbAcceptNumbers /* = false */)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
- m_bHandleQuotedString(vbHandleQuotes), m_bAcceptNumbers(vbAcceptNumbers),
- m_bHandleDirPaths(false), m_bHandleAnything(false) {}
-
-//++
-// Details: CMICmdArgValString constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// vbHandleQuotes - (R) True = Parse a string surrounded by quotes
-// spaces are not delimiters, false = only text up to
-// next delimiting space character.
-// vbAcceptNumbers - (R) True = Parse a string and accept as a number
-// if number, false = numbers not recognised as
-// vbHandleDirPaths - (R) True = Parse a string and accept as a file
-// path if a path, false = file paths are not
-// string types.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValString::CMICmdArgValString(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const bool vbHandleQuotes,
- const bool vbAcceptNumbers,
- const bool vbHandleDirPaths)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
- m_bHandleQuotedString(vbHandleQuotes), m_bAcceptNumbers(vbAcceptNumbers),
- m_bHandleDirPaths(vbHandleDirPaths), m_bHandleAnything(false) {}
-
-//++
-// Details: CMICmdArgValString destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValString::~CMICmdArgValString() {}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// value *this
-// argument is looking for.
-// Type: Overridden.
-// Args: vrwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValString::Validate(CMICmdArgContext &vrwArgContext) {
- if (vrwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- if (m_bHandleQuotedString)
- return ValidateQuotedText(vrwArgContext);
-
- return ValidateSingleText(vrwArgContext);
-}
-
-//++
-// Details: Parse the command's argument options string and try to extract only
-// the next
-// word delimited by the next space.
-// Type: Method.
-// Args: vrwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValString::ValidateSingleText(CMICmdArgContext &vrwArgContext) {
- const CMIUtilString::VecString_t vecOptions(vrwArgContext.GetArgs());
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rArg(*it);
- if (IsStringArg(rArg)) {
- m_bFound = true;
-
- if (vrwArgContext.RemoveArg(rArg)) {
- m_bValid = true;
- m_argValue = rArg.StripSlashes();
- return MIstatus::success;
- } else
- return MIstatus::failure;
- }
-
- // Next
- ++it;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Parse the command's argument options string and try to extract all
-// the words
-// between quotes then delimited by the next space.
-// Type: Method.
-// Args: vrwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValString::ValidateQuotedText(CMICmdArgContext &vrwArgContext) {
- const CMIUtilString::VecString_t vecOptions(vrwArgContext.GetArgs());
- if (vecOptions.size() == 0)
- return MIstatus::failure;
-
- const CMIUtilString &rArg(vecOptions[0]);
- if (!IsStringArg(rArg))
- return MIstatus::failure;
-
- m_bFound = true;
-
- if (vrwArgContext.RemoveArg(rArg)) {
- m_bValid = true;
- const char cQuote = '"';
- m_argValue = rArg.Trim(cQuote).StripSlashes();
- return MIstatus::success;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValString::IsStringArg(const CMIUtilString &vrTxt) const {
- if (m_bHandleQuotedString)
- return (IsStringArgQuotedText(vrTxt) ||
- IsStringArgQuotedTextEmbedded(vrTxt) ||
- IsStringArgQuotedQuotedTextEmbedded(vrTxt) ||
- IsStringArgSingleText(
- vrTxt)); // Still test for this as could just be one word still
-
- return IsStringArgSingleText(vrTxt);
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument or
-// option value. If the string looks like a long option, short option,
-// a thread
-// group ID or just a number it is rejected as a string type value.
-// There is an
-// option to allow the string to accept a number as a string type.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid argument value, false = something else.
-// Throws: None.
-//--
-bool CMICmdArgValString::IsStringArgSingleText(
- const CMIUtilString &vrTxt) const {
- if (!m_bHandleDirPaths) {
- // Look for directory file paths, if found reject
- const bool bHavePosSlash = (vrTxt.find('/') != std::string::npos);
- const bool bHaveBckSlash = (vrTxt.find('\\') != std::string::npos);
- if (bHavePosSlash || bHaveBckSlash)
- return false;
- }
-
- // Look for --someLongOption, if found reject
- if (0 == vrTxt.find("--"))
- return false;
-
- // Look for -f type short options, if found reject
- if ((0 == vrTxt.find('-')) && (vrTxt.length() == 2))
- return false;
-
- // Look for thread group i1 i2 i3...., if found reject
- if ((vrTxt.find('i') == 0) && ::isdigit(vrTxt[1]))
- return false;
-
- // Look for numbers, if found reject
- if (!m_bAcceptNumbers && vrTxt.IsNumber())
- return false;
-
- return true;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Take into account quotes surrounding the text. Note this function
-// falls
-// through to IsStringArgSingleText() should the criteria match fail.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValString::IsStringArgQuotedText(
- const CMIUtilString &vrTxt) const {
- // Accept anything as string word
- if (m_bHandleAnything)
- return true;
-
- // CODETAG_QUOTEDTEXT_SIMILAR_CODE
- const char cQuote = '"';
- const size_t nPos = vrTxt.find(cQuote);
- if (nPos == std::string::npos)
- return false;
-
- // Is one and only quote at end of the string
- if (nPos == (vrTxt.length() - 1))
- return false;
-
- // Quote must be the first character in the string or be preceded by a space
- // Also check for embedded string formating quote
- const char cBckSlash = '\\';
- const char cSpace = ' ';
- if ((nPos > 1) && (vrTxt[nPos - 1] == cBckSlash) &&
- (vrTxt[nPos - 2] != cSpace)) {
- return false;
- }
- if ((nPos > 0) && (vrTxt[nPos - 1] != cSpace))
- return false;
-
- // Need to find the other quote
- const size_t nPos2 = vrTxt.rfind(cQuote);
- if (nPos2 == std::string::npos)
- return false;
-
- // Make sure not same quote, need two quotes
- if (nPos == nPos2)
- return MIstatus::failure;
-
- return true;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Take into account quotes surrounding the text. Take into account
-// string format
-// embedded quotes surrounding the text i.e. "\\\"%5d\\\"". Note this
-// function falls
-// through to IsStringArgQuotedText() should the criteria match fail.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValString::IsStringArgQuotedTextEmbedded(
- const CMIUtilString &vrTxt) const {
- // CODETAG_QUOTEDTEXT_SIMILAR_CODE
- const char cBckSlash = '\\';
- const size_t nPos = vrTxt.find(cBckSlash);
- if (nPos == std::string::npos)
- return false;
-
- // Slash must be the first character in the string or be preceded by a space
- const char cSpace = ' ';
- if ((nPos > 0) && (vrTxt[nPos - 1] != cSpace))
- return false;
-
- // Need to find the other matching slash
- const size_t nPos2 = vrTxt.rfind(cBckSlash);
- if (nPos2 == std::string::npos)
- return false;
-
- // Make sure not same back slash, need two slashes
- if (nPos == nPos2)
- return MIstatus::failure;
-
- return false;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Take into account quotes surrounding the text. Take into account
-// string format
-// embedded quotes surrounding the text i.e. "\\\"%5d\\\"". Note this
-// function falls
-// through to IsStringArgQuotedTextEmbedded() should the criteria match
-// fail.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValString::IsStringArgQuotedQuotedTextEmbedded(
- const CMIUtilString &vrTxt) const {
- const size_t nPos = vrTxt.find("\"\\\"");
- if (nPos == std::string::npos)
- return false;
-
- const size_t nPos2 = vrTxt.rfind("\\\"\"");
- if (nPos2 == std::string::npos)
- return false;
-
- const size_t nLen = vrTxt.length();
- return !((nLen > 5) && ((nPos + 2) == (nPos2 - 2)));
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValString.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValString.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValString.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValString.h (removed)
@@ -1,82 +0,0 @@
-//===-- MICmdArgValString.h -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it .
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValString : public CMICmdArgValBaseTemplate<CMIUtilString> {
- // Methods:
-public:
- /* ctor */ CMICmdArgValString();
- /* ctor */ CMICmdArgValString(const bool vbAnything);
- /* ctor */ CMICmdArgValString(const bool vbHandleQuotes,
- const bool vbAcceptNumbers,
- const bool vbHandleDirPaths);
- /* ctor */ CMICmdArgValString(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const bool vbHandleQuotes = false,
- const bool vbAcceptNumbers = false);
- /* ctor */ CMICmdArgValString(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd,
- const bool vbHandleQuotes,
- const bool vbAcceptNumbers,
- const bool vbHandleDirPaths);
- //
- bool IsStringArg(const CMIUtilString &vrTxt) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValString() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vrwArgContext) override;
-
- // Methods:
-private:
- bool ValidateSingleText(CMICmdArgContext &vrwArgContext);
- bool ValidateQuotedText(CMICmdArgContext &vrwArgContext);
- bool ValidateQuotedTextEmbedded(CMICmdArgContext &vrwArgContext);
- bool ValidateQuotedQuotedTextEmbedded(CMICmdArgContext &vrwArgContext);
- bool IsStringArgSingleText(const CMIUtilString &vrTxt) const;
- bool IsStringArgQuotedText(const CMIUtilString &vrTxt) const;
- bool IsStringArgQuotedTextEmbedded(const CMIUtilString &vrTxt) const;
- bool IsStringArgQuotedQuotedTextEmbedded(const CMIUtilString &vrTxt) const;
-
- // Attribute:
-private:
- bool m_bHandleQuotedString; // True = Parse a string surrounded by quotes
- // spaces are not delimiters, false = only text up
- // to next
- // delimiting space character
- bool m_bAcceptNumbers; // True = Parse a string and accept as a number if
- // number, false = numbers not recognised as string
- // types
- bool m_bHandleDirPaths; // True = Parse a string and accept directory file
- // style string if present, false = directory file
- // path not
- // accepted
- bool m_bHandleAnything; // True = Parse a string and accept anything if
- // present, false = validate for criteria matches
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.cpp (removed)
@@ -1,141 +0,0 @@
-//===-- MICmdArgValThreadGrp.cpp --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdArgValThreadGrp.h"
-#include "MICmdArgContext.h"
-
-//++
-// Details: CMICmdArgValThreadGrp constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValThreadGrp::CMICmdArgValThreadGrp() : m_nThreadGrp(0) {}
-
-//++
-// Details: CMICmdArgValThreadGrp constructor.
-// Type: Method.
-// Args: vrArgName - (R) Argument's name to search by.
-// vbMandatory - (R) True = Yes must be present, false = optional
-// argument.
-// vbHandleByCmd - (R) True = Command processes *this option, false =
-// not handled.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValThreadGrp::CMICmdArgValThreadGrp(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd)
- : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
- m_nThreadGrp(0) {}
-
-//++
-// Details: CMICmdArgValThreadGrp destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdArgValThreadGrp::~CMICmdArgValThreadGrp() {}
-
-//++
-// Details: Parse the command's argument options string and try to extract the
-// value *this
-// argument is looking for.
-// Type: Overridden.
-// Args: vwArgContext - (RW) The command's argument options string.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValThreadGrp::Validate(CMICmdArgContext &vwArgContext) {
- if (vwArgContext.IsEmpty())
- return m_bMandatory ? MIstatus::failure : MIstatus::success;
-
- if (vwArgContext.GetNumberArgsPresent() == 1) {
- const CMIUtilString &rArg(vwArgContext.GetArgsLeftToParse());
- if (IsArgThreadGrp(rArg) && ExtractNumber(rArg)) {
- m_bFound = true;
- m_bValid = true;
- m_argValue = GetNumber();
- vwArgContext.RemoveArg(rArg);
- return MIstatus::success;
- } else
- return MIstatus::failure;
- }
-
- // More than one option...
- const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
- CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
- while (it != vecOptions.end()) {
- const CMIUtilString &rArg(*it);
- if (IsArgThreadGrp(rArg) && ExtractNumber(rArg)) {
- m_bFound = true;
-
- if (vwArgContext.RemoveArg(rArg)) {
- m_bValid = true;
- m_argValue = GetNumber();
- return MIstatus::success;
- } else
- return MIstatus::failure;
- }
-
- // Next
- ++it;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Examine the string and determine if it is a valid string type
-// argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: bool - True = yes valid arg, false = no.
-// Throws: None.
-//--
-bool CMICmdArgValThreadGrp::IsArgThreadGrp(const CMIUtilString &vrTxt) const {
- // Look for i1 i2 i3....
- const MIint nPos = vrTxt.find('i');
- if (nPos != 0)
- return false;
-
- const CMIUtilString strNum = vrTxt.substr(1);
- return strNum.IsNumber();
-}
-
-//++
-// Details: Extract the thread group number from the thread group argument.
-// Type: Method.
-// Args: vrTxt - (R) Some text.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdArgValThreadGrp::ExtractNumber(const CMIUtilString &vrTxt) {
- const CMIUtilString strNum = vrTxt.substr(1);
- MIint64 nNumber = 0;
- bool bOk = strNum.ExtractNumber(nNumber);
- if (bOk) {
- m_nThreadGrp = static_cast<MIuint>(nNumber);
- }
-
- return bOk;
-}
-
-//++
-// Details: Retrieve the thread group ID found in the argument.
-// Type: Method.
-// Args: None.
-// Return: MIuint - Thread group ID.
-// Throws: None.
-//--
-MIuint CMICmdArgValThreadGrp::GetNumber() const { return m_nThreadGrp; }
Removed: lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdArgValThreadGrp.h (removed)
@@ -1,53 +0,0 @@
-//===-- MICmdArgValThreadGrp.h ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdArgValBase.h"
-
-// Declarations:
-class CMICmdArgContext;
-
-//++
-//============================================================================
-// Details: MI common code class. Command argument class. Arguments object
-// needing specialization derived from the CMICmdArgValBase class.
-// An argument knows what type of argument it is and how it is to
-// interpret the options (context) string to find and validate a
-// matching
-// argument and so extract a value from it. Thread group looks like
-// "i1" in the options text.
-// Based on the Interpreter pattern.
-//--
-class CMICmdArgValThreadGrp : public CMICmdArgValBaseTemplate<MIuint> {
- // Methods:
-public:
- /* ctor */ CMICmdArgValThreadGrp();
- /* ctor */ CMICmdArgValThreadGrp(const CMIUtilString &vrArgName,
- const bool vbMandatory,
- const bool vbHandleByCmd);
- //
- bool IsArgThreadGrp(const CMIUtilString &vrTxt) const;
-
- // Overridden:
-public:
- // From CMICmdArgValBase
- /* dtor */ ~CMICmdArgValThreadGrp() override;
- // From CMICmdArgSet::IArg
- bool Validate(CMICmdArgContext &vArgContext) override;
-
- // Methods:
-private:
- bool ExtractNumber(const CMIUtilString &vrTxt);
- MIuint GetNumber() const;
-
- // Attributes:
-private:
- MIuint m_nThreadGrp;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdBase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdBase.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdBase.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdBase.cpp (removed)
@@ -1,329 +0,0 @@
-//===-- MICmdBase.cpp -------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmdArgValConsume.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnMIValueConst.h"
-
-//++
-// Details: CMICmdBase constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdBase::CMICmdBase()
- : m_pSelfCreatorFn(nullptr),
- m_rLLDBDebugSessionInfo(CMICmnLLDBDebugSessionInfo::Instance()),
- m_bHasResultRecordExtra(false), m_constStrArgThreadGroup("thread-group"),
- m_constStrArgThread("thread"), m_constStrArgFrame("frame"),
- m_constStrArgConsume("--"), m_ThreadGrpArgMandatory(false),
- m_ThreadArgMandatory(false), m_FrameArgMandatory(false) {}
-
-//++
-// Details: CMICmdBase destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdBase::~CMICmdBase() {}
-
-//++
-// Details: The invoker requires this function.
-// Type: Overridden.
-// Args: None.
-// Return: SMICmdData & - *this command's present status/data/information.
-// Throws: None.
-//--
-const SMICmdData &CMICmdBase::GetCmdData() const { return m_cmdData; }
-
-//++
-// Details: The invoker requires this function.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - *this command's current error description.
-// Empty string indicates command status ok.
-// Throws: None.
-//--
-const CMIUtilString &CMICmdBase::GetErrorDescription() const {
- return m_strCurrentErrDescription;
-}
-
-//++
-// Details: The CMICmdFactory requires this function. Retrieve the command and
-// argument
-// options description string.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - Command description.
-// Throws: None.
-//--
-const CMIUtilString &CMICmdBase::GetMiCmd() const { return m_strMiCmd; }
-
-//++
-// Details: Help parse the arguments that are common to all commands.
-// Args: None.
-// Return: None
-// Throws: None.
-//--
-void CMICmdBase::AddCommonArgs() {
- m_setCmdArgs.Add(new CMICmdArgValOptionLong(
- m_constStrArgThreadGroup, m_ThreadGrpArgMandatory, true,
- CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
- m_setCmdArgs.Add(new CMICmdArgValOptionLong(
- m_constStrArgThread, m_ThreadArgMandatory, true,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(
- new CMICmdArgValOptionLong(m_constStrArgFrame, m_FrameArgMandatory, true,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(new CMICmdArgValConsume(m_constStrArgConsume, false));
-}
-
-//++
-// Details: The invoker requires this function. A command must be given working
-// data and
-// provide data about its status or provide information to other
-// objects.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdBase::SetCmdData(const SMICmdData &vCmdData) {
- m_cmdData = vCmdData;
-}
-
-//++
-// Details: The command factory requires this function. The factory calls this
-// function
-// so it can obtain *this command's creation function.
-// Type: Overridden.
-// Args: None.
-// Return: CMICmdFactory::CmdCreatorFnPtr - Function pointer.
-// Throws: None.
-//--
-CMICmdFactory::CmdCreatorFnPtr CMICmdBase::GetCmdCreatorFn() const {
- return m_pSelfCreatorFn;
-}
-
-//++
-// Details: If a command is an event type (has callbacks registered with
-// SBListener) it
-// needs to inform the Invoker that it has finished its work so that
-// the
-// Invoker can tidy up and call the commands Acknowledge function (yes
-// the
-// command itself could call the Acknowledge itself but not doing that
-// way).
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdBase::CmdFinishedTellInvoker() const {
- CMICmdInvoker::Instance().CmdExecuteFinished(const_cast<CMICmdBase &>(*this));
-}
-
-//++
-// Details: Returns the final version of the MI result record built up in the
-// command's
-// Acknowledge function. The one line text of MI result.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - MI text version of the MI result record.
-// Throws: None.
-//--
-const CMIUtilString &CMICmdBase::GetMIResultRecord() const {
- return m_miResultRecord.GetString();
-}
-
-//++
-// Details: Retrieve from the command additional MI result to its 1 line
-// response.
-// Because of using LLDB additional 'fake'/hack output is sometimes
-// required to
-// help the driver client operate i.e. Eclipse.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - MI text version of the MI result record.
-// Throws: None.
-//--
-const CMIUtilString &CMICmdBase::GetMIResultRecordExtra() const {
- return m_miResultRecordExtra;
-}
-
-//++
-// Details: Hss *this command got additional MI result to its 1 line response.
-// Because of using LLDB additional 'fake'/hack output is sometimes
-// required to
-// help the driver client operate i.e. Eclipse.
-// Type: Overridden.
-// Args: None.
-// Return: bool - True = Yes have additional MI output, false = no nothing
-// extra.
-// Throws: None.
-//--
-bool CMICmdBase::HasMIResultRecordExtra() const {
- return m_bHasResultRecordExtra;
-}
-
-//++
-// Details: Short cut function to enter error information into the command's
-// metadata
-// object and set the command's error status.
-// Type: Method.
-// Args: rErrMsg - (R) Status description.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdBase::SetError(const CMIUtilString &rErrMsg) {
- m_cmdData.bCmdValid = false;
- m_cmdData.strErrorDescription = rErrMsg;
- m_cmdData.bCmdExecutedSuccessfully = false;
-
- const CMICmnMIValueResult valueResult("msg", CMICmnMIValueConst(rErrMsg));
- const CMICmnMIResultRecord miResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- valueResult);
- m_miResultRecord = miResultRecord;
- m_cmdData.strMiCmdResultRecord = miResultRecord.GetString();
-}
-
-//++
-// Details: Short cut function to check MI command's execute status and
-// set an error in case of failure.
-// Type: Method.
-// Args: error - (R) Error description object.
-// successHandler - (R) function describing actions to execute
-// in case of success state of passed SBError object.
-// errorHandler - (R) function describing actions to execute
-// in case of fail status of passed SBError object.
-// Return: bool.
-// Throws: None.
-//--
-bool CMICmdBase::HandleSBError(const lldb::SBError &error,
- const std::function<bool()> &successHandler,
- const std::function<void()> &errorHandler) {
- if (error.Success())
- return successHandler();
-
- SetError(error.GetCString());
- errorHandler();
- return MIstatus::failure;
-}
-
-//++
-// Details: Short cut function to check MI command's execute status and
-// call specified handler function for success case.
-// Type: Method.
-// Args: error - (R) Error description object.
-// successHandler - (R) function describing actions to execute
-// in case of success state of passed SBError object.
-// Return: bool.
-// Throws: None.
-//--
-bool CMICmdBase::HandleSBErrorWithSuccess(
- const lldb::SBError &error,
- const std::function<bool()> &successHandler) {
- return HandleSBError(error, successHandler);
-}
-
-//++
-// Details: Short cut function to check MI command's execute status and
-// call specified handler function for error case.
-// Type: Method.
-// Args: error - (R) Error description object.
-// errorHandler - (R) function describing actions to execute
-// in case of fail status of passed SBError object.
-// Return: bool.
-// Throws: None.
-//--
-bool CMICmdBase::HandleSBErrorWithFailure(
- const lldb::SBError &error,
- const std::function<void()> &errorHandler) {
- return HandleSBError(error, [] { return MIstatus::success; }, errorHandler);
-}
-
-//++
-// Details: Ask a command to provide its unique identifier.
-// Type: Method.
-// Args: A unique identifier for this command class.
-// Return: None.
-// Throws: None.
-//--
-MIuint CMICmdBase::GetGUID() {
- MIuint64 vptr = reinterpret_cast<MIuint64>(this);
- MIuint id = (vptr)&0xFFFFFFFF;
- id ^= (vptr >> 32) & 0xFFFFFFFF;
-
- return id;
-}
-
-//++
-// 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 CMICmdBase::ParseArgs() {
- // Do nothing - override to implement
-
- return MIstatus::success;
-}
-
-//++
-// Details: Having previously given CMICmdArgSet m_setCmdArgs all the argument
-// or option
-// definitions for the command to handle proceed to parse and validate
-// the
-// command's options text for those arguments and extract the values
-// for each if
-// any.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdBase::ParseValidateCmdOptions() {
- CMICmdArgContext argCntxt(m_cmdData.strMiCmdOption);
- if (m_setCmdArgs.Validate(m_cmdData.strMiCmd, argCntxt))
- return MIstatus::success;
-
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_ARGS),
- m_cmdData.strMiCmd.c_str(),
- m_setCmdArgs.GetErrorDescription().c_str()));
-
- return MIstatus::failure;
-}
-
-//++
-// Details: If the MI Driver is not operating via a client i.e. Eclipse but say
-// operating
-// on a executable passed in as a argument to the drive then what
-// should the driver
-// do on a command failing? Either continue operating or exit the
-// application.
-// Override this function where a command failure cannot allow the
-// driver to
-// continue operating.
-// Type: Overrideable.
-// Args: None.
-// Return: bool - True = Fatal if command fails, false = can continue if
-// command fails.
-// Throws: None.
-//--
-bool CMICmdBase::GetExitAppOnCommandFailure() const { return false; }
Removed: lldb/trunk/tools/lldb-mi/MICmdBase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdBase.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdBase.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdBase.h (removed)
@@ -1,193 +0,0 @@
-//===-- MICmdBase.h ---------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-#include <functional>
-
-#include "lldb/API/SBError.h"
-
-#include "MICmdArgSet.h"
-#include "MICmdData.h"
-#include "MICmdFactory.h"
-#include "MICmdInvoker.h"
-#include "MICmnBase.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnResources.h"
-#include "MIUtilString.h"
-
-// Declarations:
-class CMICmnLLDBDebugSessionInfo;
-
-//++
-//============================================================================
-// Details: MI command base class. MI commands derive from this base class.
-// The Command Factory creates command objects and passes them to the
-// Command Invoker. The Invoker takes ownership of any commands created
-// which means it is the only object to delete them when a command is
-// finished working. Commands do not delete themselves.
-// There are two types of command implicitly defined by the state of
-// the m_bWaitForEventFromSBDebugger flag. There is the event type
-// command which registers (command fn) callbacks with the SBListener
-// does some work then wakes up again when called back, does more work
-// perhaps, ends, then the Invoker calls the command's Acknowledge
-// function. The other type of command is one that just does some work,
-// ends, then the Invoker calls the command's Acknowledge function. No
-// events set up.
-// A command's Execute(), Acknowledge() and event callback functions
-// are
-// carried out in the main thread.
-// A command may use the argument derived object classes
-// (CMICmdArgValBase)
-// to factor handling and parsing of different types of arguments
-// presented to a command. A command will produce an error should it
-// be presented with arguments or options it does not understand.
-//--
-class CMICmdBase : public CMICmnBase,
- public CMICmdInvoker::ICmd,
- public CMICmdFactory::ICmd {
- // Methods:
-public:
- CMICmdBase();
-
- // Overridden:
- // From CMICmdInvoker::ICmd
- const SMICmdData &GetCmdData() const override;
- const CMIUtilString &GetErrorDescription() const override;
- void SetCmdData(const SMICmdData &vCmdData) override;
- void CmdFinishedTellInvoker() const override;
- const CMIUtilString &GetMIResultRecord() const override;
- const CMIUtilString &GetMIResultRecordExtra() const override;
- bool HasMIResultRecordExtra() const override;
- bool ParseArgs() override;
- // From CMICmdFactory::ICmd
- const CMIUtilString &GetMiCmd() const override;
- CMICmdFactory::CmdCreatorFnPtr GetCmdCreatorFn() const override;
-
- virtual MIuint GetGUID();
- void AddCommonArgs();
-
- // Overrideable:
- ~CMICmdBase() override;
- virtual bool GetExitAppOnCommandFailure() const;
-
- // Methods:
-protected:
- void SetError(const CMIUtilString &rErrMsg);
- bool HandleSBError(const lldb::SBError &error,
- const std::function<bool()> &successHandler =
- [] { return MIstatus::success; },
- const std::function<void()> &errorHandler = [] {});
- bool HandleSBErrorWithSuccess(const lldb::SBError &error,
- const std::function<bool()> &successHandler);
- bool HandleSBErrorWithFailure(const lldb::SBError &error,
- const std::function<void()> &errorHandler);
- template <class T> T *GetOption(const CMIUtilString &vStrOptionName);
- bool ParseValidateCmdOptions();
-
- // Attributes:
- CMICmdFactory::CmdCreatorFnPtr m_pSelfCreatorFn;
- CMIUtilString m_strCurrentErrDescription; // Reason for Execute or Acknowledge
- // function failure
- SMICmdData m_cmdData; // Holds information/status of *this command. Used by
- // other MI code to report or determine state of a
- // command.
- bool m_bWaitForEventFromSBDebugger; // True = yes event type command wait,
- // false = command calls Acknowledge()
- // straight after Execute()
- // no waiting
- CMIUtilString
- m_strMiCmd; // The MI text identifying *this command i.e. 'break-insert'
- CMICmnMIResultRecord m_miResultRecord; // This is completed in the
- // Acknowledge() function and returned
- // to the Command Invoker to proceed
- // stdout output. Each command forms 1 response to its input.
- CMIUtilString m_miResultRecordExtra; // This is completed in the Acknowledge()
- // function and returned to the Command
- // Invoker to proceed
- // stdout output. Hack command produce more response text to help the client
- // because of using LLDB
- CMICmnLLDBDebugSessionInfo &m_rLLDBDebugSessionInfo; // Access to command
- // sharing information or
- // data across any and
- // all command based
- // derived classes.
- bool m_bHasResultRecordExtra; // True = Yes command produced additional MI
- // output to its 1 line response, false = no
- // extra MI output
- // formed.
- CMICmdArgSet m_setCmdArgs; // The list of arguments *this command needs to
- // parse from the options string to carry out work.
- const CMIUtilString m_constStrArgThreadGroup;
- const CMIUtilString m_constStrArgThread;
- const CMIUtilString m_constStrArgFrame;
- const CMIUtilString m_constStrArgConsume;
-
- // These 3 members can be used by the derived classes to make any of
- // "thread", "frame" or "thread-group" mandatory.
- bool m_ThreadGrpArgMandatory;
- bool m_ThreadArgMandatory;
- bool m_FrameArgMandatory;
-};
-
-//++
-// Details: Retrieve the command argument or option object pointer so that it
-// can be
-// examined. If the option found and valid get the value (number,
-// string or list
-// - see CMICmdArgValBase class) from it to use with the command's
-// decision
-// making. If the argument is not found the command's error description
-// is set
-// describing the error condition.
-// Type: Template method.
-// Args: vStrOptionName - (R) The text name of the argument or option to
-// search for in
-// the list of the command's possible arguments
-// or options.
-// Return: T * - CMICmdArgValBase derived object.
-// - nullptr = function has failed, unable to retrieve the
-// option/arg object.
-// Throws: None.
-//--
-template <class T>
-T *CMICmdBase::GetOption(const CMIUtilString &vStrOptionName) {
- CMICmdArgValBase *pPtrBase = nullptr;
- if (!m_setCmdArgs.GetArg(vStrOptionName, pPtrBase)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- vStrOptionName.c_str()));
- return nullptr;
- }
-
- return static_cast<T *>(pPtrBase);
-}
-
-//++
-// Details: Retrieve the command argument or option object pointer using
-// template function
-// CMICmdBase::GetOption(). Should the argument (by name) not be found
-// the
-// command will exit with a failure (set in GetOption()).
-// Type: Preprocessor macro.
-// Args: a - (R) The actual variable's name.
-// b - (R) The type of variable (appended to CMICmdArgVal i.e.
-// CMICmdArgValString).
-// c - (R) The text name of the argument or option to search for in
-// the list of
-// the command's possible arguments or options.
-// Return: T * - CMICmdArgValBase derived object.
-// - nullptr = function has failed, unable to retrieve the
-// option/arg object.
-// Throws: None.
-//--
-#define CMICMDBASE_GETOPTION(a, b, c) \
- CMICmdArgVal##b *a = CMICmdBase::GetOption<CMICmdArgVal##b>(c); \
- if (a == nullptr) \
- return MIstatus::failure;
-// This comment is to stop compile warning for #define
Removed: lldb/trunk/tools/lldb-mi/MICmdCmd.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmd.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmd.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmd.cpp (removed)
@@ -1,158 +0,0 @@
-//===-- MICmdCmd.cpp --------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdEnablePrettyPrinting implementation.
-// CMICmdCmdSource implementation.
-//
-
-// In-house headers:
-#include "MICmdCmd.h"
-
-//++
-// Details: CMICmdCmdEnablePrettyPrinting constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdEnablePrettyPrinting::CMICmdCmdEnablePrettyPrinting() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "enable-pretty-printing";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdEnablePrettyPrinting::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdEnablePrettyPrinting destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdEnablePrettyPrinting::~CMICmdCmdEnablePrettyPrinting() {}
-
-//++
-// 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 CMICmdCmdEnablePrettyPrinting::Execute() {
- // 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.
-//--
-bool CMICmdCmdEnablePrettyPrinting::Acknowledge() {
- const CMICmnMIValueConst miValueConst("0");
- const CMICmnMIValueResult miValueResult("supported", miValueConst);
- 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.
-//--
-CMICmdBase *CMICmdCmdEnablePrettyPrinting::CreateSelf() {
- return new CMICmdCmdEnablePrettyPrinting();
-}
-
-
-//++
-// Details: CMICmdCmdSource constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSource::CMICmdCmdSource() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "source";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdSource::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdSource destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSource::~CMICmdCmdSource() {}
-
-//++
-// 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 CMICmdCmdSource::Execute() {
- // 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.
-//--
-bool CMICmdCmdSource::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdSource::CreateSelf() { return new CMICmdCmdSource(); }
Removed: lldb/trunk/tools/lldb-mi/MICmdCmd.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmd.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmd.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmd.h (removed)
@@ -1,90 +0,0 @@
-//===-- MICmdCmd.h ----------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdEnablePrettyPrinting interface.
-// CMICmdCmdSource interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-/*
-MI commands implemented are:
- See MICmdCommands.cpp
-*/
-
-#pragma once
-
-// Third party headers:
-#include "lldb/API/SBBreakpoint.h"
-#include "lldb/API/SBCommandReturnObject.h"
-#include <vector>
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "enable-pretty-printing".
-// Enables Python base pretty printing.
-// Ref:
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Variable-Objects.html
-//--
-class CMICmdCmdEnablePrettyPrinting : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdEnablePrettyPrinting();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdEnablePrettyPrinting() override;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "source".
-//--
-class CMICmdCmdSource : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdSource();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdSource() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdBreak.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdBreak.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdBreak.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdBreak.cpp (removed)
@@ -1,1024 +0,0 @@
-//===-- MICmdCmdBreak.cpp ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdBreakInsert implementation.
-// CMICmdCmdBreakDelete implementation.
-// CMICmdCmdBreakDisable implementation.
-// CMICmdCmdBreakEnable implementation.
-// CMICmdCmdBreakAfter implementation.
-// CMICmdCmdBreakCondition implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBBreakpointLocation.h"
-
-// In-house headers:
-#include "MICmdArgValFile.h"
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-#include "MICmdCmdBreak.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnStreamStdout.h"
-
-//++
-// Details: CMICmdCmdBreakInsert constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakInsert::CMICmdCmdBreakInsert()
- : m_bBrkPtIsTemp(false), m_bBrkPtIsPending(false), m_nBrkPtIgnoreCount(0),
- m_bBrkPtEnabled(false), m_bBrkPtCondition(false), m_bBrkPtThreadId(false),
- m_nBrkPtThreadId(0), m_constStrArgNamedTempBrkPt("t"),
- m_constStrArgNamedHWBrkPt("h"), m_constStrArgNamedPendinfBrkPt("f"),
- m_constStrArgNamedDisableBrkPt("d"), m_constStrArgNamedTracePt("a"),
- m_constStrArgNamedConditionalBrkPt("c"), m_constStrArgNamedInoreCnt("i"),
- m_constStrArgNamedRestrictBrkPtToThreadId("p"),
- m_constStrArgNamedLocation("location") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "break-insert";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdBreakInsert::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdBreakInsert destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakInsert::~CMICmdCmdBreakInsert() {}
-
-//++
-// 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 CMICmdCmdBreakInsert::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgNamedTempBrkPt, false, true));
- // Not implemented m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- // m_constStrArgNamedHWBrkPt, false, false));
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- m_constStrArgNamedPendinfBrkPt, false, true,
- CMICmdArgValListBase::eArgValType_StringQuotedNumberPath, 1));
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgNamedDisableBrkPt,
- false, false));
- // Not implemented m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- // m_constStrArgNamedTracePt, false, false));
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- m_constStrArgNamedConditionalBrkPt, false, true,
- CMICmdArgValListBase::eArgValType_StringQuoted, 1));
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgNamedInoreCnt, false, true,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- m_constStrArgNamedRestrictBrkPtToThreadId, false, true,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedLocation, false,
- true, false, false, true));
- return ParseValidateCmdOptions();
-}
-
-//++
-// Helper function for CMICmdCmdBreakInsert::Execute().
-//
-// Given a string, return the position of the ':' separator in 'file:func'
-// or 'file:line', if any. If not found, return npos. For example, return
-// 5 for 'foo.c:std::string'.
-//--
-static size_t findFileSeparatorPos(const std::string &x) {
- // Full paths in windows can have ':' after a drive letter, so we
- // search backwards, taking care to skip C++ namespace tokens '::'.
- size_t n = x.rfind(':');
- while (n != std::string::npos && n > 1 && x[n - 1] == ':') {
- n = x.rfind(':', n - 2);
- }
- return n;
-}
-
-//++
-// 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 CMICmdCmdBreakInsert::Execute() {
- CMICMDBASE_GETOPTION(pArgTempBrkPt, OptionShort, m_constStrArgNamedTempBrkPt);
- CMICMDBASE_GETOPTION(pArgThreadGroup, OptionLong, m_constStrArgThreadGroup);
- CMICMDBASE_GETOPTION(pArgLocation, String, m_constStrArgNamedLocation);
- CMICMDBASE_GETOPTION(pArgIgnoreCnt, OptionShort, m_constStrArgNamedInoreCnt);
- CMICMDBASE_GETOPTION(pArgPendingBrkPt, OptionShort,
- m_constStrArgNamedPendinfBrkPt);
- CMICMDBASE_GETOPTION(pArgDisableBrkPt, OptionShort,
- m_constStrArgNamedDisableBrkPt);
- CMICMDBASE_GETOPTION(pArgConditionalBrkPt, OptionShort,
- m_constStrArgNamedConditionalBrkPt);
- CMICMDBASE_GETOPTION(pArgRestrictBrkPtToThreadId, OptionShort,
- m_constStrArgNamedRestrictBrkPtToThreadId);
-
- // Ask LLDB for the target to check if we have valid or dummy one.
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBTarget sbTarget = rSessionInfo.GetTarget();
-
- m_bBrkPtEnabled = !pArgDisableBrkPt->GetFound();
- m_bBrkPtIsTemp = pArgTempBrkPt->GetFound();
- m_bHaveArgOptionThreadGrp = pArgThreadGroup->GetFound();
- if (m_bHaveArgOptionThreadGrp) {
- MIuint nThreadGrp = 0;
- pArgThreadGroup->GetExpectedOption<CMICmdArgValThreadGrp, MIuint>(
- nThreadGrp);
- m_strArgOptionThreadGrp = CMIUtilString::Format("i%d", nThreadGrp);
- }
-
- if (sbTarget == rSessionInfo.GetDebugger().GetDummyTarget())
- m_bBrkPtIsPending = true;
- else {
- m_bBrkPtIsPending = pArgPendingBrkPt->GetFound();
- if (!m_bBrkPtIsPending) {
- CMIUtilString pending;
- if (m_rLLDBDebugSessionInfo.SharedDataRetrieve("breakpoint.pending", pending)) {
- m_bBrkPtIsPending = pending == "on";
- }
- }
- }
-
- if (pArgLocation->GetFound())
- m_brkName = pArgLocation->GetValue();
- else if (m_bBrkPtIsPending) {
- pArgPendingBrkPt->GetExpectedOption<CMICmdArgValString, CMIUtilString>(
- m_brkName);
- }
- if (pArgIgnoreCnt->GetFound()) {
- pArgIgnoreCnt->GetExpectedOption<CMICmdArgValNumber, MIuint>(
- m_nBrkPtIgnoreCount);
- }
- m_bBrkPtCondition = pArgConditionalBrkPt->GetFound();
- if (m_bBrkPtCondition) {
- pArgConditionalBrkPt->GetExpectedOption<CMICmdArgValString, CMIUtilString>(
- m_brkPtCondition);
- }
- m_bBrkPtThreadId = pArgRestrictBrkPtToThreadId->GetFound();
- if (m_bBrkPtCondition) {
- pArgRestrictBrkPtToThreadId->GetExpectedOption<CMICmdArgValNumber, MIuint>(
- m_nBrkPtThreadId);
- }
-
- // Determine if break on a file line or at a function
- BreakPoint_e eBrkPtType = eBreakPoint_NotDefineYet;
- CMIUtilString fileName;
- MIuint nFileLine = 0;
- CMIUtilString strFileFn;
- CMIUtilString rStrLineOrFn;
- // Is the string in the form 'file:func' or 'file:line'?
- // If so, find the position of the ':' separator.
- const size_t nPosColon = findFileSeparatorPos(m_brkName);
- if (nPosColon != std::string::npos) {
- // Extract file name and line number from it
- fileName = m_brkName.substr(0, nPosColon);
- rStrLineOrFn =
- m_brkName.substr(nPosColon + 1, m_brkName.size() - nPosColon - 1);
-
- if (rStrLineOrFn.empty())
- eBrkPtType = eBreakPoint_ByName;
- else {
- MIint64 nValue = 0;
- if (rStrLineOrFn.ExtractNumber(nValue)) {
- nFileLine = static_cast<MIuint>(nValue);
- eBrkPtType = eBreakPoint_ByFileLine;
- } else {
- strFileFn = rStrLineOrFn;
- eBrkPtType = eBreakPoint_ByFileFn;
- }
- }
- }
-
- // Determine if break defined as an address
- lldb::addr_t nAddress = 0;
- if (eBrkPtType == eBreakPoint_NotDefineYet) {
- MIint64 nValue = 0;
- if (m_brkName.ExtractNumber(nValue)) {
- nAddress = static_cast<lldb::addr_t>(nValue);
- eBrkPtType = eBreakPoint_ByAddress;
- }
- }
-
- // Break defined as an function
- if (eBrkPtType == eBreakPoint_NotDefineYet) {
- eBrkPtType = eBreakPoint_ByName;
- }
-
- // Ask LLDB to create a breakpoint
- bool bOk = MIstatus::success;
- switch (eBrkPtType) {
- case eBreakPoint_ByAddress:
- m_brkPt = sbTarget.BreakpointCreateByAddress(nAddress);
- break;
- case eBreakPoint_ByFileFn: {
- lldb::SBFileSpecList module; // search in all modules
- lldb::SBFileSpecList compUnit;
- compUnit.Append(lldb::SBFileSpec(fileName.c_str()));
- m_brkPt =
- sbTarget.BreakpointCreateByName(strFileFn.c_str(), module, compUnit);
- break;
- }
- case eBreakPoint_ByFileLine:
- m_brkPt = sbTarget.BreakpointCreateByLocation(fileName.c_str(), nFileLine);
- break;
- case eBreakPoint_ByName:
- m_brkPt = sbTarget.BreakpointCreateByName(m_brkName.c_str(), nullptr);
- break;
- case eBreakPoint_count:
- case eBreakPoint_NotDefineYet:
- case eBreakPoint_Invalid:
- bOk = MIstatus::failure;
- break;
- }
-
- if (bOk) {
- if (!m_bBrkPtIsPending && (m_brkPt.GetNumLocations() == 0)) {
- sbTarget.BreakpointDelete(m_brkPt.GetID());
- SetError(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_LOCATION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(), m_brkName.c_str()));
- return MIstatus::failure;
- }
-
- m_brkPt.SetEnabled(m_bBrkPtEnabled);
- m_brkPt.SetIgnoreCount(m_nBrkPtIgnoreCount);
- if (m_bBrkPtCondition)
- m_brkPt.SetCondition(m_brkPtCondition.c_str());
- if (m_bBrkPtThreadId)
- m_brkPt.SetThreadID(m_nBrkPtThreadId);
- }
-
- // CODETAG_LLDB_BREAKPOINT_CREATION
- // This is in the main thread
- // Record break point information to be by LLDB event handler function
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.GetBrkPtInfo(m_brkPt, sBrkPtInfo))
- return MIstatus::failure;
- sBrkPtInfo.m_id = m_brkPt.GetID();
- sBrkPtInfo.m_bDisp = m_bBrkPtIsTemp;
- sBrkPtInfo.m_bEnabled = m_bBrkPtEnabled;
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = m_bHaveArgOptionThreadGrp;
- sBrkPtInfo.m_strOptThrdGrp = m_strArgOptionThreadGrp;
- sBrkPtInfo.m_nTimes = m_brkPt.GetHitCount();
- sBrkPtInfo.m_strOrigLoc = m_brkName;
- sBrkPtInfo.m_nIgnore = m_nBrkPtIgnoreCount;
- sBrkPtInfo.m_bPending = m_bBrkPtIsPending;
- sBrkPtInfo.m_bCondition = m_bBrkPtCondition;
- sBrkPtInfo.m_strCondition = m_brkPtCondition;
- sBrkPtInfo.m_bBrkPtThreadId = m_bBrkPtThreadId;
- sBrkPtInfo.m_nBrkPtThreadId = m_nBrkPtThreadId;
-
- bOk = bOk && rSessionInfo.RecordBrkPtInfo(m_brkPt.GetID(), sBrkPtInfo);
- if (!bOk) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_brkName.c_str()));
- return MIstatus::failure;
- }
-
- // CODETAG_LLDB_BRKPT_ID_MAX
- if (m_brkPt.GetID() > (lldb::break_id_t)rSessionInfo.m_nBrkPointCntMax) {
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_BRKPT_CNT_EXCEEDED), m_cmdData.strMiCmd.c_str(),
- rSessionInfo.m_nBrkPointCntMax, m_brkName.c_str()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdBreakInsert::Acknowledge() {
- // Get breakpoint information
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.RecordBrkPtInfoGet(m_brkPt.GetID(), sBrkPtInfo))
- return MIstatus::failure;
-
- // MI print
- // "^done,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
- // PRIx64
- // "\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",thread-groups=[\"%s\"],times=\"%d\",original-location=\"%s\"}"
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple))
- return MIstatus::failure;
-
- const CMICmnMIValueResult miValueResultD("bkpt", miValueTuple);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResultD);
- 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.
-//--
-CMICmdBase *CMICmdCmdBreakInsert::CreateSelf() {
- return new CMICmdCmdBreakInsert();
-}
-
-
-//++
-// Details: CMICmdCmdBreakDelete constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakDelete::CMICmdCmdBreakDelete()
- : m_constStrArgNamedBrkPt("breakpoint") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "break-delete";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdBreakDelete::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdBreakDelete destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakDelete::~CMICmdCmdBreakDelete() {}
-
-//++
-// 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 CMICmdCmdBreakDelete::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValListOfN(m_constStrArgNamedBrkPt, true, true,
- CMICmdArgValListBase::eArgValType_Number));
- return 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.
-//--
-bool CMICmdCmdBreakDelete::Execute() {
- CMICMDBASE_GETOPTION(pArgBrkPt, ListOfN, m_constStrArgNamedBrkPt);
-
- // ATM we only handle one break point ID
- MIuint64 nBrk = UINT64_MAX;
- if (!pArgBrkPt->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nBrk)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgNamedBrkPt.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- const bool bBrkPt = rSessionInfo.GetTarget().BreakpointDelete(
- static_cast<lldb::break_id_t>(nBrk));
- if (!bBrkPt) {
- const CMIUtilString strBrkNum(CMIUtilString::Format("%d", nBrk));
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INVALID),
- m_cmdData.strMiCmd.c_str(),
- strBrkNum.c_str()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdBreakDelete::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdBreakDelete::CreateSelf() {
- return new CMICmdCmdBreakDelete();
-}
-
-
-//++
-// Details: CMICmdCmdBreakDisable constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakDisable::CMICmdCmdBreakDisable()
- : m_constStrArgNamedBrkPt("breakpoint"), m_bBrkPtDisabledOk(false),
- m_nBrkPtId(0) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "break-disable";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdBreakDisable::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdBreakDisable destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakDisable::~CMICmdCmdBreakDisable() {}
-
-//++
-// 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 CMICmdCmdBreakDisable::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValListOfN(m_constStrArgNamedBrkPt, true, true,
- CMICmdArgValListBase::eArgValType_Number));
- return 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.
-//--
-bool CMICmdCmdBreakDisable::Execute() {
- CMICMDBASE_GETOPTION(pArgBrkPt, ListOfN, m_constStrArgNamedBrkPt);
-
- // ATM we only handle one break point ID
- MIuint64 nBrk = UINT64_MAX;
- if (!pArgBrkPt->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nBrk)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgNamedBrkPt.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBBreakpoint brkPt = rSessionInfo.GetTarget().FindBreakpointByID(
- static_cast<lldb::break_id_t>(nBrk));
- if (brkPt.IsValid()) {
- m_bBrkPtDisabledOk = true;
- brkPt.SetEnabled(false);
- m_nBrkPtId = nBrk;
- }
-
- 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.
-//--
-bool CMICmdCmdBreakDisable::Acknowledge() {
- if (m_bBrkPtDisabledOk) {
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMIUtilString strBrkPtId(CMIUtilString::Format("%d", m_nBrkPtId));
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_BRKPT_INVALID), strBrkPtId.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdBreakDisable::CreateSelf() {
- return new CMICmdCmdBreakDisable();
-}
-
-
-//++
-// Details: CMICmdCmdBreakEnable constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakEnable::CMICmdCmdBreakEnable()
- : m_constStrArgNamedBrkPt("breakpoint"), m_bBrkPtEnabledOk(false),
- m_nBrkPtId(0) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "break-enable";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdBreakEnable::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdBreakEnable destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakEnable::~CMICmdCmdBreakEnable() {}
-
-//++
-// 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 CMICmdCmdBreakEnable::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValListOfN(m_constStrArgNamedBrkPt, true, true,
- CMICmdArgValListBase::eArgValType_Number));
- return 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.
-//--
-bool CMICmdCmdBreakEnable::Execute() {
- CMICMDBASE_GETOPTION(pArgBrkPt, ListOfN, m_constStrArgNamedBrkPt);
-
- // ATM we only handle one break point ID
- MIuint64 nBrk = UINT64_MAX;
- if (!pArgBrkPt->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nBrk)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgNamedBrkPt.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBBreakpoint brkPt = rSessionInfo.GetTarget().FindBreakpointByID(
- static_cast<lldb::break_id_t>(nBrk));
- if (brkPt.IsValid()) {
- m_bBrkPtEnabledOk = true;
- brkPt.SetEnabled(true);
- m_nBrkPtId = nBrk;
- }
-
- 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.
-//--
-bool CMICmdCmdBreakEnable::Acknowledge() {
- if (m_bBrkPtEnabledOk) {
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMIUtilString strBrkPtId(CMIUtilString::Format("%d", m_nBrkPtId));
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_BRKPT_INVALID), strBrkPtId.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdBreakEnable::CreateSelf() {
- return new CMICmdCmdBreakEnable();
-}
-
-
-//++
-// Details: CMICmdCmdBreakAfter constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakAfter::CMICmdCmdBreakAfter()
- : m_constStrArgNamedNumber("number"), m_constStrArgNamedCount("count"),
- m_nBrkPtId(0), m_nBrkPtCount(0) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "break-after";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdBreakAfter::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdBreakAfter destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakAfter::~CMICmdCmdBreakAfter() {}
-
-//++
-// 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 CMICmdCmdBreakAfter::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValNumber(m_constStrArgNamedNumber, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNamedCount, true, true));
- return 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.
-//--
-bool CMICmdCmdBreakAfter::Execute() {
- CMICMDBASE_GETOPTION(pArgNumber, Number, m_constStrArgNamedNumber);
- CMICMDBASE_GETOPTION(pArgCount, Number, m_constStrArgNamedCount);
-
- m_nBrkPtId = pArgNumber->GetValue();
- m_nBrkPtCount = pArgCount->GetValue();
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBBreakpoint brkPt = rSessionInfo.GetTarget().FindBreakpointByID(
- static_cast<lldb::break_id_t>(m_nBrkPtId));
- if (brkPt.IsValid()) {
- brkPt.SetIgnoreCount(m_nBrkPtCount);
-
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.RecordBrkPtInfoGet(m_nBrkPtId, sBrkPtInfo)) {
- SetError(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INFO_OBJ_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(), m_nBrkPtId));
- return MIstatus::failure;
- }
- sBrkPtInfo.m_nIgnore = m_nBrkPtCount;
- rSessionInfo.RecordBrkPtInfo(m_nBrkPtId, sBrkPtInfo);
- } else {
- const CMIUtilString strBrkPtId(CMIUtilString::Format("%d", m_nBrkPtId));
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INVALID),
- m_cmdData.strMiCmd.c_str(),
- strBrkPtId.c_str()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdBreakAfter::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdBreakAfter::CreateSelf() {
- return new CMICmdCmdBreakAfter();
-}
-
-
-//++
-// Details: CMICmdCmdBreakCondition constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakCondition::CMICmdCmdBreakCondition()
- : m_constStrArgNamedNumber("number"), m_constStrArgNamedExpr("expr"),
- m_constStrArgNamedExprNoQuotes(
- "expression not surround by quotes") // Not specified in MI spec, we
- // need to handle expressions not
- // surrounded by quotes
- ,
- m_nBrkPtId(0) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "break-condition";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdBreakCondition::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdBreakCondition destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdBreakCondition::~CMICmdCmdBreakCondition() {}
-
-//++
-// 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 CMICmdCmdBreakCondition::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValNumber(m_constStrArgNamedNumber, true, true));
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgNamedExpr, true, true, true, true));
- m_setCmdArgs.Add(new CMICmdArgValListOfN(
- m_constStrArgNamedExprNoQuotes, false, false,
- CMICmdArgValListBase::eArgValType_StringQuotedNumber));
- return 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.
-//--
-bool CMICmdCmdBreakCondition::Execute() {
- CMICMDBASE_GETOPTION(pArgNumber, Number, m_constStrArgNamedNumber);
- CMICMDBASE_GETOPTION(pArgExpr, String, m_constStrArgNamedExpr);
-
- m_nBrkPtId = pArgNumber->GetValue();
- m_strBrkPtExpr = pArgExpr->GetValue();
- m_strBrkPtExpr += GetRestOfExpressionNotSurroundedInQuotes();
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBBreakpoint brkPt = rSessionInfo.GetTarget().FindBreakpointByID(
- static_cast<lldb::break_id_t>(m_nBrkPtId));
- if (brkPt.IsValid()) {
- brkPt.SetCondition(m_strBrkPtExpr.c_str());
-
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.RecordBrkPtInfoGet(m_nBrkPtId, sBrkPtInfo)) {
- SetError(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INFO_OBJ_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(), m_nBrkPtId));
- return MIstatus::failure;
- }
- sBrkPtInfo.m_strCondition = m_strBrkPtExpr;
- rSessionInfo.RecordBrkPtInfo(m_nBrkPtId, sBrkPtInfo);
- } else {
- const CMIUtilString strBrkPtId(CMIUtilString::Format("%d", m_nBrkPtId));
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_BRKPT_INVALID),
- m_cmdData.strMiCmd.c_str(),
- strBrkPtId.c_str()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdBreakCondition::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdBreakCondition::CreateSelf() {
- return new CMICmdCmdBreakCondition();
-}
-
-//++
-// Details: A breakpoint expression can be passed to *this command as:
-// a single string i.e. '2' -> ok.
-// a quoted string i.e. "a > 100" -> ok
-// a non quoted string i.e. 'a > 100' -> not ok
-// CMICmdArgValString only extracts the first space separated string,
-// the "a".
-// This function using the optional argument type CMICmdArgValListOfN
-// collects
-// the rest of the expression so that is may be added to the 'a' part
-// to form a
-// complete expression string i.e. "a > 100".
-// If the expression value was guaranteed to be surrounded by quotes
-// them this
-// function would not be necessary.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString - Rest of the breakpoint expression.
-// Throws: None.
-//--
-CMIUtilString
-CMICmdCmdBreakCondition::GetRestOfExpressionNotSurroundedInQuotes() {
- CMIUtilString strExpression;
-
- CMICmdArgValListOfN *pArgExprNoQuotes =
- CMICmdBase::GetOption<CMICmdArgValListOfN>(
- m_constStrArgNamedExprNoQuotes);
- if (pArgExprNoQuotes != nullptr) {
- const CMICmdArgValListBase::VecArgObjPtr_t &rVecExprParts(
- pArgExprNoQuotes->GetExpectedOptions());
- if (!rVecExprParts.empty()) {
- CMICmdArgValListBase::VecArgObjPtr_t::const_iterator it =
- rVecExprParts.begin();
- while (it != rVecExprParts.end()) {
- const CMICmdArgValString *pPartExpr =
- static_cast<CMICmdArgValString *>(*it);
- const CMIUtilString &rPartExpr = pPartExpr->GetValue();
- strExpression += " ";
- strExpression += rPartExpr;
-
- // Next
- ++it;
- }
- strExpression = strExpression.Trim();
- }
- }
-
- return strExpression;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdBreak.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdBreak.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdBreak.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdBreak.h (removed)
@@ -1,262 +0,0 @@
-//===-- MICmdCmdBreak.h -----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdBreakInsert interface.
-// CMICmdCmdBreakDelete interface.
-// CMICmdCmdBreakDisable interface.
-// CMICmdCmdBreakEnable interface.
-// CMICmdCmdBreakAfter interface.
-// CMICmdCmdBreakCondition interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// Third party headers:
-#include "lldb/API/SBBreakpoint.h"
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "break-insert".
-// This command does not follow the MI documentation exactly.
-//--
-class CMICmdCmdBreakInsert : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdBreakInsert();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdBreakInsert() override;
-
- // Enumerations:
-private:
- //++ ===================================================================
- // Details: The type of break point give in the MI command text.
- //--
- enum BreakPoint_e {
- eBreakPoint_Invalid = 0,
- eBreakPoint_ByFileLine,
- eBreakPoint_ByFileFn,
- eBreakPoint_ByName,
- eBreakPoint_ByAddress,
- eBreakPoint_count,
- eBreakPoint_NotDefineYet
- };
-
- // Attributes:
-private:
- bool m_bBrkPtIsTemp;
- bool m_bHaveArgOptionThreadGrp;
- CMIUtilString m_brkName;
- CMIUtilString m_strArgOptionThreadGrp;
- lldb::SBBreakpoint m_brkPt;
- bool m_bBrkPtIsPending;
- MIuint m_nBrkPtIgnoreCount;
- bool m_bBrkPtEnabled;
- bool m_bBrkPtCondition;
- CMIUtilString m_brkPtCondition;
- bool m_bBrkPtThreadId;
- MIuint m_nBrkPtThreadId;
- const CMIUtilString m_constStrArgNamedTempBrkPt;
- const CMIUtilString m_constStrArgNamedHWBrkPt; // Not handled by *this command
- const CMIUtilString m_constStrArgNamedPendinfBrkPt;
- const CMIUtilString m_constStrArgNamedDisableBrkPt;
- const CMIUtilString m_constStrArgNamedTracePt; // Not handled by *this command
- const CMIUtilString m_constStrArgNamedConditionalBrkPt;
- const CMIUtilString m_constStrArgNamedInoreCnt;
- const CMIUtilString m_constStrArgNamedRestrictBrkPtToThreadId;
- const CMIUtilString m_constStrArgNamedLocation;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "break-delete".
-//--
-class CMICmdCmdBreakDelete : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdBreakDelete();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdBreakDelete() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamedBrkPt;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "break-disable".
-//--
-class CMICmdCmdBreakDisable : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdBreakDisable();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdBreakDisable() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamedBrkPt;
- bool m_bBrkPtDisabledOk;
- MIuint m_nBrkPtId;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "break-enable".
-//--
-class CMICmdCmdBreakEnable : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdBreakEnable();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdBreakEnable() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamedBrkPt;
- bool m_bBrkPtEnabledOk;
- MIuint m_nBrkPtId;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "break-after".
-//--
-class CMICmdCmdBreakAfter : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdBreakAfter();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdBreakAfter() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamedNumber;
- const CMIUtilString m_constStrArgNamedCount;
- MIuint m_nBrkPtId;
- MIuint m_nBrkPtCount;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "break-condition".
-//--
-class CMICmdCmdBreakCondition : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdBreakCondition();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdBreakCondition() override;
-
- // Methods:
-private:
- CMIUtilString GetRestOfExpressionNotSurroundedInQuotes();
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamedNumber;
- const CMIUtilString m_constStrArgNamedExpr;
- const CMIUtilString m_constStrArgNamedExprNoQuotes; // Not specified in MI
- // spec, we need to handle
- // expressions not
- // surrounded by quotes
- MIuint m_nBrkPtId;
- CMIUtilString m_strBrkPtExpr;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdData.cpp (removed)
@@ -1,1673 +0,0 @@
-//===-- MICmdCmdData.cpp ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdDataEvaluateExpression implementation.
-// CMICmdCmdDataDisassemble implementation.
-// CMICmdCmdDataReadMemoryBytes implementation.
-// CMICmdCmdDataReadMemory implementation.
-// CMICmdCmdDataListRegisterNames implementation.
-// CMICmdCmdDataListRegisterValues implementation.
-// CMICmdCmdDataListRegisterChanged implementation.
-// CMICmdCmdDataWriteMemoryBytes implementation.
-// CMICmdCmdDataWriteMemory implementation.
-// CMICmdCmdDataInfoLine implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBInstruction.h"
-#include "lldb/API/SBInstructionList.h"
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBThread.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/Twine.h"
-#include <inttypes.h>
-#include <string>
-
-// In-house headers:
-#include "MICmdArgValConsume.h"
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-#include "MICmdCmdData.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugSessionInfoVarObj.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBProxySBValue.h"
-#include "MICmnLLDBUtilSBValue.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "Platform.h"
-
-namespace {
-CMIUtilString IntToHexAddrStr(uint32_t number) {
- return CMIUtilString("0x" + llvm::Twine::utohexstr(number).str());
-}
-} // namespace
-
-//++
-// Details: CMICmdCmdDataEvaluateExpression constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataEvaluateExpression::CMICmdCmdDataEvaluateExpression()
- : m_bExpressionValid(true), m_bEvaluatedExpression(true), m_strValue("??"),
- m_bFoundInvalidChar(false), m_cExpressionInvalidChar(0x00),
- m_constStrArgExpr("expr") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-evaluate-expression";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataEvaluateExpression::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataEvaluateExpression destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataEvaluateExpression::~CMICmdCmdDataEvaluateExpression() {}
-
-//++
-// 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 CMICmdCmdDataEvaluateExpression::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgExpr, true, true, true, true));
- return 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.
-//--
-bool CMICmdCmdDataEvaluateExpression::Execute() {
- CMICMDBASE_GETOPTION(pArgExpr, String, m_constStrArgExpr);
-
- const CMIUtilString &rExpression(pArgExpr->GetValue());
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- m_bExpressionValid = (thread.GetNumFrames() > 0);
- if (!m_bExpressionValid)
- return MIstatus::success;
-
- lldb::SBFrame frame = thread.GetSelectedFrame();
- lldb::SBValue value = frame.EvaluateExpression(rExpression.c_str());
- m_Error = value.GetError();
- if (!value.IsValid() || m_Error.Fail())
- value = frame.FindVariable(rExpression.c_str());
- const CMICmnLLDBUtilSBValue utilValue(value, true);
- if (!utilValue.IsValid() || utilValue.IsValueUnknown()) {
- m_bEvaluatedExpression = false;
- return MIstatus::success;
- }
- if (!utilValue.HasName()) {
- if (HaveInvalidCharacterInExpression(rExpression,
- m_cExpressionInvalidChar)) {
- m_bFoundInvalidChar = true;
- return MIstatus::success;
- }
-
- m_strValue = rExpression;
- return MIstatus::success;
- }
- if (rExpression.IsQuoted()) {
- m_strValue = rExpression.Trim('\"');
- return MIstatus::success;
- }
- m_strValue = utilValue.GetValue(true).Escape().AddSlashes();
- 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.
-//--
-bool CMICmdCmdDataEvaluateExpression::Acknowledge() {
- if (m_bExpressionValid) {
- if (m_bEvaluatedExpression) {
- if (m_bFoundInvalidChar) {
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- "Invalid character '%c' in expression", m_cExpressionInvalidChar));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst(m_strValue);
- const CMICmnMIValueResult miValueResult("value", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
- CMIUtilString mi_error_msg = "Could not evaluate expression";
- if (const char *err_msg = m_Error.GetCString())
- mi_error_msg = err_msg;
- const CMICmnMIValueConst miValueConst(mi_error_msg.Escape(true));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst("Invalid expression");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdDataEvaluateExpression::CreateSelf() {
- return new CMICmdCmdDataEvaluateExpression();
-}
-
-//++
-// Details: Examine the expression string to see if it contains invalid
-// characters.
-// Type: Method.
-// Args: vrExpr - (R) Expression string given to *this command.
-// vrwInvalidChar - (W) True = Invalid character found, false =
-// nothing found.
-// Return: bool - True = Invalid character found, false = nothing found.
-// Throws: None.
-//--
-bool CMICmdCmdDataEvaluateExpression::HaveInvalidCharacterInExpression(
- const CMIUtilString &vrExpr, char &vrwInvalidChar) {
- static const std::string strInvalidCharacters(";#\\");
- const size_t nInvalidCharacterOffset =
- vrExpr.find_first_of(strInvalidCharacters);
- const bool bFoundInvalidCharInExpression =
- (nInvalidCharacterOffset != CMIUtilString::npos);
- vrwInvalidChar =
- bFoundInvalidCharInExpression ? vrExpr[nInvalidCharacterOffset] : 0x00;
- return bFoundInvalidCharInExpression;
-}
-
-
-//++
-// Details: CMICmdCmdDataDisassemble constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataDisassemble::CMICmdCmdDataDisassemble()
- : m_constStrArgAddrStart("s"), m_constStrArgAddrEnd("e"),
- m_constStrArgMode("mode"), m_miValueList(true) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-disassemble";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataDisassemble::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataDisassemble destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataDisassemble::~CMICmdCmdDataDisassemble() {}
-
-//++
-// 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 CMICmdCmdDataDisassemble::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- m_constStrArgAddrStart, true, true,
- CMICmdArgValListBase::eArgValType_StringQuotedNumber, 1));
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- m_constStrArgAddrEnd, true, true,
- CMICmdArgValListBase::eArgValType_StringQuotedNumber, 1));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgMode, true, true));
- return 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.
-//--
-bool CMICmdCmdDataDisassemble::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgAddrStart, OptionShort, m_constStrArgAddrStart);
- CMICMDBASE_GETOPTION(pArgAddrEnd, OptionShort, m_constStrArgAddrEnd);
- CMICMDBASE_GETOPTION(pArgMode, Number, m_constStrArgMode);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- CMIUtilString strAddrStart;
- if (!pArgAddrStart->GetExpectedOption<CMICmdArgValString, CMIUtilString>(
- strAddrStart)) {
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_DISASM_ADDR_START_INVALID),
- m_cmdData.strMiCmd.c_str(), m_constStrArgAddrStart.c_str()));
- return MIstatus::failure;
- }
- MIint64 nAddrStart = 0;
- if (!strAddrStart.ExtractNumber(nAddrStart)) {
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_DISASM_ADDR_START_INVALID),
- m_cmdData.strMiCmd.c_str(), m_constStrArgAddrStart.c_str()));
- return MIstatus::failure;
- }
-
- CMIUtilString strAddrEnd;
- if (!pArgAddrEnd->GetExpectedOption<CMICmdArgValString, CMIUtilString>(
- strAddrEnd)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_DISASM_ADDR_END_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgAddrEnd.c_str()));
- return MIstatus::failure;
- }
- MIint64 nAddrEnd = 0;
- if (!strAddrEnd.ExtractNumber(nAddrEnd)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_DISASM_ADDR_END_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgAddrEnd.c_str()));
- return MIstatus::failure;
- }
- const MIuint nDisasmMode = pArgMode->GetValue();
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBTarget sbTarget = rSessionInfo.GetTarget();
- lldb::addr_t lldbStartAddr = static_cast<lldb::addr_t>(nAddrStart);
- lldb::SBInstructionList instructions = sbTarget.ReadInstructions(
- lldb::SBAddress(lldbStartAddr, sbTarget), nAddrEnd - nAddrStart);
- const MIuint nInstructions = instructions.GetSize();
- // Calculate the offset of first instruction so that we can generate offset
- // starting at 0
- lldb::addr_t start_offset = 0;
- if (nInstructions > 0)
- start_offset =
- instructions.GetInstructionAtIndex(0).GetAddress().GetOffset();
-
- for (size_t i = 0; i < nInstructions; i++) {
- const char *pUnknown = "??";
- lldb::SBInstruction instrt = instructions.GetInstructionAtIndex(i);
- const char *pStrMnemonic = instrt.GetMnemonic(sbTarget);
- pStrMnemonic = (pStrMnemonic != nullptr) ? pStrMnemonic : pUnknown;
- const char *pStrComment = instrt.GetComment(sbTarget);
- CMIUtilString strComment;
- if (pStrComment != nullptr && *pStrComment != '\0')
- strComment = CMIUtilString::Format("; %s", pStrComment);
- lldb::SBAddress address = instrt.GetAddress();
- lldb::addr_t addr = address.GetLoadAddress(sbTarget);
- const char *pFnName = address.GetFunction().GetName();
- pFnName = (pFnName != nullptr) ? pFnName : pUnknown;
- lldb::addr_t addrOffSet = address.GetOffset() - start_offset;
- const char *pStrOperands = instrt.GetOperands(sbTarget);
- pStrOperands = (pStrOperands != nullptr) ? pStrOperands : pUnknown;
- const size_t instrtSize = instrt.GetByteSize();
-
- // MI "{address=\"0x%016" PRIx64
- // "\",func-name=\"%s\",offset=\"%lld\",inst=\"%s %s\"}"
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format("0x%016" PRIx64, addr));
- const CMICmnMIValueResult miValueResult("address", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueConst miValueConst2(pFnName);
- const CMICmnMIValueResult miValueResult2("func-name", miValueConst2);
- miValueTuple.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3(
- CMIUtilString::Format("%lld", addrOffSet));
- const CMICmnMIValueResult miValueResult3("offset", miValueConst3);
- miValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4(
- CMIUtilString::Format("%d", instrtSize));
- const CMICmnMIValueResult miValueResult4("size", miValueConst4);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueConst miValueConst5(
- CMIUtilString::Format("%s %s%s", pStrMnemonic, pStrOperands,
- strComment.Escape(true).c_str()));
- const CMICmnMIValueResult miValueResult5("inst", miValueConst5);
- miValueTuple.Add(miValueResult5);
-
- if (nDisasmMode == 1) {
- lldb::SBLineEntry lineEntry = address.GetLineEntry();
- const MIuint nLine = lineEntry.GetLine();
- const char *pFileName = lineEntry.GetFileSpec().GetFilename();
- pFileName = (pFileName != nullptr) ? pFileName : pUnknown;
- // Get a full path to the file.
- char pathBuffer[PATH_MAX];
- lineEntry.GetFileSpec().GetPath(pathBuffer, PATH_MAX);
-
- // MI "src_and_asm_line={line=\"%u\",file=\"%s\",line_asm_insn=[ ],
- // fullname=\"%s\"}"
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format("%u", nLine));
- const CMICmnMIValueResult miValueResult("line", miValueConst);
- CMICmnMIValueTuple miValueTuple2(miValueResult);
- const CMICmnMIValueConst miValueConst2(pFileName);
- const CMICmnMIValueResult miValueResult2("file", miValueConst2);
- miValueTuple2.Add(miValueResult2);
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult3("line_asm_insn", miValueList);
- miValueTuple2.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst5(pathBuffer);
- const CMICmnMIValueResult miValueResult5("fullname", miValueConst5);
- miValueTuple2.Add(miValueResult5);
- const CMICmnMIValueResult miValueResult4("src_and_asm_line",
- miValueTuple2);
- m_miValueList.Add(miValueResult4);
- } else {
- m_miValueList.Add(miValueTuple);
- }
- }
-
- 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.
-//--
-bool CMICmdCmdDataDisassemble::Acknowledge() {
- const CMICmnMIValueResult miValueResult("asm_insns", m_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.
-//--
-CMICmdBase *CMICmdCmdDataDisassemble::CreateSelf() {
- return new CMICmdCmdDataDisassemble();
-}
-
-
-//++
-// Details: CMICmdCmdDataReadMemoryBytes constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataReadMemoryBytes::CMICmdCmdDataReadMemoryBytes()
- : m_constStrArgByteOffset("o"), m_constStrArgAddrExpr("address"),
- m_constStrArgNumBytes("count"), m_pBufferMemory(nullptr), m_nAddrStart(0),
- m_nAddrNumBytesToRead(0) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-read-memory-bytes";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataReadMemoryBytes::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataReadMemoryBytes destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataReadMemoryBytes::~CMICmdCmdDataReadMemoryBytes() {
- if (m_pBufferMemory != nullptr) {
- delete[] m_pBufferMemory;
- m_pBufferMemory = nullptr;
- }
-}
-
-//++
-// 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 CMICmdCmdDataReadMemoryBytes::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgByteOffset, false, true,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgAddrExpr, true, true, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumBytes, true, true));
- return 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdDataReadMemoryBytes::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
- CMICMDBASE_GETOPTION(pArgAddrOffset, OptionShort, m_constStrArgByteOffset);
- CMICMDBASE_GETOPTION(pArgAddrExpr, String, m_constStrArgAddrExpr);
- CMICMDBASE_GETOPTION(pArgNumBytes, Number, m_constStrArgNumBytes);
-
- // get the --thread option value
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- // get the --frame option value
- MIuint64 nFrame = UINT64_MAX;
- if (pArgFrame->GetFound() &&
- !pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
-
- // get the -o option value
- MIuint64 nAddrOffset = 0;
- if (pArgAddrOffset->GetFound() &&
- !pArgAddrOffset->GetExpectedOption<CMICmdArgValNumber, MIuint64>(
- nAddrOffset)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgByteOffset.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBThread thread = (nThreadId != UINT64_MAX)
- ? sbProcess.GetThreadByIndexID(nThreadId)
- : sbProcess.GetSelectedThread();
- if (!thread.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame)
- : thread.GetSelectedFrame();
- if (!frame.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FRAME_INVALID),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- const CMIUtilString &rAddrExpr = pArgAddrExpr->GetValue();
- lldb::SBValue addrExprValue = frame.EvaluateExpression(rAddrExpr.c_str());
- lldb::SBError error = addrExprValue.GetError();
- if (error.Fail()) {
- SetError(error.GetCString());
- return MIstatus::failure;
- } else if (!addrExprValue.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_EXPR_INVALID),
- rAddrExpr.c_str()));
- return MIstatus::failure;
- }
-
- MIuint64 nAddrStart = 0;
- if (!CMICmnLLDBProxySBValue::GetValueAsUnsigned(addrExprValue, nAddrStart)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_EXPR_INVALID),
- rAddrExpr.c_str()));
- return MIstatus::failure;
- }
-
- nAddrStart += nAddrOffset;
- const MIuint64 nAddrNumBytes = pArgNumBytes->GetValue();
-
- m_pBufferMemory = new unsigned char[nAddrNumBytes];
- if (m_pBufferMemory == nullptr) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_MEMORY_ALLOC_FAILURE),
- m_cmdData.strMiCmd.c_str(), nAddrNumBytes));
- return MIstatus::failure;
- }
-
- const MIuint64 nReadBytes =
- sbProcess.ReadMemory(static_cast<lldb::addr_t>(nAddrStart),
- (void *)m_pBufferMemory, nAddrNumBytes, error);
- if (nReadBytes != nAddrNumBytes) {
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_LLDB_ERR_NOT_READ_WHOLE_BLK),
- m_cmdData.strMiCmd.c_str(), nAddrNumBytes, nAddrStart));
- return MIstatus::failure;
- }
- if (error.Fail()) {
- lldb::SBStream err;
- const bool bOk = error.GetDescription(err);
- MIunused(bOk);
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_LLDB_ERR_READ_MEM_BYTES),
- m_cmdData.strMiCmd.c_str(), nAddrNumBytes,
- nAddrStart, err.GetData()));
- return MIstatus::failure;
- }
-
- m_nAddrStart = nAddrStart;
- m_nAddrNumBytesToRead = nAddrNumBytes;
-
- 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.
-//--
-bool CMICmdCmdDataReadMemoryBytes::Acknowledge() {
- // MI: memory=[{begin=\"0x%016" PRIx64 "\",offset=\"0x%016" PRIx64"
- // \",end=\"0x%016" PRIx64 "\",contents=\" \" }]"
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format("0x%016" PRIx64, m_nAddrStart));
- const CMICmnMIValueResult miValueResult("begin", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const MIuint64 nAddrOffset = 0;
- const CMICmnMIValueConst miValueConst2(
- CMIUtilString::Format("0x%016" PRIx64, nAddrOffset));
- const CMICmnMIValueResult miValueResult2("offset", miValueConst2);
- miValueTuple.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3(CMIUtilString::Format(
- "0x%016" PRIx64, m_nAddrStart + m_nAddrNumBytesToRead));
- const CMICmnMIValueResult miValueResult3("end", miValueConst3);
- miValueTuple.Add(miValueResult3);
-
- // MI: contents=\" \"
- CMIUtilString strContent;
- strContent.reserve((m_nAddrNumBytesToRead << 1) + 1);
- for (MIuint64 i = 0; i < m_nAddrNumBytesToRead; i++) {
- strContent += CMIUtilString::Format("%02hhx", m_pBufferMemory[i]);
- }
- const CMICmnMIValueConst miValueConst4(strContent);
- const CMICmnMIValueResult miValueResult4("contents", miValueConst4);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult5("memory", miValueList);
-
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult5);
- 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.
-//--
-CMICmdBase *CMICmdCmdDataReadMemoryBytes::CreateSelf() {
- return new CMICmdCmdDataReadMemoryBytes();
-}
-
-
-//++
-// Details: CMICmdCmdDataReadMemory constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataReadMemory::CMICmdCmdDataReadMemory() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-read-memory";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataReadMemory::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataReadMemory destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataReadMemory::~CMICmdCmdDataReadMemory() {}
-
-//++
-// 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 CMICmdCmdDataReadMemory::Execute() {
- // Do nothing - command deprecated use "data-read-memory-bytes" command
- 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.
-//--
-bool CMICmdCmdDataReadMemory::Acknowledge() {
- // Command CMICmdCmdSupportListFeatures sends "data-read-memory-bytes" which
- // causes this command not to be called
- const CMICmnMIValueConst miValueConst(
- MIRSRC(IDS_CMD_ERR_NOT_IMPLEMENTED_DEPRECATED));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdDataReadMemory::CreateSelf() {
- return new CMICmdCmdDataReadMemory();
-}
-
-
-//++
-// Details: CMICmdCmdDataListRegisterNames constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataListRegisterNames::CMICmdCmdDataListRegisterNames()
- : m_constStrArgRegNo("regno"), m_miValueList(true) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-list-register-names";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataListRegisterNames::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataReadMemoryBytes destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataListRegisterNames::~CMICmdCmdDataListRegisterNames() {}
-
-//++
-// 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 CMICmdCmdDataListRegisterNames::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValListOfN(m_constStrArgRegNo, false, false,
- CMICmdArgValListBase::eArgValType_Number));
- return 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.
-//--
-bool CMICmdCmdDataListRegisterNames::Execute() {
- CMICMDBASE_GETOPTION(pArgRegNo, ListOfN, m_constStrArgRegNo);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- const CMICmdArgValListBase::VecArgObjPtr_t &rVecRegNo(
- pArgRegNo->GetExpectedOptions());
- if (!rVecRegNo.empty()) {
- // List of required registers
- CMICmdArgValListBase::VecArgObjPtr_t::const_iterator it = rVecRegNo.begin();
- while (it != rVecRegNo.end()) {
- const CMICmdArgValNumber *pRegNo = static_cast<CMICmdArgValNumber *>(*it);
- const MIuint nRegIndex = pRegNo->GetValue();
- lldb::SBValue regValue = GetRegister(nRegIndex);
- if (regValue.IsValid()) {
- const CMICmnMIValueConst miValueConst(
- CMICmnLLDBUtilSBValue(regValue).GetName());
- m_miValueList.Add(miValueConst);
- }
-
- // Next
- ++it;
- }
- } else {
- // List of all registers
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- lldb::SBFrame frame = thread.GetSelectedFrame();
- lldb::SBValueList registers = frame.GetRegisters();
- const MIuint nRegisters = registers.GetSize();
- for (MIuint i = 0; i < nRegisters; i++) {
- lldb::SBValue value = registers.GetValueAtIndex(i);
- const MIuint nRegChildren = value.GetNumChildren();
- for (MIuint j = 0; j < nRegChildren; j++) {
- lldb::SBValue regValue = value.GetChildAtIndex(j);
- if (regValue.IsValid()) {
- const CMICmnMIValueConst miValueConst(
- CMICmnLLDBUtilSBValue(regValue).GetName());
- m_miValueList.Add(miValueConst);
- }
- }
- }
- }
-
- 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.
-//--
-bool CMICmdCmdDataListRegisterNames::Acknowledge() {
- const CMICmnMIValueResult miValueResult("register-names", m_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.
-//--
-CMICmdBase *CMICmdCmdDataListRegisterNames::CreateSelf() {
- return new CMICmdCmdDataListRegisterNames();
-}
-
-//++
-// Details: Required by the CMICmdFactory when registering *this command. The
-// factory
-// calls this function to create an instance of *this command.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBValue - LLDB SBValue object.
-// Throws: None.
-//--
-lldb::SBValue
-CMICmdCmdDataListRegisterNames::GetRegister(const MIuint vRegisterIndex) const {
- lldb::SBThread thread =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess().GetSelectedThread();
- lldb::SBFrame frame = thread.GetSelectedFrame();
- lldb::SBValueList registers = frame.GetRegisters();
- const MIuint nRegisters = registers.GetSize();
- MIuint nRegisterIndex(vRegisterIndex);
- for (MIuint i = 0; i < nRegisters; i++) {
- lldb::SBValue value = registers.GetValueAtIndex(i);
- const MIuint nRegChildren = value.GetNumChildren();
- if (nRegisterIndex >= nRegChildren) {
- nRegisterIndex -= nRegChildren;
- continue;
- }
-
- lldb::SBValue value2 = value.GetChildAtIndex(nRegisterIndex);
- if (value2.IsValid()) {
- return value2;
- }
- }
-
- return lldb::SBValue();
-}
-
-
-//++
-// Details: CMICmdCmdDataListRegisterValues constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataListRegisterValues::CMICmdCmdDataListRegisterValues()
- : m_constStrArgSkip("skip-unavailable"), m_constStrArgFormat("fmt"),
- m_constStrArgRegNo("regno"), m_miValueList(true) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-list-register-values";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataListRegisterValues::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataListRegisterValues destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataListRegisterValues::~CMICmdCmdDataListRegisterValues() {}
-
-//++
-// 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 CMICmdCmdDataListRegisterValues::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValOptionLong(m_constStrArgThread, false, false,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgSkip, false, false));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFormat, true, true));
- m_setCmdArgs.Add(
- new CMICmdArgValListOfN(m_constStrArgRegNo, false, true,
- CMICmdArgValListBase::eArgValType_Number));
- return 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.
-//--
-bool CMICmdCmdDataListRegisterValues::Execute() {
- CMICMDBASE_GETOPTION(pArgFormat, String, m_constStrArgFormat);
- CMICMDBASE_GETOPTION(pArgRegNo, ListOfN, m_constStrArgRegNo);
-
- const CMIUtilString &rStrFormat(pArgFormat->GetValue());
- if (rStrFormat.length() != 1) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_FORMAT_TYPE),
- m_cmdData.strMiCmd.c_str(),
- rStrFormat.c_str()));
- return MIstatus::failure;
- }
- const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e eFormat =
- CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForChar(rStrFormat[0]);
- if (eFormat == CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Invalid) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_FORMAT_TYPE),
- m_cmdData.strMiCmd.c_str(),
- rStrFormat.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- const CMICmdArgValListBase::VecArgObjPtr_t &rVecRegNo(
- pArgRegNo->GetExpectedOptions());
- if (!rVecRegNo.empty()) {
- // List of required registers
- CMICmdArgValListBase::VecArgObjPtr_t::const_iterator it = rVecRegNo.begin();
- while (it != rVecRegNo.end()) {
- const CMICmdArgValNumber *pRegNo = static_cast<CMICmdArgValNumber *>(*it);
- const MIuint nRegIndex = pRegNo->GetValue();
- lldb::SBValue regValue = GetRegister(nRegIndex);
- if (regValue.IsValid()) {
- AddToOutput(nRegIndex, regValue, eFormat);
- }
-
- // Next
- ++it;
- }
- } else {
- // No register numbers are provided. Output all registers.
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- lldb::SBFrame frame = thread.GetSelectedFrame();
- lldb::SBValueList registers = frame.GetRegisters();
- const MIuint nRegisters = registers.GetSize();
- MIuint nRegIndex = 0;
- for (MIuint i = 0; i < nRegisters; i++) {
- lldb::SBValue value = registers.GetValueAtIndex(i);
- const MIuint nRegChildren = value.GetNumChildren();
- for (MIuint j = 0; j < nRegChildren; j++) {
- lldb::SBValue regValue = value.GetChildAtIndex(j);
- if (regValue.IsValid()) {
- AddToOutput(nRegIndex, regValue, eFormat);
- }
-
- // Next
- ++nRegIndex;
- }
- }
- }
-
- 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.
-//--
-bool CMICmdCmdDataListRegisterValues::Acknowledge() {
- const CMICmnMIValueResult miValueResult("register-values", m_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.
-//--
-CMICmdBase *CMICmdCmdDataListRegisterValues::CreateSelf() {
- return new CMICmdCmdDataListRegisterValues();
-}
-
-//++
-// Details: Required by the CMICmdFactory when registering *this command. The
-// factory
-// calls this function to create an instance of *this command.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBValue - LLDB SBValue object.
-// Throws: None.
-//--
-lldb::SBValue CMICmdCmdDataListRegisterValues::GetRegister(
- const MIuint vRegisterIndex) const {
- lldb::SBThread thread =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess().GetSelectedThread();
- lldb::SBFrame frame = thread.GetSelectedFrame();
- lldb::SBValueList registers = frame.GetRegisters();
- const MIuint nRegisters = registers.GetSize();
- MIuint nRegisterIndex(vRegisterIndex);
- for (MIuint i = 0; i < nRegisters; i++) {
- lldb::SBValue value = registers.GetValueAtIndex(i);
- const MIuint nRegChildren = value.GetNumChildren();
- if (nRegisterIndex >= nRegChildren) {
- nRegisterIndex -= nRegChildren;
- continue;
- }
-
- lldb::SBValue value2 = value.GetChildAtIndex(nRegisterIndex);
- if (value2.IsValid()) {
- return value2;
- }
- }
-
- return lldb::SBValue();
-}
-
-//++
-// Details: Adds the register value to the output list.
-// Type: Method.
-// Args: Value of the register, its index and output format.
-// Return: None
-// Throws: None.
-//--
-void CMICmdCmdDataListRegisterValues::AddToOutput(
- const MIuint vnIndex, const lldb::SBValue &vrValue,
- CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat) {
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%u", vnIndex));
- const CMICmnMIValueResult miValueResult("number", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMIUtilString strRegValue(
- CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(vrValue,
- veVarFormat));
- const CMICmnMIValueConst miValueConst2(strRegValue);
- const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- miValueTuple.Add(miValueResult2);
- m_miValueList.Add(miValueTuple);
-}
-
-
-//++
-// Details: CMICmdCmdDataListRegisterChanged constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataListRegisterChanged::CMICmdCmdDataListRegisterChanged() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-list-changed-registers";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataListRegisterChanged::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataListRegisterChanged destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataListRegisterChanged::~CMICmdCmdDataListRegisterChanged() {}
-
-//++
-// 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 CMICmdCmdDataListRegisterChanged::Execute() {
- // 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.
-//--
-bool CMICmdCmdDataListRegisterChanged::Acknowledge() {
- const CMICmnMIValueConst miValueConst(MIRSRC(IDS_WORD_NOT_IMPLEMENTED));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdDataListRegisterChanged::CreateSelf() {
- return new CMICmdCmdDataListRegisterChanged();
-}
-
-
-//++
-// Details: CMICmdCmdDataWriteMemoryBytes constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataWriteMemoryBytes::CMICmdCmdDataWriteMemoryBytes()
- : m_constStrArgAddr("address"), m_constStrArgContents("contents"),
- m_constStrArgCount("count") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-write-memory-bytes";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataWriteMemoryBytes::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataWriteMemoryBytes destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataWriteMemoryBytes::~CMICmdCmdDataWriteMemoryBytes() {}
-
-//++
-// 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 CMICmdCmdDataWriteMemoryBytes::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgAddr, true, true, false, true));
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgContents, true, true, true, true));
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgCount, false, true, false, true));
- return 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.
-//--
-bool CMICmdCmdDataWriteMemoryBytes::Execute() {
- // Do nothing - not reproduceable (yet) in Eclipse
- // CMICMDBASE_GETOPTION( pArgOffset, OptionShort, m_constStrArgOffset );
- // CMICMDBASE_GETOPTION( pArgAddr, String, m_constStrArgAddr );
- // CMICMDBASE_GETOPTION( pArgNumber, String, m_constStrArgNumber );
- // CMICMDBASE_GETOPTION( pArgContents, String, m_constStrArgContents );
- //
- // Numbers extracts as string types as they could be hex numbers
- // '&' is not recognised and so has to be removed
-
- 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.
-//--
-bool CMICmdCmdDataWriteMemoryBytes::Acknowledge() {
- const CMICmnMIValueConst miValueConst(MIRSRC(IDS_WORD_NOT_IMPLEMENTED));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdDataWriteMemoryBytes::CreateSelf() {
- return new CMICmdCmdDataWriteMemoryBytes();
-}
-
-
-//++
-// Details: CMICmdCmdDataWriteMemory constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataWriteMemory::CMICmdCmdDataWriteMemory()
- : m_constStrArgOffset("o"), m_constStrArgAddr("address"),
- m_constStrArgD("d"), m_constStrArgNumber("a number"),
- m_constStrArgContents("contents"), m_nAddr(0), m_nCount(0),
- m_pBufferMemory(nullptr) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-write-memory";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataWriteMemory::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataWriteMemory destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataWriteMemory::~CMICmdCmdDataWriteMemory() {
- if (m_pBufferMemory != nullptr) {
- delete[] m_pBufferMemory;
- m_pBufferMemory = nullptr;
- }
-}
-
-//++
-// 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 CMICmdCmdDataWriteMemory::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgOffset, false, true,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgAddr, true, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgD, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgContents, true, true));
- return 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.
-//--
-bool CMICmdCmdDataWriteMemory::Execute() {
- CMICMDBASE_GETOPTION(pArgOffset, OptionShort, m_constStrArgOffset);
- CMICMDBASE_GETOPTION(pArgAddr, Number, m_constStrArgAddr);
- CMICMDBASE_GETOPTION(pArgNumber, Number, m_constStrArgNumber);
- CMICMDBASE_GETOPTION(pArgContents, Number, m_constStrArgContents);
-
- MIuint nAddrOffset = 0;
- if (pArgOffset->GetFound() &&
- !pArgOffset->GetExpectedOption<CMICmdArgValNumber, MIuint>(nAddrOffset)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ARGS_ERR_VALIDATION_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgAddr.c_str()));
- return MIstatus::failure;
- }
- m_nAddr = pArgAddr->GetValue();
- m_nCount = pArgNumber->GetValue();
- const MIuint64 nValue = pArgContents->GetValue();
-
- m_pBufferMemory = new unsigned char[m_nCount];
- if (m_pBufferMemory == nullptr) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_MEMORY_ALLOC_FAILURE),
- m_cmdData.strMiCmd.c_str(), m_nCount));
- return MIstatus::failure;
- }
- *m_pBufferMemory = static_cast<char>(nValue);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBError error;
- lldb::addr_t addr = static_cast<lldb::addr_t>(m_nAddr + nAddrOffset);
- const size_t nBytesWritten = sbProcess.WriteMemory(
- addr, (const void *)m_pBufferMemory, (size_t)m_nCount, error);
- if (nBytesWritten != static_cast<size_t>(m_nCount)) {
- SetError(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_LLDB_ERR_NOT_WRITE_WHOLEBLK),
- m_cmdData.strMiCmd.c_str(), m_nCount, addr));
- return MIstatus::failure;
- }
- if (error.Fail()) {
- lldb::SBStream err;
- const bool bOk = error.GetDescription(err);
- MIunused(bOk);
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_LLDB_ERR_WRITE_MEM_BYTES),
- m_cmdData.strMiCmd.c_str(), m_nCount, addr,
- err.GetData()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdDataWriteMemory::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdDataWriteMemory::CreateSelf() {
- return new CMICmdCmdDataWriteMemory();
-}
-
-
-//++
-// Details: CMICmdCmdDataInfoLine constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataInfoLine::CMICmdCmdDataInfoLine()
- : m_constStrArgLocation("location"),
- m_resultRecord(m_cmdData.strMiCmdToken,
- CMICmnMIResultRecord::eResultClass_Done) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "data-info-line";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdDataInfoLine::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdDataInfoLine destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdDataInfoLine::~CMICmdCmdDataInfoLine() = default;
-
-//++
-// 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 CMICmdCmdDataInfoLine::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgLocation, true, true));
- return 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.
-//--
-bool CMICmdCmdDataInfoLine::Execute() {
- CMICMDBASE_GETOPTION(pArgLocation, String, m_constStrArgLocation);
-
- lldb::SBLineEntry line;
- bool found_line = false;
- const CMIUtilString &strLocation(pArgLocation->GetValue());
- lldb::SBTarget target = CMICmnLLDBDebugSessionInfo::Instance().GetTarget();
-
- if (strLocation.at(0) == '*') {
- // Parse argument:
- // *0x12345
- // ^^^^^^^^^ -- address
- lldb::addr_t address = 0x0;
- if (llvm::StringRef(strLocation.substr(1)).getAsInteger(0, address)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_SOME_ERROR),
- m_cmdData.strMiCmd.c_str(),
- "Failed to parse address."));
- return MIstatus::failure;
- }
- line = target.ResolveFileAddress(address).GetLineEntry();
- // Check that found line is valid.
- if (line.GetLine())
- found_line = true;
- } else {
- const size_t nLineStartPos = strLocation.rfind(':');
- if ((nLineStartPos == std::string::npos) || (nLineStartPos == 0) ||
- (nLineStartPos == strLocation.length() - 1)) {
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_INVALID_LOCATION_FORMAT),
- m_cmdData.strMiCmd.c_str(), strLocation.c_str()));
- return MIstatus::failure;
- }
- // Parse argument:
- // hello.cpp:5
- // ^^^^^^^^^ -- file
- // ^ -- line
- const CMIUtilString &strFile(strLocation.substr(0, nLineStartPos));
- uint32_t numLine = 0;
- llvm::StringRef(strLocation.substr(nLineStartPos + 1))
- .getAsInteger(0, numLine);
- lldb::SBSymbolContextList sc_cu_list =
- target.FindCompileUnits(lldb::SBFileSpec(strFile.c_str(), false));
- for (uint32_t i = 0, e = sc_cu_list.GetSize(); i < e; ++i) {
- const lldb::SBCompileUnit &cu =
- sc_cu_list.GetContextAtIndex(i).GetCompileUnit();
- // Break if we have already found requested line.
- if (found_line)
- break;
- for (uint32_t j = 0, e = cu.GetNumLineEntries(); j < e; ++j) {
- const lldb::SBLineEntry &curLine = cu.GetLineEntryAtIndex(j);
- if (curLine.GetLine() == numLine) {
- line = curLine;
- found_line = true;
- break;
- }
- }
- }
- }
- if (!found_line) {
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_SOME_ERROR), m_cmdData.strMiCmd.c_str(),
- "The LineEntry is absent or has an unknown format."));
- return MIstatus::failure;
- }
- // Start address.
- m_resultRecord.Add(CMICmnMIValueResult(
- "start", CMICmnMIValueConst(IntToHexAddrStr(
- line.GetStartAddress().GetFileAddress()))));
- // End address.
- m_resultRecord.Add(CMICmnMIValueResult(
- "end", CMICmnMIValueConst(IntToHexAddrStr(
- line.GetEndAddress().GetFileAddress()))));
- // File.
- std::unique_ptr<char[]> upPath(new char[PATH_MAX]);
- line.GetFileSpec().GetPath(upPath.get(), PATH_MAX);
- m_resultRecord.Add(CMICmnMIValueResult(
- "file", CMICmnMIValueConst(CMIUtilString(upPath.get()))));
- // Line.
- m_resultRecord.Add(CMICmnMIValueResult(
- "line", CMICmnMIValueConst(std::to_string(line.GetLine()))));
- 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.
-//--
-bool CMICmdCmdDataInfoLine::Acknowledge() {
- m_miResultRecord = m_resultRecord;
- 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.
-//--
-CMICmdBase *CMICmdCmdDataInfoLine::CreateSelf() {
- return new CMICmdCmdDataInfoLine();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdData.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdData.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdData.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdData.h (removed)
@@ -1,381 +0,0 @@
-//===-- MICmdCmdData.h ------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdDataEvaluateExpression interface.
-// CMICmdCmdDataDisassemble interface.
-// CMICmdCmdDataReadMemoryBytes interface.
-// CMICmdCmdDataReadMemory interface.
-// CMICmdCmdDataListRegisterNames interface.
-// CMICmdCmdDataListRegisterValues interface.
-// CMICmdCmdDataListRegisterChanged interface.
-// CMICmdCmdDataWriteMemoryBytes interface.
-// CMICmdCmdDataWriteMemory interface.
-// CMICmdCmdDataInfoLine interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-//
-
-#pragma once
-
-// Third party headers:
-#include "lldb/API/SBError.h"
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnLLDBDebugSessionInfoVarObj.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-#include "MICmnMIResultRecord.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-evaluate-expression".
-//--
-class CMICmdCmdDataEvaluateExpression : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataEvaluateExpression();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataEvaluateExpression() override;
-
- // Methods:
-private:
- bool HaveInvalidCharacterInExpression(const CMIUtilString &vrExpr,
- char &vrwInvalidChar);
-
- // Attributes:
-private:
- bool m_bExpressionValid; // True = yes is valid, false = not valid
- bool m_bEvaluatedExpression; // True = yes is expression evaluated, false =
- // failed
- lldb::SBError m_Error; // Status object, which is examined when
- // m_bEvaluatedExpression is false
- CMIUtilString m_strValue;
- CMICmnMIValueTuple m_miValueTuple;
- bool m_bFoundInvalidChar; // True = yes found unexpected character in the
- // expression, false = all ok
- char m_cExpressionInvalidChar;
- const CMIUtilString m_constStrArgExpr;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-disassemble".
-//--
-class CMICmdCmdDataDisassemble : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataDisassemble();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataDisassemble() override;
-
- // Attributes:
-private:
- const CMIUtilString
- m_constStrArgAddrStart; // MI spec non mandatory, *this command mandatory
- const CMIUtilString
- m_constStrArgAddrEnd; // MI spec non mandatory, *this command mandatory
- const CMIUtilString m_constStrArgMode;
- CMICmnMIValueList m_miValueList;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-read-memory-bytes".
-//--
-class CMICmdCmdDataReadMemoryBytes : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataReadMemoryBytes();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataReadMemoryBytes() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgByteOffset;
- const CMIUtilString m_constStrArgAddrExpr;
- const CMIUtilString m_constStrArgNumBytes;
- unsigned char *m_pBufferMemory;
- MIuint64 m_nAddrStart;
- MIuint64 m_nAddrNumBytesToRead;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-read-memory".
-//--
-class CMICmdCmdDataReadMemory : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataReadMemory();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataReadMemory() override;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-list-register-names".
-//--
-class CMICmdCmdDataListRegisterNames : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataListRegisterNames();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataListRegisterNames() override;
-
- // Methods:
-private:
- lldb::SBValue GetRegister(const MIuint vRegisterIndex) const;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgRegNo; // Not handled by *this command
- CMICmnMIValueList m_miValueList;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-list-register-values".
-//--
-class CMICmdCmdDataListRegisterValues : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataListRegisterValues();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataListRegisterValues() override;
-
- // Methods:
-private:
- lldb::SBValue GetRegister(const MIuint vRegisterIndex) const;
- void AddToOutput(const MIuint vnIndex, const lldb::SBValue &vrValue,
- CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat);
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgSkip; // Not handled by *this command
- const CMIUtilString m_constStrArgFormat;
- const CMIUtilString m_constStrArgRegNo;
- CMICmnMIValueList m_miValueList;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-list-changed-registers".
-//--
-class CMICmdCmdDataListRegisterChanged : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataListRegisterChanged();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataListRegisterChanged() override;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-read-memory-bytes".
-//--
-class CMICmdCmdDataWriteMemoryBytes : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataWriteMemoryBytes();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataWriteMemoryBytes() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgAddr;
- const CMIUtilString m_constStrArgContents;
- const CMIUtilString m_constStrArgCount;
- CMIUtilString m_strContents;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-read-memory".
-// Not specified in MI spec but Eclipse gives *this command.
-//--
-class CMICmdCmdDataWriteMemory : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataWriteMemory();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataWriteMemory() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgOffset; // Not specified in MI spec but
- // Eclipse gives this option.
- const CMIUtilString m_constStrArgAddr; // Not specified in MI spec but Eclipse
- // gives this option.
- const CMIUtilString
- m_constStrArgD; // Not specified in MI spec but Eclipse gives this option.
- const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but
- // Eclipse gives this option.
- const CMIUtilString m_constStrArgContents; // Not specified in MI spec but
- // Eclipse gives this option.
- MIuint64 m_nAddr;
- CMIUtilString m_strContents;
- MIuint64 m_nCount;
- unsigned char *m_pBufferMemory;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "data-info-line".
-// See MIExtensions.txt for details.
-//--
-class CMICmdCmdDataInfoLine : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdDataInfoLine();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdDataInfoLine() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgLocation;
- CMICmnMIResultRecord m_resultRecord;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.cpp (removed)
@@ -1,145 +0,0 @@
-//===-- MICmdCmdEnviro.cpp --------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdEnvironmentCd implementation.
-
-// In-house headers:
-#include "MICmdCmdEnviro.h"
-#include "MICmdArgValFile.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-//++
-// Details: CMICmdCmdEnvironmentCd constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdEnvironmentCd::CMICmdCmdEnvironmentCd()
- : m_constStrArgNamePathDir("pathdir") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "environment-cd";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdEnvironmentCd::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdEnvironmentCd destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdEnvironmentCd::~CMICmdCmdEnvironmentCd() {}
-
-//++
-// 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 CMICmdCmdEnvironmentCd::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValFile(m_constStrArgNamePathDir, true, true));
- CMICmdArgContext argCntxt(m_cmdData.strMiCmdOption);
- return 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.
-//--
-bool CMICmdCmdEnvironmentCd::Execute() {
- CMICMDBASE_GETOPTION(pArgPathDir, File, m_constStrArgNamePathDir);
- const CMIUtilString &strWkDir(pArgPathDir->GetValue());
- CMICmnLLDBDebugger &rDbg(CMICmnLLDBDebugger::Instance());
- lldb::SBDebugger &rLldbDbg = rDbg.GetTheDebugger();
- bool bOk = rLldbDbg.SetCurrentPlatformSDKRoot(strWkDir.c_str());
- if (bOk) {
- const CMIUtilString &rStrKeyWkDir(
- m_rLLDBDebugSessionInfo.m_constStrSharedDataKeyWkDir);
- if (!m_rLLDBDebugSessionInfo.SharedDataAdd<CMIUtilString>(rStrKeyWkDir,
- strWkDir)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_DBGSESSION_ERR_SHARED_DATA_ADD),
- m_cmdData.strMiCmd.c_str(),
- rStrKeyWkDir.c_str()));
- bOk = MIstatus::failure;
- }
- } else
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED),
- m_cmdData.strMiCmd.c_str(),
- "SetCurrentPlatformSDKRoot()"));
-
- lldb::SBTarget sbTarget = m_rLLDBDebugSessionInfo.GetTarget();
- if (sbTarget.IsValid()) {
- lldb::SBLaunchInfo sbLaunchInfo = sbTarget.GetLaunchInfo();
- sbLaunchInfo.SetWorkingDirectory(strWkDir.c_str());
- sbTarget.SetLaunchInfo(sbLaunchInfo);
- }
-
- return bOk;
-}
-
-//++
-// 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 CMICmdCmdEnvironmentCd::Acknowledge() {
- const CMIUtilString &rStrKeyWkDir(
- m_rLLDBDebugSessionInfo.m_constStrSharedDataKeyWkDir);
- CMIUtilString strWkDir;
- const bool bOk = m_rLLDBDebugSessionInfo.SharedDataRetrieve<CMIUtilString>(
- rStrKeyWkDir, strWkDir);
- if (bOk) {
- const CMICmnMIValueConst miValueConst(strWkDir);
- const CMICmnMIValueResult miValueResult("path", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_SHARED_DATA_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- rStrKeyWkDir.c_str()));
- return MIstatus::failure;
-}
-
-//++
-// 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 *CMICmdCmdEnvironmentCd::CreateSelf() {
- return new CMICmdCmdEnvironmentCd();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdEnviro.h (removed)
@@ -1,57 +0,0 @@
-//===-- MICmdCmdEnviro.h ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdEnvironmentCd interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "environment-cd".
-//--
-class CMICmdCmdEnvironmentCd : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdEnvironmentCd();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdEnvironmentCd() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamePathDir;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdExec.cpp (removed)
@@ -1,1115 +0,0 @@
-//===-- MICmdCmdExec.cpp ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdExecRun implementation.
-// CMICmdCmdExecContinue implementation.
-// CMICmdCmdExecNext implementation.
-// CMICmdCmdExecStep implementation.
-// CMICmdCmdExecNextInstruction implementation.
-// CMICmdCmdExecStepInstruction implementation.
-// CMICmdCmdExecFinish implementation.
-// CMICmdCmdExecInterrupt implementation.
-// CMICmdCmdExecArguments implementation.
-// CMICmdCmdExecAbort implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBCommandInterpreter.h"
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBThread.h"
-#include "lldb/lldb-enumerations.h"
-
-// In-house headers:
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-#include "MICmdCmdExec.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnStreamStdout.h"
-#include "MIDriver.h"
-
-//++
-// Details: CMICmdCmdExecRun constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecRun::CMICmdCmdExecRun() : m_constStrArgStart("start") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-run";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecRun::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecRun destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecRun::~CMICmdCmdExecRun() {}
-
-//++
-// Details: The invoker requires this function. It 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 CMICmdCmdExecRun::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValOptionLong(
- m_constStrArgStart, false, true,
- CMICmdArgValListBase::eArgValType_OptionLong, 0));
- return 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.
-//--
-bool CMICmdCmdExecRun::Execute() {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- {
- // Check we have a valid target.
- // Note: target created via 'file-exec-and-symbols' command.
- lldb::SBTarget sbTarget = rSessionInfo.GetTarget();
- if (!sbTarget.IsValid() ||
- sbTarget == rSessionInfo.GetDebugger().GetDummyTarget()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
- }
-
- lldb::SBError error;
- lldb::SBStream errMsg;
- lldb::SBLaunchInfo launchInfo = rSessionInfo.GetTarget().GetLaunchInfo();
- launchInfo.SetListener(rSessionInfo.GetListener());
-
- // Run to first instruction or main() requested?
- CMICMDBASE_GETOPTION(pArgStart, OptionLong, m_constStrArgStart);
- if (pArgStart->GetFound()) {
- launchInfo.SetLaunchFlags(launchInfo.GetLaunchFlags() |
- lldb::eLaunchFlagStopAtEntry);
- }
-
- lldb::SBProcess process = rSessionInfo.GetTarget().Launch(launchInfo, error);
- if (!process.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
- m_cmdData.strMiCmd.c_str(),
- errMsg.GetData()));
- return MIstatus::failure;
- }
-
- const auto successHandler = [this] {
- if (!CMIDriver::Instance().SetDriverStateRunningDebugging()) {
- const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription());
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_SET_NEW_DRIVER_STATE),
- m_cmdData.strMiCmd.c_str(), rErrMsg.c_str()));
- return MIstatus::failure;
- }
- return MIstatus::success;
- };
-
- return HandleSBErrorWithSuccess(error, successHandler);
-}
-
-//++
-// Details: The invoker requires this function. The command prepares a MI Record
-// Result
-// for the work carried out in the Execute().
-// Called only if Execute() set status as successful on completion.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdExecRun::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- // Give the client '=thread-group-started,id="i1" pid="xyz"'
- m_bHasResultRecordExtra = true;
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("id", miValueConst2);
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst(strPid);
- const CMICmnMIValueResult miValueResult("pid", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2);
- miOutOfBand.Add(miValueResult);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecRun::CreateSelf() { return new CMICmdCmdExecRun(); }
-
-
-//++
-// Details: CMICmdCmdExecContinue constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecContinue::CMICmdCmdExecContinue() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-continue";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecContinue::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecContinue destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecContinue::~CMICmdCmdExecContinue() {}
-
-//++
-// 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 CMICmdCmdExecContinue::Execute() {
- const auto successHandler = [this] {
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
- if (!CMIDriver::Instance().SetDriverStateRunningDebugging()) {
- const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription());
- SetError(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_SET_NEW_DRIVER_STATE),
- m_cmdData.strMiCmd.c_str(), rErrMsg.c_str()));
- return MIstatus::failure;
- }
- return MIstatus::success;
- };
-
- return HandleSBErrorWithSuccess(
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess().Continue(),
- successHandler);
-}
-
-//++
-// 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 CMICmdCmdExecContinue::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecContinue::CreateSelf() {
- return new CMICmdCmdExecContinue();
-}
-
-
-//++
-// Details: CMICmdCmdExecNext constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecNext::CMICmdCmdExecNext() : m_constStrArgNumber("number") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-next";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecNext::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecNext destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecNext::~CMICmdCmdExecNext() {}
-
-//++
-// 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 CMICmdCmdExecNext::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
- return 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.
-//--
-bool CMICmdCmdExecNext::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- lldb::SBError error;
- if (nThreadId != UINT64_MAX) {
- lldb::SBThread sbThread = rSessionInfo.GetProcess().GetThreadByIndexID(nThreadId);
- if (!sbThread.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- sbThread.StepOver(lldb::eOnlyDuringStepping, error);
- } else
- rSessionInfo.GetProcess().GetSelectedThread().StepOver(
- lldb::eOnlyDuringStepping, error);
-
- return HandleSBError(error);
-}
-
-//++
-// 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 CMICmdCmdExecNext::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecNext::CreateSelf() { return new CMICmdCmdExecNext(); }
-
-
-//++
-// Details: CMICmdCmdExecStep constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecStep::CMICmdCmdExecStep() : m_constStrArgNumber("number") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-step";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecStep::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecStep destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecStep::~CMICmdCmdExecStep() {}
-
-//++
-// 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 CMICmdCmdExecStep::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
- return 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.
-//--
-bool CMICmdCmdExecStep::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- lldb::SBError error;
- if (nThreadId != UINT64_MAX) {
- lldb::SBThread sbThread =
- rSessionInfo.GetProcess().GetThreadByIndexID(nThreadId);
- if (!sbThread.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- sbThread.StepInto(nullptr, LLDB_INVALID_LINE_NUMBER, error);
- } else
- rSessionInfo.GetProcess().GetSelectedThread().StepInto(
- nullptr, LLDB_INVALID_LINE_NUMBER, error);
-
- return HandleSBError(error);
-}
-
-//++
-// 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 CMICmdCmdExecStep::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecStep::CreateSelf() { return new CMICmdCmdExecStep(); }
-
-
-//++
-// Details: CMICmdCmdExecNextInstruction constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecNextInstruction::CMICmdCmdExecNextInstruction()
- : m_constStrArgNumber("number") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-next-instruction";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecNextInstruction::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecNextInstruction destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecNextInstruction::~CMICmdCmdExecNextInstruction() {}
-
-//++
-// 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 CMICmdCmdExecNextInstruction::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
- return 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.
-//--
-bool CMICmdCmdExecNextInstruction::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- lldb::SBError error;
- if (nThreadId != UINT64_MAX) {
- lldb::SBThread sbThread =
- rSessionInfo.GetProcess().GetThreadByIndexID(nThreadId);
- if (!sbThread.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- sbThread.StepInstruction(true, error);
- } else
- rSessionInfo.GetProcess().GetSelectedThread().StepInstruction(
- true, error);
-
- return HandleSBError(error);
-}
-
-//++
-// 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 CMICmdCmdExecNextInstruction::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecNextInstruction::CreateSelf() {
- return new CMICmdCmdExecNextInstruction();
-}
-
-
-//++
-// Details: CMICmdCmdExecStepInstruction constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecStepInstruction::CMICmdCmdExecStepInstruction()
- : m_constStrArgNumber("number") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-step-instruction";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecStepInstruction::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecStepInstruction destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecStepInstruction::~CMICmdCmdExecStepInstruction() {}
-
-//++
-// 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 CMICmdCmdExecStepInstruction::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
- return 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.
-//--
-bool CMICmdCmdExecStepInstruction::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- lldb::SBError error;
- if (nThreadId != UINT64_MAX) {
- lldb::SBThread sbThread =
- rSessionInfo.GetProcess().GetThreadByIndexID(nThreadId);
- if (!sbThread.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- sbThread.StepInstruction(false, error);
- } else
- rSessionInfo.GetProcess().GetSelectedThread().StepInstruction(
- false, error);
-
- return HandleSBError(error);
-}
-
-//++
-// 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 CMICmdCmdExecStepInstruction::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecStepInstruction::CreateSelf() {
- return new CMICmdCmdExecStepInstruction();
-}
-
-
-//++
-// Details: CMICmdCmdExecFinish constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecFinish::CMICmdCmdExecFinish() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-finish";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecFinish::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecFinish destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecFinish::~CMICmdCmdExecFinish() {}
-
-//++
-// 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 CMICmdCmdExecFinish::ParseArgs() { return 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.
-//--
-bool CMICmdCmdExecFinish::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- lldb::SBError error;
- if (nThreadId != UINT64_MAX) {
- lldb::SBThread sbThread =
- rSessionInfo.GetProcess().GetThreadByIndexID(nThreadId);
- if (!sbThread.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_INVALID),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- sbThread.StepOut(error);
- } else
- rSessionInfo.GetProcess().GetSelectedThread().StepOut(error);
-
- return HandleSBError(error);
-}
-
-//++
-// 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 CMICmdCmdExecFinish::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Running);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecFinish::CreateSelf() {
- return new CMICmdCmdExecFinish();
-}
-
-
-//++
-// Details: CMICmdCmdExecInterrupt constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecInterrupt::CMICmdCmdExecInterrupt() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-interrupt";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecInterrupt::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecInterrupt destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecInterrupt::~CMICmdCmdExecInterrupt() {}
-
-//++
-// 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 CMICmdCmdExecInterrupt::Execute() {
- const auto successHandler = [this] {
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
- if (!CMIDriver::Instance().SetDriverStateRunningNotDebugging()) {
- const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription());
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_SET_NEW_DRIVER_STATE),
- m_cmdData.strMiCmd.c_str(),
- rErrMsg.c_str()));
- return MIstatus::failure;
- }
- return MIstatus::success;
- };
-
- return HandleSBErrorWithSuccess(
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess().Stop(),
- successHandler);
-}
-
-//++
-// 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 CMICmdCmdExecInterrupt::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecInterrupt::CreateSelf() {
- return new CMICmdCmdExecInterrupt();
-}
-
-
-//++
-// Details: CMICmdCmdExecArguments constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecArguments::CMICmdCmdExecArguments()
- : m_constStrArgArguments("arguments") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-arguments";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecArguments::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecArguments destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecArguments::~CMICmdCmdExecArguments() {}
-
-//++
-// 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdExecArguments::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValListOfN(
- m_constStrArgArguments, false, true,
- CMICmdArgValListBase::eArgValType_StringAnything));
- return 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdExecArguments::Execute() {
- CMICMDBASE_GETOPTION(pArgArguments, ListOfN, m_constStrArgArguments);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBTarget sbTarget = rSessionInfo.GetTarget();
- if (!sbTarget.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBLaunchInfo sbLaunchInfo = sbTarget.GetLaunchInfo();
- sbLaunchInfo.SetArguments(nullptr, false);
-
- CMIUtilString strArg;
- size_t nArgIndex = 0;
- while (pArgArguments->GetExpectedOption<CMICmdArgValString, CMIUtilString>(
- strArg, nArgIndex)) {
- const char *argv[2] = {strArg.c_str(), nullptr};
- sbLaunchInfo.SetArguments(argv, true);
- ++nArgIndex;
- }
-
- sbTarget.SetLaunchInfo(sbLaunchInfo);
-
- 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdExecArguments::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecArguments::CreateSelf() {
- return new CMICmdCmdExecArguments();
-}
-
-
-//++
-// Details: CMICmdCmdExecAbort constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecAbort::CMICmdCmdExecAbort() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "exec-abort";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdExecAbort::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdExecAbort destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdExecAbort::~CMICmdCmdExecAbort() {}
-
-//++
-// 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdExecAbort::Execute() {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBError sbError = sbProcess.Destroy();
- if (sbError.Fail()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_LLDBPROCESS_DESTROY),
- m_cmdData.strMiCmd.c_str(),
- sbError.GetCString()));
- return MIstatus::failure;
- }
-
- 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdExecAbort::Acknowledge() {
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- 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.
-//--
-CMICmdBase *CMICmdCmdExecAbort::CreateSelf() {
- return new CMICmdCmdExecAbort();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdExec.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdExec.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdExec.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdExec.h (removed)
@@ -1,316 +0,0 @@
-//===-- MICmdCmdExec.h ------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdExecRun interface.
-// CMICmdCmdExecContinue interface.
-// CMICmdCmdExecNext interface.
-// CMICmdCmdExecStep interface.
-// CMICmdCmdExecNextInstruction interface.
-// CMICmdCmdExecStepInstruction interface.
-// CMICmdCmdExecFinish interface.
-// CMICmdCmdExecInterrupt interface.
-// CMICmdCmdExecArguments interface.
-// CMICmdCmdExecAbort interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// Third party headers:
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-run".
-//--
-class CMICmdCmdExecRun : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecRun();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecRun() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgStart; // StopAtEntry - run to first
- // instruction or main() if specified
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-continue".
-//--
-class CMICmdCmdExecContinue : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecContinue();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecContinue() override;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-next".
-//--
-class CMICmdCmdExecNext : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecNext();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecNext() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but
- // Eclipse gives this option
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-step".
-//--
-class CMICmdCmdExecStep : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecStep();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecStep() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but
- // Eclipse gives this option
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-next-instruction".
-//--
-class CMICmdCmdExecNextInstruction : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecNextInstruction();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecNextInstruction() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but
- // Eclipse gives this option
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-step-instruction".
-//--
-class CMICmdCmdExecStepInstruction : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecStepInstruction();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecStepInstruction() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but
- // Eclipse gives this option
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-finish".
-//--
-class CMICmdCmdExecFinish : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecFinish();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecFinish() override;
-};
-
-// CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-interrupt".
-// Gotchas: Using Eclipse this command is injected into the command system when
-// a
-// SIGINT signal is received while running an inferior program.
-//--
-class CMICmdCmdExecInterrupt : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecInterrupt();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecInterrupt() override;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-arguments".
-//--
-class CMICmdCmdExecArguments : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecArguments();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecArguments() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgArguments;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "exec-abort".
-//--
-class CMICmdCmdExecAbort : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdExecAbort();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdExecAbort() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdFile.cpp (removed)
@@ -1,206 +0,0 @@
-//===-- MICmdCmdFile.cpp ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdFileExecAndSymbols implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBStream.h"
-
-// In-house headers:
-#include "MICmdArgValFile.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdCmdFile.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIResultRecord.h"
-#include "MIUtilFileStd.h"
-
-//++
-// Details: CMICmdCmdFileExecAndSymbols constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdFileExecAndSymbols::CMICmdCmdFileExecAndSymbols()
- : m_constStrArgNameFile("file"), m_constStrArgNamedPlatformName("p"),
- m_constStrArgNamedRemotePath("r") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "file-exec-and-symbols";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdFileExecAndSymbols::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdFileExecAndSymbols destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdFileExecAndSymbols::~CMICmdCmdFileExecAndSymbols() {}
-
-//++
-// 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 CMICmdCmdFileExecAndSymbols::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValFile(m_constStrArgNameFile, true, true));
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgNamedPlatformName, false, true,
- CMICmdArgValListBase::eArgValType_String, 1));
- m_setCmdArgs.Add(new CMICmdArgValOptionShort(
- m_constStrArgNamedRemotePath, false, true,
- CMICmdArgValListBase::eArgValType_StringQuotedNumberPath, 1));
- return 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.
-// Synopsis: -file-exec-and-symbols file
-// Ref:
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-File-Commands.html#GDB_002fMI-File-Commands
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdFileExecAndSymbols::Execute() {
- CMICMDBASE_GETOPTION(pArgNamedFile, File, m_constStrArgNameFile);
- CMICMDBASE_GETOPTION(pArgPlatformName, OptionShort,
- m_constStrArgNamedPlatformName);
- CMICMDBASE_GETOPTION(pArgRemotePath, OptionShort,
- m_constStrArgNamedRemotePath);
- CMICmdArgValFile *pArgFile = static_cast<CMICmdArgValFile *>(pArgNamedFile);
- const CMIUtilString &strExeFilePath(pArgFile->GetValue());
- bool bPlatformName = pArgPlatformName->GetFound();
- CMIUtilString platformName;
- if (bPlatformName) {
- pArgPlatformName->GetExpectedOption<CMICmdArgValString, CMIUtilString>(
- platformName);
- }
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBDebugger &rDbgr = rSessionInfo.GetDebugger();
- lldb::SBError error;
- const char *pTargetTriple = nullptr; // Let LLDB discover the triple required
- const char *pTargetPlatformName = platformName.c_str();
- const bool bAddDepModules = false;
- lldb::SBTarget target =
- rDbgr.CreateTarget(strExeFilePath.c_str(), pTargetTriple,
- pTargetPlatformName, bAddDepModules, error);
- CMIUtilString strWkDir;
- const CMIUtilString &rStrKeyWkDir(rSessionInfo.m_constStrSharedDataKeyWkDir);
- if (!rSessionInfo.SharedDataRetrieve<CMIUtilString>(rStrKeyWkDir, strWkDir)) {
- strWkDir = CMIUtilFileStd::StripOffFileName(strExeFilePath);
- if (!rSessionInfo.SharedDataAdd<CMIUtilString>(rStrKeyWkDir, strWkDir)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_DBGSESSION_ERR_SHARED_DATA_ADD),
- m_cmdData.strMiCmd.c_str(),
- rStrKeyWkDir.c_str()));
- return MIstatus::failure;
- }
- }
- if (!rDbgr.SetCurrentPlatformSDKRoot(strWkDir.c_str())) {
-
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED),
- m_cmdData.strMiCmd.c_str(),
- "SetCurrentPlatformSDKRoot()"));
- return MIstatus::failure;
- }
- if (pArgRemotePath->GetFound()) {
- CMIUtilString remotePath;
- pArgRemotePath->GetExpectedOption<CMICmdArgValString, CMIUtilString>(
- remotePath);
- lldb::SBModule module = target.FindModule(target.GetExecutable());
- if (module.IsValid()) {
- module.SetPlatformFileSpec(lldb::SBFileSpec(remotePath.c_str()));
- }
- }
- lldb::SBStream err;
- if (error.Fail()) {
- const bool bOk = error.GetDescription(err);
- MIunused(bOk);
- }
- if (!target.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET),
- m_cmdData.strMiCmd.c_str(),
- strExeFilePath.c_str(), err.GetData()));
- return MIstatus::failure;
- }
- if (error.Fail()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_CREATE_TARGET),
- m_cmdData.strMiCmd.c_str(), err.GetData()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdFileExecAndSymbols::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdFileExecAndSymbols::CreateSelf() {
- return new CMICmdCmdFileExecAndSymbols();
-}
-
-//++
-// Details: If the MI Driver is not operating via a client i.e. Eclipse but say
-// operating
-// on a executable passed in as a argument to the drive then what
-// should the driver
-// do on a command failing? Either continue operating or exit the
-// application.
-// Override this function where a command failure cannot allow the
-// driver to
-// continue operating.
-// Type: Overridden.
-// Args: None.
-// Return: bool - True = Fatal if command fails, false = can continue if
-// command fails.
-// Throws: None.
-//--
-bool CMICmdCmdFileExecAndSymbols::GetExitAppOnCommandFailure() const {
- return true;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdFile.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdFile.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdFile.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdFile.h (removed)
@@ -1,66 +0,0 @@
-//===-- MICmdCmdFile.h ------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdFileExecAndSymbols interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "file-exec-and-symbols".
-// This command does not follow the MI documentation exactly.
-// Gotchas: This command has additional flags that were not available in GDB MI.
-// See MIextensions.txt for details.
-//--
-class CMICmdCmdFileExecAndSymbols : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdFileExecAndSymbols();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdFileExecAndSymbols() override;
- bool GetExitAppOnCommandFailure() const override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNameFile;
- const CMIUtilString
- m_constStrArgNamedPlatformName; // Added to support iOS platform selection
- const CMIUtilString m_constStrArgNamedRemotePath; // Added to support iOS
- // device remote file
- // location
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.cpp (removed)
@@ -1,225 +0,0 @@
-//===-- MICmdCmdGdbInfo.cpp -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbInfo implementation.
-
-// Third party headers:
-#include "lldb/API/SBCommandReturnObject.h"
-#include <inttypes.h>
-
-// In-house headers:
-#include "MICmdArgValString.h"
-#include "MICmdCmdGdbInfo.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnStreamStdout.h"
-
-// Instantiations:
-const CMICmdCmdGdbInfo::MapPrintFnNameToPrintFn_t
- CMICmdCmdGdbInfo::ms_mapPrintFnNameToPrintFn = {
- {"sharedlibrary", &CMICmdCmdGdbInfo::PrintFnSharedLibrary}};
-
-//++
-// Details: CMICmdCmdGdbInfo constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbInfo::CMICmdCmdGdbInfo()
- : m_constStrArgNamedPrint("print"), m_bPrintFnRecognised(true),
- m_bPrintFnSuccessful(false),
- m_strPrintFnError(MIRSRC(IDS_WORD_ERR_MSG_NOT_IMPLEMENTED_BRKTS)) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "info";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdGdbInfo::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdGdbInfo destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbInfo::~CMICmdCmdGdbInfo() {}
-
-//++
-// 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 CMICmdCmdGdbInfo::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedPrint, true, true));
- return 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.
-//--
-bool CMICmdCmdGdbInfo::Execute() {
- CMICMDBASE_GETOPTION(pArgPrint, String, m_constStrArgNamedPrint);
- const CMIUtilString &rPrintRequest(pArgPrint->GetValue());
-
- FnPrintPtr pPrintRequestFn = nullptr;
- if (!GetPrintFn(rPrintRequest, pPrintRequestFn)) {
- m_strPrintFnName = rPrintRequest;
- m_bPrintFnRecognised = false;
- return MIstatus::success;
- }
-
- m_bPrintFnSuccessful = (this->*(pPrintRequestFn))();
-
- 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.
-//--
-bool CMICmdCmdGdbInfo::Acknowledge() {
- if (!m_bPrintFnRecognised) {
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_NOT_FOUND), m_strPrintFnName.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- if (m_bPrintFnSuccessful) {
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_FAILED), m_strPrintFnError.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdGdbInfo::CreateSelf() { return new CMICmdCmdGdbInfo(); }
-
-//++
-// Details: Retrieve the print function's pointer for the matching print
-// request.
-// Type: Method.
-// Args: vrPrintFnName - (R) The info requested.
-// vrwpFn - (W) The print function's pointer of the function
-// to carry out
-// Return: bool - True = Print request is implemented, false = not found.
-// Throws: None.
-//--
-bool CMICmdCmdGdbInfo::GetPrintFn(const CMIUtilString &vrPrintFnName,
- FnPrintPtr &vrwpFn) const {
- vrwpFn = nullptr;
-
- const MapPrintFnNameToPrintFn_t::const_iterator it =
- ms_mapPrintFnNameToPrintFn.find(vrPrintFnName);
- if (it != ms_mapPrintFnNameToPrintFn.end()) {
- vrwpFn = (*it).second;
- return true;
- }
-
- return false;
-}
-
-//++
-// Details: Carry out work to complete the request to prepare and send back
-// information
-// asked for.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbInfo::PrintFnSharedLibrary() {
- bool bOk = CMICmnStreamStdout::TextToStdout(
- "~\"From To Syms Read Shared Object Library\"");
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBTarget sbTarget = rSessionInfo.GetTarget();
- const MIuint nModules = sbTarget.GetNumModules();
- for (MIuint i = 0; bOk && (i < nModules); i++) {
- lldb::SBModule module = sbTarget.GetModuleAtIndex(i);
- if (module.IsValid()) {
- const CMIUtilString strModuleFilePath(
- module.GetFileSpec().GetDirectory());
- const CMIUtilString strModuleFileName(module.GetFileSpec().GetFilename());
- const CMIUtilString strModuleFullPath(CMIUtilString::Format(
- "%s/%s", strModuleFilePath.c_str(), strModuleFileName.c_str()));
- const CMIUtilString strHasSymbols =
- (module.GetNumSymbols() > 0) ? "Yes" : "No";
- lldb::addr_t addrLoadS = 0xffffffffffffffff;
- lldb::addr_t addrLoadSize = 0;
- bool bHaveAddrLoad = false;
- const MIuint nSections = module.GetNumSections();
- for (MIuint j = 0; j < nSections; j++) {
- lldb::SBSection section = module.GetSectionAtIndex(j);
- lldb::addr_t addrLoad = section.GetLoadAddress(sbTarget);
- if (addrLoad != (lldb::addr_t)-1) {
- if (!bHaveAddrLoad) {
- bHaveAddrLoad = true;
- addrLoadS = addrLoad;
- }
-
- addrLoadSize += section.GetByteSize();
- }
- }
- bOk = bOk &&
- CMICmnStreamStdout::TextToStdout(CMIUtilString::Format(
- "~\"0x%016" PRIx64 "\t0x%016" PRIx64 "\t%s\t\t%s\"", addrLoadS,
- addrLoadS + addrLoadSize, strHasSymbols.c_str(),
- strModuleFullPath.c_str()));
- }
- }
-
- return bOk;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbInfo.h (removed)
@@ -1,87 +0,0 @@
-//===-- MICmdCmdGdbInfo.h ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbInfo interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// Third party headers:
-#include <map>
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements GDB command "info".
-// The design of matching the info request to a request action (or
-// command) is very simple. The request function which carries out
-// the task of information gathering and printing to stdout is part of
-// *this class. Should the request function become more complicated
-// then
-// that request should really reside in a command type class. Then this
-// class instantiates a request info command for a matching request.
-// The
-// design/code of *this class then does not then become bloated. Use a
-// lightweight version of the current MI command system.
-//--
-class CMICmdCmdGdbInfo : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdGdbInfo();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdGdbInfo() override;
-
- // Typedefs:
-private:
- typedef bool (CMICmdCmdGdbInfo::*FnPrintPtr)();
- typedef std::map<CMIUtilString, FnPrintPtr> MapPrintFnNameToPrintFn_t;
-
- // Methods:
-private:
- bool GetPrintFn(const CMIUtilString &vrPrintFnName, FnPrintPtr &vrwpFn) const;
- bool PrintFnSharedLibrary();
-
- // Attributes:
-private:
- const static MapPrintFnNameToPrintFn_t ms_mapPrintFnNameToPrintFn;
- //
- const CMIUtilString m_constStrArgNamedPrint;
- bool m_bPrintFnRecognised; // True = This command has a function with a name
- // that matches the Print argument, false = not
- // found
- bool m_bPrintFnSuccessful; // True = The print function completed its task ok,
- // false = function failed for some reason
- CMIUtilString m_strPrintFnName;
- CMIUtilString m_strPrintFnError;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.cpp (removed)
@@ -1,491 +0,0 @@
-//===-- MICmdCmdGdbSet.cpp --------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbSet implementation.
-
-// In-house headers:
-#include "MICmdCmdGdbSet.h"
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValString.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-// Instantiations:
-const CMICmdCmdGdbSet::MapGdbOptionNameToFnGdbOptionPtr_t
- CMICmdCmdGdbSet::ms_mapGdbOptionNameToFnGdbOptionPtr = {
- {"target-async", &CMICmdCmdGdbSet::OptionFnTargetAsync},
- {"print", &CMICmdCmdGdbSet::OptionFnPrint},
- // { "auto-solib-add", &CMICmdCmdGdbSet::OptionFnAutoSolibAdd }, //
- // Example code if need to implement GDB set other options
- {"output-radix", &CMICmdCmdGdbSet::OptionFnOutputRadix},
- {"solib-search-path", &CMICmdCmdGdbSet::OptionFnSolibSearchPath},
- {"disassembly-flavor", &CMICmdCmdGdbSet::OptionFnDisassemblyFlavor},
- {"fallback", &CMICmdCmdGdbSet::OptionFnFallback},
- {"breakpoint", &CMICmdCmdGdbSet::OptionFnBreakpoint}};
-
-//++
-// Details: CMICmdCmdGdbSet constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbSet::CMICmdCmdGdbSet()
- : m_constStrArgNamedGdbOption("option"), m_bGdbOptionRecognised(true),
- m_bGdbOptionFnSuccessful(false), m_bGbbOptionFnHasError(false),
- m_strGdbOptionFnError(MIRSRC(IDS_WORD_ERR_MSG_NOT_IMPLEMENTED_BRKTS)) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "gdb-set";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdGdbSet::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdGdbSet destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbSet::~CMICmdCmdGdbSet() {}
-
-//++
-// 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 CMICmdCmdGdbSet::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValListOfN(
- m_constStrArgNamedGdbOption, true, true,
- CMICmdArgValListBase::eArgValType_StringAnything));
- return ParseValidateCmdOptions();
-}
-
-//++
-// Details: The invoker requires this function. The command is executed 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 CMICmdCmdGdbSet::Execute() {
- CMICMDBASE_GETOPTION(pArgGdbOption, ListOfN, m_constStrArgNamedGdbOption);
- const CMICmdArgValListBase::VecArgObjPtr_t &rVecWords(
- pArgGdbOption->GetExpectedOptions());
-
- // Get the gdb-set option to carry out. This option will be used as an action
- // which should be done. Further arguments will be used as parameters for it.
- CMICmdArgValListBase::VecArgObjPtr_t::const_iterator it = rVecWords.begin();
- const CMICmdArgValString *pOption =
- static_cast<const CMICmdArgValString *>(*it);
- const CMIUtilString strOption(pOption->GetValue());
- ++it;
-
- // Retrieve the parameter(s) for the option
- CMIUtilString::VecString_t vecWords;
- while (it != rVecWords.end()) {
- const CMICmdArgValString *pWord =
- static_cast<const CMICmdArgValString *>(*it);
- vecWords.push_back(pWord->GetValue());
-
- // Next
- ++it;
- }
-
- FnGdbOptionPtr pPrintRequestFn = nullptr;
- if (!GetOptionFn(strOption, pPrintRequestFn)) {
- // For unimplemented option handlers, fallback on a generic handler
- // ToDo: Remove this when ALL options have been implemented
- if (!GetOptionFn("fallback", pPrintRequestFn)) {
- m_bGdbOptionRecognised = false;
- m_strGdbOptionName = "fallback"; // This would be the strOption name
- return MIstatus::success;
- }
- }
-
- m_bGdbOptionFnSuccessful = (this->*(pPrintRequestFn))(vecWords);
- if (!m_bGdbOptionFnSuccessful && !m_bGbbOptionFnHasError)
- return MIstatus::failure;
-
- return MIstatus::success;
-}
-
-//++
-// Details: The invoker requires this function. The command prepares a MI Record
-// Result
-// for the work carried out in the Execute() method.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::Acknowledge() {
- // Print error if option isn't recognized:
- // ^error,msg="The request '%s' was not recognized, not implemented"
- if (!m_bGdbOptionRecognised) {
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_NOT_FOUND),
- m_strGdbOptionName.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // ^done,value="%s"
- if (m_bGdbOptionFnSuccessful) {
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // Print error if request failed:
- // ^error,msg="The request '%s' failed.
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_FAILED), m_strGdbOptionFnError.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdGdbSet::CreateSelf() { return new CMICmdCmdGdbSet(); }
-
-//++
-// Details: Retrieve the print function's pointer for the matching print
-// request.
-// Type: Method.
-// Args: vrPrintFnName - (R) The info requested.
-// vrwpFn - (W) The print function's pointer of the function
-// to carry out
-// Return: bool - True = Print request is implemented, false = not found.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::GetOptionFn(const CMIUtilString &vrPrintFnName,
- FnGdbOptionPtr &vrwpFn) const {
- vrwpFn = nullptr;
-
- const MapGdbOptionNameToFnGdbOptionPtr_t::const_iterator it =
- ms_mapGdbOptionNameToFnGdbOptionPtr.find(vrPrintFnName);
- if (it != ms_mapGdbOptionNameToFnGdbOptionPtr.end()) {
- vrwpFn = (*it).second;
- return true;
- }
-
- return false;
-}
-
-//++
-// Details: Carry out work to complete the GDB set option 'target-async' to
-// prepare
-// and send back information asked for.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::OptionFnTargetAsync(
- const CMIUtilString::VecString_t &vrWords) {
- bool bAsyncMode = false;
- bool bOk = true;
-
- if (vrWords.size() > 1)
- // Too many arguments.
- bOk = false;
- else if (vrWords.size() == 0)
- // If no arguments, default is "on".
- bAsyncMode = true;
- else if (CMIUtilString::Compare(vrWords[0], "on"))
- bAsyncMode = true;
- else if (CMIUtilString::Compare(vrWords[0], "off"))
- bAsyncMode = false;
- else
- // Unrecognized argument.
- bOk = false;
-
- if (!bOk) {
- // Report error.
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = MIRSRC(IDS_CMD_ERR_GDBSET_OPT_TARGETASYNC);
- return MIstatus::failure;
- }
-
- // Turn async mode on/off.
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- rSessionInfo.GetDebugger().SetAsync(bAsyncMode);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB set option
-// 'print-char-array-as-string' to
-// prepare and send back information asked for.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::OptionFnPrint(const CMIUtilString::VecString_t &vrWords) {
- const bool bAllArgs(vrWords.size() == 2);
- const bool bArgOn(bAllArgs && (CMIUtilString::Compare(vrWords[1], "on") ||
- CMIUtilString::Compare(vrWords[1], "1")));
- const bool bArgOff(bAllArgs && (CMIUtilString::Compare(vrWords[1], "off") ||
- CMIUtilString::Compare(vrWords[1], "0")));
- if (!bAllArgs || (!bArgOn && !bArgOff)) {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = MIRSRC(IDS_CMD_ERR_GDBSET_OPT_PRINT_BAD_ARGS);
- return MIstatus::failure;
- }
-
- const CMIUtilString strOption(vrWords[0]);
- CMIUtilString strOptionKey;
- if (CMIUtilString::Compare(strOption, "char-array-as-string"))
- strOptionKey = m_rLLDBDebugSessionInfo.m_constStrPrintCharArrayAsString;
- else if (CMIUtilString::Compare(strOption, "expand-aggregates"))
- strOptionKey = m_rLLDBDebugSessionInfo.m_constStrPrintExpandAggregates;
- else if (CMIUtilString::Compare(strOption, "aggregate-field-names"))
- strOptionKey = m_rLLDBDebugSessionInfo.m_constStrPrintAggregateFieldNames;
- else {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_GDBSET_OPT_PRINT_UNKNOWN_OPTION), strOption.c_str());
- return MIstatus::failure;
- }
-
- const bool bOptionValue(bArgOn);
- if (!m_rLLDBDebugSessionInfo.SharedDataAdd<bool>(strOptionKey,
- bOptionValue)) {
- m_bGbbOptionFnHasError = false;
- SetError(CMIUtilString::Format(MIRSRC(IDS_DBGSESSION_ERR_SHARED_DATA_ADD),
- m_cmdData.strMiCmd.c_str(),
- strOptionKey.c_str()));
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB set option 'solib-search-path' to
-// prepare
-// and send back information asked for.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::OptionFnSolibSearchPath(
- const CMIUtilString::VecString_t &vrWords) {
- // Check we have at least one argument
- if (vrWords.size() < 1) {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = MIRSRC(IDS_CMD_ERR_GDBSET_OPT_SOLIBSEARCHPATH);
- return MIstatus::failure;
- }
- const CMIUtilString &rStrValSolibPath(vrWords[0]);
-
- // Add 'solib-search-path' to the shared data list
- const CMIUtilString &rStrKeySolibPath(
- m_rLLDBDebugSessionInfo.m_constStrSharedDataSolibPath);
- if (!m_rLLDBDebugSessionInfo.SharedDataAdd<CMIUtilString>(rStrKeySolibPath,
- rStrValSolibPath)) {
- m_bGbbOptionFnHasError = false;
- SetError(CMIUtilString::Format(MIRSRC(IDS_DBGSESSION_ERR_SHARED_DATA_ADD),
- m_cmdData.strMiCmd.c_str(),
- rStrKeySolibPath.c_str()));
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB set option 'output-radix' to
-// prepare
-// and send back information asked for.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::OptionFnOutputRadix(
- const CMIUtilString::VecString_t &vrWords) {
- // Check we have at least one argument
- if (vrWords.size() < 1) {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = MIRSRC(IDS_CMD_ERR_GDBSET_OPT_SOLIBSEARCHPATH);
- return MIstatus::failure;
- }
- const CMIUtilString &rStrValOutputRadix(vrWords[0]);
-
- CMICmnLLDBDebugSessionInfoVarObj::varFormat_e format =
- CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Invalid;
- MIint64 radix;
- if (rStrValOutputRadix.ExtractNumber(radix)) {
- switch (radix) {
- case 8:
- format = CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Octal;
- break;
- case 10:
- format = CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Natural;
- break;
- case 16:
- format = CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Hex;
- break;
- default:
- format = CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Invalid;
- break;
- }
- }
- if (format == CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Invalid) {
- m_bGbbOptionFnHasError = false;
- SetError(CMIUtilString::Format(MIRSRC(IDS_DBGSESSION_ERR_SHARED_DATA_ADD),
- m_cmdData.strMiCmd.c_str(), "Output Radix"));
- return MIstatus::failure;
- }
- CMICmnLLDBDebugSessionInfoVarObj::VarObjSetFormat(format);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB set option 'disassembly-flavor'
-// to prepare
-// and send back information asked for.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::OptionFnDisassemblyFlavor(
- const CMIUtilString::VecString_t &vrWords) {
- // Check we have at least one argument
- if (vrWords.size() < 1) {
- m_bGbbOptionFnHasError = true;
- // m_strGdbOptionFnError = MIRSRC(IDS_CMD_ERR_GDBSET_OPT_SOLIBSEARCHPATH);
- return MIstatus::failure;
- }
- const CMIUtilString &rStrValDisasmFlavor(vrWords[0]);
-
- lldb::SBDebugger &rDbgr = m_rLLDBDebugSessionInfo.GetDebugger();
- lldb::SBError error = lldb::SBDebugger::SetInternalVariable(
- "target.x86-disassembly-flavor", rStrValDisasmFlavor.c_str(),
- rDbgr.GetInstanceName());
- if (error.Fail()) {
- m_strGdbOptionFnError = error.GetCString();
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB set option 'breakpoint' to
-// prepare
-// and send back information asked for.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::OptionFnBreakpoint(
- const CMIUtilString::VecString_t &vrWords) {
- bool bPending = false;
- bool bOk = true;
-
- if (vrWords.size() != 2)
- // Wrong number of arguments.
- bOk = false;
- else if (CMIUtilString::Compare(vrWords[0], "pending") &&
- (CMIUtilString::Compare(vrWords[1], "on") ||
- CMIUtilString::Compare(vrWords[1], "1")))
- bPending = true;
- else if (CMIUtilString::Compare(vrWords[0], "pending") &&
- (CMIUtilString::Compare(vrWords[1], "off") ||
- CMIUtilString::Compare(vrWords[1], "0")))
- bPending = false;
- else
- // Unrecognized argument(s).
- bOk = false;
-
- if (!bOk) {
- // Report error.
- m_bGbbOptionFnHasError = false;
- SetError(MIRSRC(IDS_CMD_ERR_GDBSET_OPT_BREAKPOINT));
- return MIstatus::failure;
- }
-
- CMIUtilString sPendingVal = bPending ? "on" : "off";
- CMIUtilString sKey = "breakpoint.pending";
- if (!m_rLLDBDebugSessionInfo.SharedDataAdd(sKey, sPendingVal)) {
- m_bGbbOptionFnHasError = false;
- SetError(CMIUtilString::Format(MIRSRC(IDS_DBGSESSION_ERR_SHARED_DATA_ADD),
- m_cmdData.strMiCmd.c_str(), sKey.c_str()));
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB set option to prepare and send
-// back the
-// requested information.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbSet::OptionFnFallback(
- const CMIUtilString::VecString_t &vrWords) {
- MIunused(vrWords);
-
- // Do nothing - intentional. This is a fallback function to do nothing.
- // This allows the search for gdb-set options to always succeed when the
- // option is not
- // found (implemented).
-
- return MIstatus::success;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbSet.h (removed)
@@ -1,101 +0,0 @@
-//===-- MICmdCmdGdbSet.h ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbSet interface.
-//
-// To implement new MI commands, derive a new command class from
-// the command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "gdb-set".
-// This command does not follow the MI documentation exactly. While
-// *this
-// command is implemented it does not do anything with the gdb-set
-// variable past in.
-// The design of matching the info request to a request action (or
-// command) is very simple. The request function which carries out
-// the task of information gathering and printing to stdout is part of
-// *this class. Should the request function become more complicated
-// then
-// that request should really reside in a command type class. Then this
-// class instantiates a request info command for a matching request.
-// The
-// design/code of *this class then does not then become bloated. Use a
-// lightweight version of the current MI command system.
-//--
-class CMICmdCmdGdbSet : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdGdbSet();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdGdbSet() override;
-
- // Typedefs:
-private:
- typedef bool (CMICmdCmdGdbSet::*FnGdbOptionPtr)(
- const CMIUtilString::VecString_t &vrWords);
- typedef std::map<CMIUtilString, FnGdbOptionPtr>
- MapGdbOptionNameToFnGdbOptionPtr_t;
-
- // Methods:
-private:
- bool GetOptionFn(const CMIUtilString &vrGdbOptionName,
- FnGdbOptionPtr &vrwpFn) const;
- bool OptionFnTargetAsync(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnPrint(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnSolibSearchPath(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnOutputRadix(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnDisassemblyFlavor(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnBreakpoint(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnFallback(const CMIUtilString::VecString_t &vrWords);
-
- // Attributes:
-private:
- const static MapGdbOptionNameToFnGdbOptionPtr_t
- ms_mapGdbOptionNameToFnGdbOptionPtr;
- //
- const CMIUtilString m_constStrArgNamedGdbOption;
- bool m_bGdbOptionRecognised; // True = This command has a function with a name
- // that matches the Print argument, false = not
- // found
- bool m_bGdbOptionFnSuccessful; // True = The print function completed its task
- // ok, false = function failed for some reason
- bool m_bGbbOptionFnHasError; // True = The option function has an error
- // condition (not the command!), false = option
- // function ok.
- CMIUtilString m_strGdbOptionName;
- CMIUtilString m_strGdbOptionFnError;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.cpp (removed)
@@ -1,395 +0,0 @@
-//===-- MICmdCmdGdbShow.cpp -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbShow implementation.
-
-// Third party headers:
-#include "lldb/API/SBCompileUnit.h"
-#include "lldb/API/SBFrame.h"
-#include "lldb/API/SBLanguageRuntime.h"
-#include "lldb/API/SBStringList.h"
-#include "lldb/API/SBThread.h"
-
-// In-house headers:
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValString.h"
-#include "MICmdCmdGdbShow.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-// Instantiations:
-const CMICmdCmdGdbShow::MapGdbOptionNameToFnGdbOptionPtr_t
- CMICmdCmdGdbShow::ms_mapGdbOptionNameToFnGdbOptionPtr = {
- {"target-async", &CMICmdCmdGdbShow::OptionFnTargetAsync},
- {"print", &CMICmdCmdGdbShow::OptionFnPrint},
- {"language", &CMICmdCmdGdbShow::OptionFnLanguage},
- {"disassembly-flavor", &CMICmdCmdGdbShow::OptionFnDisassemblyFlavor},
- {"fallback", &CMICmdCmdGdbShow::OptionFnFallback},
- {"breakpoint", &CMICmdCmdGdbShow::OptionFnBreakpoint}};
-
-//++
-// Details: CMICmdCmdGdbShow constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbShow::CMICmdCmdGdbShow()
- : m_constStrArgNamedGdbOption("option"), m_bGdbOptionRecognised(true),
- m_bGdbOptionFnSuccessful(false), m_bGbbOptionFnHasError(false),
- m_strGdbOptionFnError(MIRSRC(IDS_WORD_ERR_MSG_NOT_IMPLEMENTED_BRKTS)) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "gdb-show";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdGdbShow::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdGdbShow destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbShow::~CMICmdCmdGdbShow() {}
-
-//++
-// 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValListOfN(
- m_constStrArgNamedGdbOption, true, true,
- CMICmdArgValListBase::eArgValType_StringAnything));
- return ParseValidateCmdOptions();
-}
-
-//++
-// Details: The invoker requires this function. The command is executed in this
-// function.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::Execute() {
- CMICMDBASE_GETOPTION(pArgGdbOption, ListOfN, m_constStrArgNamedGdbOption);
- const CMICmdArgValListBase::VecArgObjPtr_t &rVecWords(
- pArgGdbOption->GetExpectedOptions());
-
- // Get the gdb-show option to carry out. This option will be used as an action
- // which should be done. Further arguments will be used as parameters for it.
- CMICmdArgValListBase::VecArgObjPtr_t::const_iterator it = rVecWords.begin();
- const CMICmdArgValString *pOption =
- static_cast<const CMICmdArgValString *>(*it);
- const CMIUtilString strOption(pOption->GetValue());
- ++it;
-
- // Retrieve the parameter(s) for the option
- CMIUtilString::VecString_t vecWords;
- while (it != rVecWords.end()) {
- const CMICmdArgValString *pWord =
- static_cast<const CMICmdArgValString *>(*it);
- vecWords.push_back(pWord->GetValue());
-
- // Next
- ++it;
- }
-
- FnGdbOptionPtr pPrintRequestFn = nullptr;
- if (!GetOptionFn(strOption, pPrintRequestFn)) {
- // For unimplemented option handlers, fallback to a generic handler
- // ToDo: Remove this when ALL options have been implemented
- if (!GetOptionFn("fallback", pPrintRequestFn)) {
- m_bGdbOptionRecognised = false;
- m_strGdbOptionName = "fallback"; // This would be the strOption name
- return MIstatus::success;
- }
- }
-
- m_bGdbOptionFnSuccessful = (this->*(pPrintRequestFn))(vecWords);
- if (!m_bGdbOptionFnSuccessful && !m_bGbbOptionFnHasError)
- return MIstatus::failure;
-
- return MIstatus::success;
-}
-
-//++
-// Details: The invoker requires this function. The command prepares a MI Record
-// Result
-// for the work carried out in the Execute() method.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::Acknowledge() {
- // Print error if option isn't recognized:
- // ^error,msg="The request '%s' was not recognized, not implemented"
- if (!m_bGdbOptionRecognised) {
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_NOT_FOUND),
- m_strGdbOptionName.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // ^done,value="%s"
- if (m_bGdbOptionFnSuccessful && !m_strValue.empty()) {
- const CMICmnMIValueConst miValueConst(m_strValue);
- const CMICmnMIValueResult miValueResult("value", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- } else if (m_bGdbOptionFnSuccessful) {
- // Ignore empty value (for fallback)
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // Print error if request failed:
- // ^error,msg="The request '%s' failed.
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_INFO_PRINTFN_FAILED), m_strGdbOptionFnError.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdGdbShow::CreateSelf() { return new CMICmdCmdGdbShow(); }
-
-//++
-// Details: Retrieve the print function's pointer for the matching print
-// request.
-// Type: Method.
-// Args: vrPrintFnName - (R) The info requested.
-// vrwpFn - (W) The print function's pointer of the function
-// to carry out
-// Return: bool - True = Print request is implemented, false = not found.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::GetOptionFn(const CMIUtilString &vrPrintFnName,
- FnGdbOptionPtr &vrwpFn) const {
- vrwpFn = nullptr;
-
- const MapGdbOptionNameToFnGdbOptionPtr_t::const_iterator it =
- ms_mapGdbOptionNameToFnGdbOptionPtr.find(vrPrintFnName);
- if (it != ms_mapGdbOptionNameToFnGdbOptionPtr.end()) {
- vrwpFn = (*it).second;
- return true;
- }
-
- return false;
-}
-
-//++
-// Details: Carry out work to complete the GDB show option 'target-async' to
-// prepare
-// and send back the requested information.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::OptionFnTargetAsync(
- const CMIUtilString::VecString_t &vrWords) {
- MIunused(vrWords);
-
- // Get async mode
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- const bool bAsyncMode = rSessionInfo.GetDebugger().GetAsync();
-
- m_strValue = bAsyncMode ? "on" : "off";
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB show option 'print' to prepare
-// and send
-// back the requested information.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::OptionFnPrint(
- const CMIUtilString::VecString_t &vrWords) {
- const bool bAllArgs(vrWords.size() == 1);
- if (!bAllArgs) {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = MIRSRC(IDS_CMD_ERR_GDBSHOW_OPT_PRINT_BAD_ARGS);
- return MIstatus::failure;
- }
-
- const CMIUtilString strOption(vrWords[0]);
- CMIUtilString strOptionKey;
- bool bOptionValueDefault = false;
- if (CMIUtilString::Compare(strOption, "char-array-as-string"))
- strOptionKey = m_rLLDBDebugSessionInfo.m_constStrPrintCharArrayAsString;
- else if (CMIUtilString::Compare(strOption, "expand-aggregates"))
- strOptionKey = m_rLLDBDebugSessionInfo.m_constStrPrintExpandAggregates;
- else if (CMIUtilString::Compare(strOption, "aggregate-field-names")) {
- strOptionKey = m_rLLDBDebugSessionInfo.m_constStrPrintAggregateFieldNames;
- bOptionValueDefault = true;
- } else {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_GDBSHOW_OPT_PRINT_UNKNOWN_OPTION),
- strOption.c_str());
- return MIstatus::failure;
- }
-
- bool bOptionValue = false;
- bOptionValue = bOptionValueDefault
- ? !m_rLLDBDebugSessionInfo.SharedDataRetrieve<bool>(
- strOptionKey, bOptionValue) ||
- bOptionValue
- : m_rLLDBDebugSessionInfo.SharedDataRetrieve<bool>(
- strOptionKey, bOptionValue) &&
- bOptionValue;
-
- m_strValue = bOptionValue ? "on" : "off";
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB show option 'language' to prepare
-// and send back the requested information.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::OptionFnLanguage(
- const CMIUtilString::VecString_t &vrWords) {
- MIunused(vrWords);
-
- // Get current language
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBThread sbThread = rSessionInfo.GetProcess().GetSelectedThread();
- const lldb::SBFrame sbFrame = sbThread.GetSelectedFrame();
- lldb::SBCompileUnit sbCompileUnit = sbFrame.GetCompileUnit();
- const lldb::LanguageType eLanguageType = sbCompileUnit.GetLanguage();
-
- m_strValue = lldb::SBLanguageRuntime::GetNameForLanguageType(eLanguageType);
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB show option 'disassembly-flavor' to prepare
-// and send back the requested information.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::OptionFnDisassemblyFlavor(const CMIUtilString::VecString_t &vrWords) {
- MIunused(vrWords);
-
- // Get current disassembly flavor
- lldb::SBDebugger &rDbgr = m_rLLDBDebugSessionInfo.GetDebugger();
- m_strValue = lldb::SBDebugger::GetInternalVariableValue("target.x86-disassembly-flavor",
- rDbgr.GetInstanceName()).GetStringAtIndex(0);
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB show option 'breakpoint' to
-// prepare
-// and send back the requested information.
-// Type: Method.
-// Args: vrWords - (R) List of additional parameters used by this option.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::OptionFnBreakpoint(
- const CMIUtilString::VecString_t &vrWords) {
- if (vrWords.size() != 1) {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = MIRSRC(IDS_CMD_ERR_GDBSHOW_OPT_BREAKPOINT_BAD_ARGS);
- return MIstatus::failure;
- }
-
- const CMIUtilString strOption(vrWords[0]);
- if (!CMIUtilString::Compare(strOption, "pending")) {
- m_bGbbOptionFnHasError = true;
- m_strGdbOptionFnError = CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_GDBSHOW_OPT_BREAKPOINT_UNKNOWN_OPTION),
- strOption.c_str());
- return MIstatus::failure;
- }
-
- if (!m_rLLDBDebugSessionInfo.SharedDataRetrieve("breakpoint.pending",
- m_strValue)) {
- if (m_strValue.empty())
- m_strValue = "off";
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Carry out work to complete the GDB show option to prepare and send
-// back the
-// requested information.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdGdbShow::OptionFnFallback(
- const CMIUtilString::VecString_t &vrWords) {
- MIunused(vrWords);
-
- // Do nothing - intentional. This is a fallback function to do nothing.
- // This allows the search for gdb-show options to always succeed when the
- // option is not
- // found (implemented).
-
- return MIstatus::success;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbShow.h (removed)
@@ -1,101 +0,0 @@
-//===-- MICmdCmdGdbShow.h ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbShow interface.
-//
-// To implement new MI commands, derive a new command class from
-// the command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "gdb-show".
-// This command does not follow the MI documentation exactly. While
-// *this
-// command is implemented it does not do anything with the gdb-set
-// variable past in.
-// The design of matching the info request to a request action (or
-// command) is very simple. The request function which carries out
-// the task of information gathering and printing to stdout is part of
-// *this class. Should the request function become more complicated
-// then
-// that request should really reside in a command type class. Then this
-// class instantiates a request info command for a matching request.
-// The
-// design/code of *this class then does not then become bloated. Use a
-// lightweight version of the current MI command system.
-//--
-class CMICmdCmdGdbShow : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdGdbShow();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdGdbShow() override;
-
- // Typedefs:
-private:
- typedef bool (CMICmdCmdGdbShow::*FnGdbOptionPtr)(
- const CMIUtilString::VecString_t &vrWords);
- typedef std::map<CMIUtilString, FnGdbOptionPtr>
- MapGdbOptionNameToFnGdbOptionPtr_t;
-
- // Methods:
-private:
- bool GetOptionFn(const CMIUtilString &vrGdbOptionName,
- FnGdbOptionPtr &vrwpFn) const;
- bool OptionFnTargetAsync(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnPrint(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnLanguage(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnDisassemblyFlavor(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnFallback(const CMIUtilString::VecString_t &vrWords);
- bool OptionFnBreakpoint(const CMIUtilString::VecString_t &vrWords);
-
- // Attributes:
-private:
- const static MapGdbOptionNameToFnGdbOptionPtr_t
- ms_mapGdbOptionNameToFnGdbOptionPtr;
-
- const CMIUtilString m_constStrArgNamedGdbOption;
- bool m_bGdbOptionRecognised; // True = This command has a function with a name
- // that matches the Print argument, false = not
- // found
- bool m_bGdbOptionFnSuccessful; // True = The print function completed its task
- // ok, false = function failed for some reason
- bool m_bGbbOptionFnHasError; // True = The option function has an error
- // condition (not the command!), false = option
- // function ok.
- CMIUtilString m_strGdbOptionName;
- CMIUtilString m_strGdbOptionFnError;
- CMIUtilString m_strValue;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.cpp (removed)
@@ -1,89 +0,0 @@
-//===-- MICmdCmdGdbThread.cpp -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbThread implementation.
-
-// In-house headers:
-#include "MICmdCmdGdbThread.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-//++
-// Details: CMICmdCmdGdbThread constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbThread::CMICmdCmdGdbThread() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "thread";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdGdbThread::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdThread destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbThread::~CMICmdCmdGdbThread() {}
-
-//++
-// 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 CMICmdCmdGdbThread::Execute() {
- // 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.
-//--
-bool CMICmdCmdGdbThread::Acknowledge() {
- const CMICmnMIValueConst miValueConst(MIRSRC(IDS_WORD_NOT_IMPLEMENTED));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdGdbThread::CreateSelf() {
- return new CMICmdCmdGdbThread();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdGdbThread.h (removed)
@@ -1,50 +0,0 @@
-//===-- MICmdCmdGdbThread.h -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbThread interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements GDB command "thread".
-//--
-class CMICmdCmdGdbThread : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdGdbThread();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdGdbThread() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp (removed)
@@ -1,586 +0,0 @@
-//===-- MICmdCmdMiscellanous.cpp --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbExit implementation.
-// CMICmdCmdListThreadGroups implementation.
-// CMICmdCmdInterpreterExec implementation.
-// CMICmdCmdInferiorTtySet implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBCommandInterpreter.h"
-#include "lldb/API/SBThread.h"
-
-// In-house headers:
-#include "MICmdArgValFile.h"
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-#include "MICmdCmdMiscellanous.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnStreamStderr.h"
-#include "MICmnStreamStdout.h"
-#include "MIDriverBase.h"
-
-//++
-// Details: CMICmdCmdGdbExit constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdGdbExit::CMICmdCmdGdbExit() {
- // 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.
-//--
-CMICmdCmdGdbExit::~CMICmdCmdGdbExit() {}
-
-//++
-// 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() {
- CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(true);
- const lldb::SBError sbErr = m_rLLDBDebugSessionInfo.GetProcess().Destroy();
- // 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.
-//--
-bool CMICmdCmdGdbExit::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdGdbExit::CreateSelf() { return new CMICmdCmdGdbExit(); }
-
-
-//++
-// Details: CMICmdCmdListThreadGroups constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdListThreadGroups::CMICmdCmdListThreadGroups()
- : 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;
-}
-
-//++
-// Details: CMICmdCmdListThreadGroups destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdListThreadGroups::~CMICmdCmdListThreadGroups() {
- 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.
-//--
-bool CMICmdCmdListThreadGroups::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValOptionLong(m_constStrArgNamedAvailable, false, true));
- m_setCmdArgs.Add(
- new CMICmdArgValOptionLong(m_constStrArgNamedRecurse, false, true,
- CMICmdArgValListBase::eArgValType_Number, 1));
- m_setCmdArgs.Add(
- new CMICmdArgValListOfN(m_constStrArgNamedGroup, false, true,
- CMICmdArgValListBase::eArgValType_Number));
- m_setCmdArgs.Add(
- new CMICmdArgValThreadGrp(m_constStrArgNamedThreadGroup, false, true));
- return 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.
-// Synopsis: -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() {
- 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 sbProcess = rSessionInfo.GetProcess();
-
- // Note do not check for sbProcess is IsValid(), continue
-
- m_vecMIValueTuple.clear();
- const MIuint nThreads = sbProcess.GetNumThreads();
- for (MIuint i = 0; i < nThreads; i++) {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
-
- if (thread.IsValid()) {
- CMICmnMIValueTuple miTuple;
- if (!rSessionInfo.MIResponseFormThreadInfo(
- m_cmdData, thread,
- CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_NoFrames, 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.
-//--
-bool CMICmdCmdListThreadGroups::Acknowledge() {
- 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.GetProcess().IsValid()) {
- const lldb::pid_t pid = rSessionInfo.GetProcess().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.GetProcess().IsValid()) {
- const lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst3(strPid);
- const CMICmnMIValueResult miValueResult3("pid", miValueConst3);
- miTuple.Add(miValueResult3);
- }
-
- if (rSessionInfo.GetTarget().IsValid()) {
- lldb::SBTarget sbTrgt = rSessionInfo.GetTarget();
- const char *pDir = sbTrgt.GetExecutable().GetDirectory();
- const char *pFileName = sbTrgt.GetExecutable().GetFilename();
- const CMIUtilString strFile(
- CMIUtilString::Format("%s/%s",
- CMIUtilString::WithNullAsEmpty(pDir),
- CMIUtilString::WithNullAsEmpty(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.
-//--
-CMICmdBase *CMICmdCmdListThreadGroups::CreateSelf() {
- return new CMICmdCmdListThreadGroups();
-}
-
-
-//++
-// Details: CMICmdCmdInterpreterExec constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdInterpreterExec::CMICmdCmdInterpreterExec()
- : m_constStrArgNamedInterpreter("interpreter"),
- 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;
-}
-
-//++
-// Details: CMICmdCmdInterpreterExec destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdInterpreterExec::~CMICmdCmdInterpreterExec() {}
-
-//++
-// 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() {
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgNamedInterpreter, true, true));
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgNamedCommand, true, true, true));
- return 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.
-//--
-bool CMICmdCmdInterpreterExec::Execute() {
- 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.GetDebugger().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.
-//--
-bool CMICmdCmdInterpreterExec::Acknowledge() {
- if (m_lldbResult.GetOutputSize() > 0) {
- const CMIUtilString line(m_lldbResult.GetOutput());
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_ConsoleStreamOutput, miValueConst);
- const bool bOk = CMICmnStreamStdout::TextToStdout(miOutOfBandRecord.GetString());
- if (!bOk)
- return MIstatus::failure;
- }
- if (m_lldbResult.GetErrorSize() > 0) {
- const CMIUtilString line(m_lldbResult.GetError());
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_LogStreamOutput, miValueConst);
- const bool bOk = CMICmnStreamStdout::TextToStdout(miOutOfBandRecord.GetString());
- if (!bOk)
- return MIstatus::failure;
- }
-
- 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.
-//--
-CMICmdBase *CMICmdCmdInterpreterExec::CreateSelf() {
- return new CMICmdCmdInterpreterExec();
-}
-
-
-//++
-// Details: CMICmdCmdInferiorTtySet constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdInferiorTtySet::CMICmdCmdInferiorTtySet() {
- // 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.
-//--
-CMICmdCmdInferiorTtySet::~CMICmdCmdInferiorTtySet() {}
-
-//++
-// 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() {
- // 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.
-//--
-bool CMICmdCmdInferiorTtySet::Acknowledge() {
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error);
- 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.
-//--
-CMICmdBase *CMICmdCmdInferiorTtySet::CreateSelf() {
- return new CMICmdCmdInferiorTtySet();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.h (removed)
@@ -1,156 +0,0 @@
-//===-- MICmdCmdMiscellanous.h ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdGdbExit interface.
-// CMICmdCmdListThreadGroups interface.
-// CMICmdCmdInterpreterExec interface.
-// CMICmdCmdInferiorTtySet interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// Third party headers:
-#include "lldb/API/SBCommandReturnObject.h"
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "gdb-exit".
-//--
-class CMICmdCmdGdbExit : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdGdbExit();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdGdbExit() override;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "list-thread-groups".
-// This command does not follow the MI documentation exactly.
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Miscellaneous-Commands.html#GDB_002fMI-Miscellaneous-Commands
-//--
-class CMICmdCmdListThreadGroups : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdListThreadGroups();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdListThreadGroups() override;
-
- // Typedefs:
-private:
- typedef std::vector<CMICmnMIValueTuple> VecMIValueTuple_t;
-
- // Attributes:
-private:
- bool m_bIsI1; // True = Yes command argument equal "i1", false = no match
- bool m_bHaveArgOption; // True = Yes "--available" present, false = not found
- bool m_bHaveArgRecurse; // True = Yes command argument "--recurse", false = no
- // found
- VecMIValueTuple_t m_vecMIValueTuple;
- const CMIUtilString m_constStrArgNamedAvailable;
- const CMIUtilString m_constStrArgNamedRecurse;
- const CMIUtilString m_constStrArgNamedGroup;
- const CMIUtilString m_constStrArgNamedThreadGroup;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "interpreter-exec".
-//--
-class CMICmdCmdInterpreterExec : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdInterpreterExec();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdInterpreterExec() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamedInterpreter;
- const CMIUtilString m_constStrArgNamedCommand;
- lldb::SBCommandReturnObject m_lldbResult;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "inferior-tty-set".
-//--
-class CMICmdCmdInferiorTtySet : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdInferiorTtySet();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdInferiorTtySet() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdStack.cpp (removed)
@@ -1,1053 +0,0 @@
-//===-- MICmdCmdStack.cpp ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdStackInfoDepth implementation.
-// CMICmdCmdStackInfoFrame implementation.
-// CMICmdCmdStackListFrames implementation.
-// CMICmdCmdStackListArguments implementation.
-// CMICmdCmdStackListLocals implementation.
-// CMICmdCmdStackSelectFrame implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBThread.h"
-
-// In-house headers:
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValPrintValues.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-#include "MICmdCmdStack.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-#include <algorithm>
-
-//++
-// Details: CMICmdCmdStackInfoDepth constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackInfoDepth::CMICmdCmdStackInfoDepth()
- : m_nThreadFrames(0), m_constStrArgMaxDepth("max-depth") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-info-depth";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackInfoDepth::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdStackInfoDepth destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackInfoDepth::~CMICmdCmdStackInfoDepth() {}
-
-//++
-// 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 CMICmdCmdStackInfoDepth::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgMaxDepth, false, false));
- return 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.
-//--
-bool CMICmdCmdStackInfoDepth::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgMaxDepth, Number, m_constStrArgMaxDepth);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX)
- ? sbProcess.GetThreadByIndexID(nThreadId)
- : sbProcess.GetSelectedThread();
- m_nThreadFrames = thread.GetNumFrames();
-
- 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.
-//--
-bool CMICmdCmdStackInfoDepth::Acknowledge() {
- const CMIUtilString strDepth(CMIUtilString::Format("%d", m_nThreadFrames));
- const CMICmnMIValueConst miValueConst(strDepth);
- const CMICmnMIValueResult miValueResult("depth", miValueConst);
- 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.
-//--
-CMICmdBase *CMICmdCmdStackInfoDepth::CreateSelf() {
- return new CMICmdCmdStackInfoDepth();
-}
-
-
-//++
-// Details: CMICmdCmdStackInfoFrame constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackInfoFrame::CMICmdCmdStackInfoFrame() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-info-frame";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackInfoFrame::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdStackInfoFrame destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackInfoFrame::~CMICmdCmdStackInfoFrame() {}
-
-//++
-// 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdStackInfoFrame::ParseArgs() { return 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdStackInfoFrame::Execute() {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBThread sbThread = sbProcess.GetSelectedThread();
- MIuint nFrameId = sbThread.GetSelectedFrame().GetFrameID();
- if (!rSessionInfo.MIResponseFormFrameInfo(
- sbThread, nFrameId,
- CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments,
- m_miValueTuple))
- return MIstatus::failure;
-
- 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdStackInfoFrame::Acknowledge() {
- const CMICmnMIValueResult miValueResult("frame", m_miValueTuple);
- 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.
-//--
-CMICmdBase *CMICmdCmdStackInfoFrame::CreateSelf() {
- return new CMICmdCmdStackInfoFrame();
-}
-
-
-//++
-// Details: CMICmdCmdStackListFrames constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListFrames::CMICmdCmdStackListFrames()
- : m_nThreadFrames(0), m_constStrArgFrameLow("low-frame"),
- m_constStrArgFrameHigh("high-frame") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-frames";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListFrames::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdStackListFrames destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListFrames::~CMICmdCmdStackListFrames() {
- m_vecMIValueResult.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.
-//--
-bool CMICmdCmdStackListFrames::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true));
- return 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.
-//--
-bool CMICmdCmdStackListFrames::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow);
- CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- // Frame low and high options are not mandatory
- MIuint nFrameHigh =
- pArgFrameHigh->GetFound() ? pArgFrameHigh->GetValue() : UINT32_MAX;
- const MIuint nFrameLow =
- pArgFrameLow->GetFound() ? pArgFrameLow->GetValue() : 0;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX)
- ? sbProcess.GetThreadByIndexID(nThreadId)
- : sbProcess.GetSelectedThread();
- MIuint nThreadFrames = thread.GetNumFrames();
-
- // Adjust nThreadFrames for the nFrameHigh argument as we use nFrameHigh+1 in
- // the min calc as the arg
- // is not an index, but a frame id value.
- if (nFrameHigh < UINT32_MAX) {
- nFrameHigh++;
- nThreadFrames = (nFrameHigh < nThreadFrames) ? nFrameHigh : nThreadFrames;
- }
-
- m_nThreadFrames = nThreadFrames;
- if (nThreadFrames == 0)
- return MIstatus::success;
-
- m_vecMIValueResult.clear();
- for (MIuint nLevel = nFrameLow; nLevel < nThreadFrames; nLevel++) {
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormFrameInfo(
- thread, nLevel,
- CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments,
- miValueTuple))
- return MIstatus::failure;
-
- const CMICmnMIValueResult miValueResult8("frame", miValueTuple);
- m_vecMIValueResult.push_back(miValueResult8);
- }
-
- 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.
-//--
-bool CMICmdCmdStackListFrames::Acknowledge() {
- if (m_nThreadFrames == 0) {
- // MI print "3^done,stack=[{}]"
- const CMICmnMIValueTuple miValueTuple;
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult("stack", miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- // Build up a list of thread information from tuples
- VecMIValueResult_t::const_iterator it = m_vecMIValueResult.begin();
- if (it == m_vecMIValueResult.end()) {
- // MI print "3^done,stack=[{}]"
- const CMICmnMIValueTuple miValueTuple;
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult("stack", miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
- CMICmnMIValueList miValueList(*it);
- ++it;
- while (it != m_vecMIValueResult.end()) {
- const CMICmnMIValueResult &rTuple(*it);
- miValueList.Add(rTuple);
-
- // Next
- ++it;
- }
- const CMICmnMIValueResult miValueResult("stack", 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.
-//--
-CMICmdBase *CMICmdCmdStackListFrames::CreateSelf() {
- return new CMICmdCmdStackListFrames();
-}
-
-
-//++
-// Details: CMICmdCmdStackListArguments constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListArguments::CMICmdCmdStackListArguments()
- : m_bThreadInvalid(false), m_miValueList(true),
- m_constStrArgPrintValues("print-values"),
- m_constStrArgFrameLow("low-frame"), m_constStrArgFrameHigh("high-frame") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-arguments";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListArguments::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdStackListArguments destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListArguments::~CMICmdCmdStackListArguments() {}
-
-//++
-// 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 CMICmdCmdStackListArguments::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameLow, false, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameHigh, false, true));
- return 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.
-//--
-bool CMICmdCmdStackListArguments::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
- CMICMDBASE_GETOPTION(pArgFrameLow, Number, m_constStrArgFrameLow);
- CMICMDBASE_GETOPTION(pArgFrameHigh, Number, m_constStrArgFrameHigh);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound()) {
- if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(
- nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
- static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
- pArgPrintValues->GetValue());
-
- MIuint nFrameLow = 0;
- MIuint nFrameHigh = UINT32_MAX;
- if (pArgFrameLow->GetFound() && pArgFrameHigh->GetFound()) {
- nFrameLow = pArgFrameLow->GetValue();
- nFrameHigh = pArgFrameHigh->GetValue() + 1;
- } else if (pArgFrameLow->GetFound() || pArgFrameHigh->GetFound()) {
- // Only low-frame or high-frame was specified but both are required
- SetError(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX)
- ? sbProcess.GetThreadByIndexID(nThreadId)
- : sbProcess.GetSelectedThread();
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if ((eStopReason == lldb::eStopReasonNone) ||
- (eStopReason == lldb::eStopReasonInvalid)) {
- m_bThreadInvalid = true;
- return MIstatus::success;
- }
-
- const MIuint nFrames = thread.GetNumFrames();
- if (nFrameLow >= nFrames) {
- // The low-frame is larger than the actual number of frames
- SetError(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- nFrameHigh = std::min(nFrameHigh, nFrames);
- for (MIuint i = nFrameLow; i < nFrameHigh; i++) {
- lldb::SBFrame frame = thread.GetFrameAtIndex(i);
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes =
- CMICmnLLDBDebugSessionInfo::eVariableType_Arguments;
- if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes,
- eVarInfoFormat, miValueList))
- return MIstatus::failure;
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format("%d", i));
- const CMICmnMIValueResult miValueResult("level", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueResult miValueResult2("args", miValueList);
- miValueTuple.Add(miValueResult2);
- const CMICmnMIValueResult miValueResult3("frame", miValueTuple);
- m_miValueList.Add(miValueResult3);
- }
-
- 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.
-//--
-bool CMICmdCmdStackListArguments::Acknowledge() {
- if (m_bThreadInvalid) {
- // MI print "%s^done,stack-args=[]"
- const CMICmnMIValueList miValueList(true);
- const CMICmnMIValueResult miValueResult("stack-args", miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print
- // "%s^done,stack-args=[frame={level=\"0\",args=[%s]},frame={level=\"1\",args=[%s]}]"
- const CMICmnMIValueResult miValueResult4("stack-args", m_miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult4);
- 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.
-//--
-CMICmdBase *CMICmdCmdStackListArguments::CreateSelf() {
- return new CMICmdCmdStackListArguments();
-}
-
-
-//++
-// Details: CMICmdCmdStackListLocals constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListLocals::CMICmdCmdStackListLocals()
- : m_bThreadInvalid(false), m_miValueList(true),
- m_constStrArgPrintValues("print-values") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-locals";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListLocals::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdStackListLocals destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListLocals::~CMICmdCmdStackListLocals() {}
-
-//++
-// 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 CMICmdCmdStackListLocals::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
- return 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.
-//--
-bool CMICmdCmdStackListLocals::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound()) {
- if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(
- nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- }
-
- MIuint64 nFrame = UINT64_MAX;
- if (pArgFrame->GetFound()) {
- if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
- static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
- pArgPrintValues->GetValue());
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX)
- ? sbProcess.GetThreadByIndexID(nThreadId)
- : sbProcess.GetSelectedThread();
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if ((eStopReason == lldb::eStopReasonNone) ||
- (eStopReason == lldb::eStopReasonInvalid)) {
- m_bThreadInvalid = true;
- return MIstatus::success;
- }
-
- lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame)
- : thread.GetSelectedFrame();
-
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes = CMICmnLLDBDebugSessionInfo::eVariableType_Locals |
- CMICmnLLDBDebugSessionInfo::eVariableType_InScope;
- if (!rSessionInfo.MIResponseFormVariableInfo(frame, maskVarTypes,
- eVarInfoFormat, miValueList))
- return MIstatus::failure;
-
- m_miValueList = miValueList;
-
- 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.
-//--
-bool CMICmdCmdStackListLocals::Acknowledge() {
- if (m_bThreadInvalid) {
- // MI print "%s^done,locals=[]"
- const CMICmnMIValueList miValueList(true);
- const CMICmnMIValueResult miValueResult("locals", miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print "%s^done,locals=[%s]"
- const CMICmnMIValueResult miValueResult("locals", m_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.
-//--
-CMICmdBase *CMICmdCmdStackListLocals::CreateSelf() {
- return new CMICmdCmdStackListLocals();
-}
-
-
-//++
-// Details: CMICmdCmdStackListVariables constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListVariables::CMICmdCmdStackListVariables()
- : m_bThreadInvalid(false), m_miValueList(true),
- m_constStrArgPrintValues("print-values") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-list-variables";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackListVariables::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdStackListVariables destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackListVariables::~CMICmdCmdStackListVariables() {}
-
-//++
-// 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 CMICmdCmdStackListVariables::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
- return 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.
-//--
-bool CMICmdCmdStackListVariables::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound()) {
- if (!pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(
- nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
- }
-
- MIuint64 nFrame = UINT64_MAX;
- if (pArgFrame->GetFound()) {
- if (!pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
- static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
- pArgPrintValues->GetValue());
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX)
- ? sbProcess.GetThreadByIndexID(nThreadId)
- : sbProcess.GetSelectedThread();
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if ((eStopReason == lldb::eStopReasonNone) ||
- (eStopReason == lldb::eStopReasonInvalid)) {
- m_bThreadInvalid = true;
- return MIstatus::success;
- }
-
- lldb::SBFrame frame = (nFrame != UINT64_MAX) ? thread.GetFrameAtIndex(nFrame)
- : thread.GetSelectedFrame();
-
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes =
- CMICmnLLDBDebugSessionInfo::eVariableType_Arguments |
- CMICmnLLDBDebugSessionInfo::eVariableType_Locals |
- CMICmnLLDBDebugSessionInfo::eVariableType_InScope;
- if (!rSessionInfo.MIResponseFormVariableInfo(
- frame, maskVarTypes, eVarInfoFormat, miValueList, 10, true))
- return MIstatus::failure;
- m_miValueList = miValueList;
-
- 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.
-//--
-bool CMICmdCmdStackListVariables::Acknowledge() {
- if (m_bThreadInvalid) {
- // MI print "%s^done,variables=[]"
- const CMICmnMIValueList miValueList(true);
- const CMICmnMIValueResult miValueResult("variables", miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print "%s^done,variables=[%s]"
- const CMICmnMIValueResult miValueResult("variables", m_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.
-//--
-CMICmdBase *CMICmdCmdStackListVariables::CreateSelf() {
- return new CMICmdCmdStackListVariables();
-}
-
-
-//++
-// Details: CMICmdCmdStackSelectFrame constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackSelectFrame::CMICmdCmdStackSelectFrame()
- : m_bFrameInvalid(false), m_constStrArgFrameId("frame_id") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "stack-select-frame";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdStackSelectFrame::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdStackSelectFrame destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdStackSelectFrame::~CMICmdCmdStackSelectFrame() {}
-
-//++
-// 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdStackSelectFrame::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameId, true, false));
- return 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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdStackSelectFrame::Execute() {
- CMICMDBASE_GETOPTION(pArgFrame, Number, m_constStrArgFrameId);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBThread sbThread = rSessionInfo.GetProcess().GetSelectedThread();
-
- const MIuint nFrameId = pArgFrame->GetValue();
- m_bFrameInvalid = (nFrameId >= sbThread.GetNumFrames());
- if (m_bFrameInvalid)
- return MIstatus::success;
-
- lldb::SBFrame sbFrame = sbThread.SetSelectedFrame(nFrameId);
- m_bFrameInvalid = !sbFrame.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 - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmdCmdStackSelectFrame::Acknowledge() {
- if (m_bFrameInvalid) {
- // MI print "%s^error,msg=\"Command '-stack-select-frame'. Frame ID
- // invalid\""
- const CMICmnMIValueConst miValueConst(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_FRAME_INVALID), m_cmdData.strMiCmd.c_str()));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- 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.
-//--
-CMICmdBase *CMICmdCmdStackSelectFrame::CreateSelf() {
- return new CMICmdCmdStackSelectFrame();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdStack.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdStack.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdStack.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdStack.h (removed)
@@ -1,256 +0,0 @@
-//===-- MICmdCmdStack.h -----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdStackInfoDepth interface.
-// CMICmdCmdStackInfoFrame interface.
-// CMICmdCmdStackListFrames interface.
-// CMICmdCmdStackListArguments interface.
-// CMICmdCmdStackListLocals interface.
-// CMICmdCmdStackSelectFrame interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "stack-info-depth".
-//--
-class CMICmdCmdStackInfoDepth : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackInfoDepth();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackInfoDepth() override;
-
- // Attributes:
-private:
- MIuint m_nThreadFrames;
- const CMIUtilString m_constStrArgMaxDepth; // Not handled by *this command
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "stack-info-frame".
-//--
-class CMICmdCmdStackInfoFrame : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackInfoFrame();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackInfoFrame() override;
-
- // Attributes:
-private:
- CMICmnMIValueTuple m_miValueTuple;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "stack-list-frames".
-//--
-class CMICmdCmdStackListFrames : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackListFrames();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListFrames() override;
-
- // Typedefs:
-private:
- typedef std::vector<CMICmnMIValueResult> VecMIValueResult_t;
-
- // Attributes:
-private:
- MIuint m_nThreadFrames;
- VecMIValueResult_t m_vecMIValueResult;
- const CMIUtilString m_constStrArgFrameLow;
- const CMIUtilString m_constStrArgFrameHigh;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "stack-list-arguments".
-//--
-class CMICmdCmdStackListArguments : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackListArguments();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListArguments() override;
-
- // Attributes:
-private:
- bool m_bThreadInvalid; // True = yes invalid thread, false = thread object
- // valid
- CMICmnMIValueList m_miValueList;
- const CMIUtilString m_constStrArgPrintValues;
- const CMIUtilString m_constStrArgFrameLow;
- const CMIUtilString m_constStrArgFrameHigh;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "stack-list-locals".
-//--
-class CMICmdCmdStackListLocals : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackListLocals();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListLocals() override;
-
- // Attributes:
-private:
- bool m_bThreadInvalid; // True = yes invalid thread, false = thread object
- // valid
- CMICmnMIValueList m_miValueList;
- const CMIUtilString m_constStrArgPrintValues;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "stack-list-variables".
-//--
-class CMICmdCmdStackListVariables : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackListVariables();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackListVariables() override;
-
- // Attributes
-private:
- bool m_bThreadInvalid; // True = yes invalid thread, false = thread object
- // valid
- CMICmnMIValueList m_miValueList;
- const CMIUtilString m_constStrArgPrintValues;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "stack-select-frame".
-//--
-class CMICmdCmdStackSelectFrame : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdStackSelectFrame();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdStackSelectFrame() override;
-
- // Attributes:
-private:
- bool m_bFrameInvalid; // True = yes invalid frame, false = ok
- const CMIUtilString m_constStrArgFrameId;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.cpp (removed)
@@ -1,117 +0,0 @@
-//===-- MICmdCmdSupportInfo.cpp ---------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdSupportInfoMiCmdQuery implementation.
-
-// In-house headers:
-#include "MICmdCmdSupportInfo.h"
-#include "MICmdArgValString.h"
-#include "MICmdFactory.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-// Details: CMICmdCmdSupportInfoMiCmdQuery constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSupportInfoMiCmdQuery::CMICmdCmdSupportInfoMiCmdQuery()
- : m_bCmdFound(false), m_constStrArgCmdName("cmd_name") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "info-gdb-mi-command";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdSupportInfoMiCmdQuery::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdSupportInfoMiCmdQuery destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSupportInfoMiCmdQuery::~CMICmdCmdSupportInfoMiCmdQuery() {}
-
-//++
-// 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 CMICmdCmdSupportInfoMiCmdQuery::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgCmdName, true, true));
- return 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.
-//--
-bool CMICmdCmdSupportInfoMiCmdQuery::Execute() {
- CMICMDBASE_GETOPTION(pArgNamedCmdName, String, m_constStrArgCmdName);
- const CMIUtilString &rCmdToQuery(pArgNamedCmdName->GetValue());
- const MIuint nLen = rCmdToQuery.length();
- const CMICmdFactory &rCmdFactory = CMICmdFactory::Instance();
- if ((nLen > 1) && (rCmdToQuery[0] == '-'))
- m_bCmdFound = rCmdFactory.CmdExist(rCmdToQuery.substr(1, nLen - 1).c_str());
- else
- m_bCmdFound = rCmdFactory.CmdExist(rCmdToQuery);
-
- 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.
-//--
-bool CMICmdCmdSupportInfoMiCmdQuery::Acknowledge() {
- const CMICmnMIValueConst miValueConst(m_bCmdFound ? "true" : "false");
- const CMICmnMIValueResult miValueResult("exists", miValueConst);
- const CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueResult miValueResult2("command", miValueTuple);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult2);
- 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.
-//--
-CMICmdBase *CMICmdCmdSupportInfoMiCmdQuery::CreateSelf() {
- return new CMICmdCmdSupportInfoMiCmdQuery();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportInfo.h (removed)
@@ -1,58 +0,0 @@
-//===-- MICmdCmdSupportInfo.h -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdSupportInfoMiCmdQuery interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "info-gdb-mi-command".
-// This command does not follow the MI documentation exactly.
-//--
-class CMICmdCmdSupportInfoMiCmdQuery : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdSupportInfoMiCmdQuery();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdSupportInfoMiCmdQuery() override;
-
- // Attributes:
-private:
- bool m_bCmdFound; // True = query for the command in command factory found,
- // false = not found not recognised
- const CMIUtilString m_constStrArgCmdName;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.cpp (removed)
@@ -1,96 +0,0 @@
-//===-- MICmdCmdSupportList.cpp ---------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdSupportListFeatures implementation.
-
-// In-house headers:
-#include "MICmdCmdSupportList.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIValueList.h"
-
-//++
-// Details: CMICmdCmdSupportListFeatures constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSupportListFeatures::CMICmdCmdSupportListFeatures() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "list-features";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdSupportListFeatures::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdSupportListFeatures destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSupportListFeatures::~CMICmdCmdSupportListFeatures() {}
-
-//++
-// 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 CMICmdCmdSupportListFeatures::Execute() {
- // 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.
-//--
-bool CMICmdCmdSupportListFeatures::Acknowledge() {
- // Declare supported features here
- const CMICmnMIValueConst miValueConst1("data-read-memory-bytes");
- const CMICmnMIValueConst miValueConst2("exec-run-start-option");
- // Some features may depend on host and/or target, decide what to add below
- CMICmnMIValueList miValueList(true);
- miValueList.Add(miValueConst1);
- miValueList.Add(miValueConst2);
- const CMICmnMIValueResult miValueResult("features", 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.
-//--
-CMICmdBase *CMICmdCmdSupportListFeatures::CreateSelf() {
- return new CMICmdCmdSupportListFeatures();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSupportList.h (removed)
@@ -1,51 +0,0 @@
-//===-- MICmdCmdSupportList.h -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdSupportListFeatures interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "list-features".
-// This command does not follow the MI documentation exactly.
-//--
-class CMICmdCmdSupportListFeatures : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdSupportListFeatures();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdSupportListFeatures() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.cpp (removed)
@@ -1,177 +0,0 @@
-//===-- MICmdCmdSymbol.cpp --------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdSymbolListLines implementation.
-
-// Third Party Headers:
-#include "llvm/ADT/Twine.h"
-#include "lldb/API/SBAddress.h"
-#include "lldb/API/SBLineEntry.h"
-#include "lldb/API/SBFileSpec.h"
-#include "lldb/API/SBCompileUnit.h"
-#include "lldb/API/SBSymbolContext.h"
-#include "lldb/API/SBSymbolContextList.h"
-
-// In-house headers:
-#include "MICmdArgValFile.h"
-#include "MICmdCmdSymbol.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueTuple.h"
-#include "MICmnMIValueResult.h"
-
-namespace {
-const CMICmnMIValueTuple
-CreateMITuplePCLine(const uint32_t addr, const uint32_t line_number) {
- const CMICmnMIValueConst miValueConstAddr("0x" + llvm::Twine::utohexstr(addr).str());
- const CMICmnMIValueConst miValueConstLine(llvm::Twine(line_number).str());
- const CMICmnMIValueResult miValueResultAddr("pc", miValueConstAddr);
- const CMICmnMIValueResult miValueResultLine("line", miValueConstLine);
- CMICmnMIValueTuple miValueTuple(miValueResultAddr);
- miValueTuple.Add(miValueResultLine);
- return miValueTuple;
-}
-} // namespace
-
-using namespace lldb; // For operator==(const SBAddress &, const SBAddress &).
-
-//++
-// Details: CMICmdCmdSymbolListLines constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSymbolListLines::CMICmdCmdSymbolListLines()
- : m_resultList(false), m_constStrArgNameFile("file") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "symbol-list-lines";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdSymbolListLines::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdSymbolListLines destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdSymbolListLines::~CMICmdCmdSymbolListLines() {}
-
-//++
-// 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 CMICmdCmdSymbolListLines::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValFile(m_constStrArgNameFile, true, true));
- return 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.
-// Synopsis: -symbol-list-lines file
-// Ref:
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Symbol-Query.html#GDB_002fMI-Symbol-Query
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdSymbolListLines::Execute() {
- CMICMDBASE_GETOPTION(pArgFile, File, m_constStrArgNameFile);
-
- const auto &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
- if (rSessionInfo.GetTarget() == rSessionInfo.GetDebugger().GetDummyTarget()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- const lldb::SBFileSpec source_file_spec(pArgFile->GetValue().c_str(), true);
- const char *source_file_name = source_file_spec.GetFilename();
- const char *source_file_directory = source_file_spec.GetDirectory();
- const bool has_path = source_file_directory;
-
- lldb::SBSymbolContextList sc_cu_list =
- CMICmnLLDBDebugSessionInfo::Instance().GetTarget().FindCompileUnits(
- source_file_spec);
-
- bool found_something = false;
- for (uint32_t i = 0, e = sc_cu_list.GetSize(); i < e; ++i) {
- const lldb::SBCompileUnit cu =
- sc_cu_list.GetContextAtIndex(i).GetCompileUnit();
- for (uint32_t j = 0, e = cu.GetNumLineEntries(); j < e; ++j) {
- const lldb::SBLineEntry line = cu.GetLineEntryAtIndex(j);
- const lldb::SBFileSpec line_spec = line.GetFileSpec();
- if (line_spec.GetFilename() == source_file_name) {
- if (has_path && (line_spec.GetDirectory() != source_file_directory))
- continue;
- // We don't need a line with start address equals to end one,
- // so just skip it.
- const lldb::SBAddress line_start_address = line.GetStartAddress();
- const lldb::SBAddress line_end_address = line.GetEndAddress();
- if (line_start_address == line_end_address)
- continue;
- // We have a matching line.
- found_something = true;
- m_resultList.Add(CreateMITuplePCLine(
- line_start_address.GetFileAddress(),
- line.GetLine()));
- }
- }
- }
- if (!found_something) {
- SetError(MIRSRC(IDS_UTIL_FILE_ERR_INVALID_PATHNAME));
- return MIstatus::failure;
- }
- 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.
-//--
-bool CMICmdCmdSymbolListLines::Acknowledge() {
- // MI print "%s^done,lines=[{pc=\"%d\",line=\"%d\"}...]"
- const CMICmnMIValueResult miValueResult("lines", m_resultList);
- m_miResultRecord = CMICmnMIResultRecord(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- 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.
-//--
-CMICmdBase *CMICmdCmdSymbolListLines::CreateSelf() {
- return new CMICmdCmdSymbolListLines();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdSymbol.h (removed)
@@ -1,59 +0,0 @@
-//===-- MICmdCmdSymbol.h ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdSymbolListLines interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// Third party headers:
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "symbol-list-lines".
-//--
-class CMICmdCmdSymbolListLines : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdSymbolListLines();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdSymbolListLines() override;
-
- // Attributes:
-private:
- CMICmnMIValueList m_resultList;
- const CMIUtilString m_constStrArgNameFile;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTarget.cpp (removed)
@@ -1,447 +0,0 @@
-//===-- MICmdCmdTarget.cpp --------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdTargetSelect implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBError.h"
-
-// In-house headers:
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValString.h"
-#include "MICmdCmdTarget.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-//++
-// Details: CMICmdCmdTargetSelect constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTargetSelect::CMICmdCmdTargetSelect()
- : m_constStrArgNamedType("type"),
- m_constStrArgNamedParameters("parameters") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "target-select";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTargetSelect::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdTargetSelect destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTargetSelect::~CMICmdCmdTargetSelect() = default;
-
-//++
-// 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 CMICmdCmdTargetSelect::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedType, true, true));
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgNamedParameters, true, true));
- return 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.
-// Synopsis: -target-select type parameters ...
-// Ref:
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdTargetSelect::Execute() {
- CMICMDBASE_GETOPTION(pArgType, String, m_constStrArgNamedType);
- CMICMDBASE_GETOPTION(pArgParameters, String, m_constStrArgNamedParameters);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBTarget target = rSessionInfo.GetTarget();
-
- // Check we have a valid target.
- // Note: target created via 'file-exec-and-symbols' command.
- if (!target.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- // Verify that we are executing remotely.
- const CMIUtilString &rRemoteType(pArgType->GetValue());
- if (rRemoteType != "remote") {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_TYPE),
- m_cmdData.strMiCmd.c_str(),
- rRemoteType.c_str()));
- return MIstatus::failure;
- }
-
- // Create a URL pointing to the remote gdb stub.
- const CMIUtilString strUrl =
- CMIUtilString::Format("connect://%s", pArgParameters->GetValue().c_str());
-
- lldb::SBError error;
- // Ask LLDB to connect to the target port.
- const char *pPlugin("gdb-remote");
- lldb::SBProcess process = target.ConnectRemote(
- rSessionInfo.GetListener(), strUrl.c_str(), pPlugin, error);
-
- // Verify that we have managed to connect successfully.
- if (!process.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_PLUGIN),
- m_cmdData.strMiCmd.c_str(),
- error.GetCString()));
- return MIstatus::failure;
- }
-
- // Set the environment path if we were given one.
- CMIUtilString strWkDir;
- if (rSessionInfo.SharedDataRetrieve<CMIUtilString>(
- rSessionInfo.m_constStrSharedDataKeyWkDir, strWkDir)) {
- lldb::SBDebugger &rDbgr = rSessionInfo.GetDebugger();
- if (!rDbgr.SetCurrentPlatformSDKRoot(strWkDir.c_str())) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_FNFAILED),
- m_cmdData.strMiCmd.c_str(),
- "target-select"));
- return MIstatus::failure;
- }
- }
-
- // Set the shared object path if we were given one.
- CMIUtilString strSolibPath;
- if (rSessionInfo.SharedDataRetrieve<CMIUtilString>(
- rSessionInfo.m_constStrSharedDataSolibPath, strSolibPath))
- target.AppendImageSearchPath(".", strSolibPath.c_str(), error);
-
- return HandleSBError(error);
-}
-
-//++
-// 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 CMICmdCmdTargetSelect::Acknowledge() {
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Connected);
- m_miResultRecord = miRecordResult;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- // 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-started,id="i1"'
- m_bHasResultRecordExtra = true;
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("id", miValueConst2);
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst(strPid);
- const CMICmnMIValueResult miValueResult("pid", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2);
- miOutOfBand.Add(miValueResult);
- 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.
-//--
-CMICmdBase *CMICmdCmdTargetSelect::CreateSelf() {
- return new CMICmdCmdTargetSelect();
-}
-
-//++
-// Details: CMICmdCmdTargetAttach constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTargetAttach::CMICmdCmdTargetAttach()
- : m_constStrArgPid("pid"), m_constStrArgNamedFile("n"),
- m_constStrArgWaitFor("waitfor") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "target-attach";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTargetAttach::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdTargetAttach destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTargetAttach::~CMICmdCmdTargetAttach() {}
-
-//++
-// 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 CMICmdCmdTargetAttach::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgPid, false, true));
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgNamedFile, false, true,
- CMICmdArgValListBase::eArgValType_String, 1));
- m_setCmdArgs.Add(
- new CMICmdArgValOptionLong(m_constStrArgWaitFor, false, true));
- return 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.
-// Synopsis: -target-attach file
-// Ref:
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdTargetAttach::Execute() {
- CMICMDBASE_GETOPTION(pArgPid, Number, m_constStrArgPid);
- CMICMDBASE_GETOPTION(pArgFile, OptionShort, m_constStrArgNamedFile);
- CMICMDBASE_GETOPTION(pArgWaitFor, OptionLong, m_constStrArgWaitFor);
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- // If the current target is invalid, create one
- lldb::SBTarget target = rSessionInfo.GetTarget();
- if (!target.IsValid()) {
- target = rSessionInfo.GetDebugger().CreateTarget(nullptr);
- if (!target.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_TARGET_CURRENT),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
- }
-
- lldb::SBError error;
- lldb::SBListener listener;
- if (pArgPid->GetFound() && pArgPid->GetValid()) {
- lldb::pid_t pid;
- pid = pArgPid->GetValue();
- target.AttachToProcessWithID(listener, pid, error);
- } else if (pArgFile->GetFound() && pArgFile->GetValid()) {
- bool bWaitFor = (pArgWaitFor->GetFound());
- CMIUtilString file;
- pArgFile->GetExpectedOption<CMICmdArgValString>(file);
- target.AttachToProcessWithName(listener, file.c_str(), bWaitFor, error);
- } else {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_ATTACH_BAD_ARGS),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBStream errMsg;
- if (error.Fail()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_ATTACH_FAILED),
- m_cmdData.strMiCmd.c_str(),
- errMsg.GetData()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdTargetAttach::Acknowledge() {
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done);
- m_miResultRecord = miRecordResult;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::pid_t pid = rSessionInfo.GetProcess().GetProcessID();
- // 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-started,id="i1"'
- m_bHasResultRecordExtra = true;
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("id", miValueConst2);
- const CMIUtilString strPid(CMIUtilString::Format("%lld", pid));
- const CMICmnMIValueConst miValueConst(strPid);
- const CMICmnMIValueResult miValueResult("pid", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted, miValueResult2);
- miOutOfBand.Add(miValueResult);
- 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.
-//--
-CMICmdBase *CMICmdCmdTargetAttach::CreateSelf() {
- return new CMICmdCmdTargetAttach();
-}
-
-//++
-// Details: CMICmdCmdTargetDetach constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTargetDetach::CMICmdCmdTargetDetach() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "target-detach";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTargetDetach::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdTargetDetach destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTargetDetach::~CMICmdCmdTargetDetach() {}
-
-//++
-// 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 CMICmdCmdTargetDetach::ParseArgs() { return MIstatus::success; }
-
-//++
-// 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.
-// Synopsis: -target-attach file
-// Ref:
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdTargetDetach::Execute() {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- lldb::SBProcess process = rSessionInfo.GetProcess();
-
- if (!process.IsValid()) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_INVALID_PROCESS),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- process.Detach();
-
- 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.
-//--
-bool CMICmdCmdTargetDetach::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdTargetDetach::CreateSelf() {
- return new CMICmdCmdTargetDetach();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTarget.h (removed)
@@ -1,117 +0,0 @@
-//===-- MICmdCmdTarget.h ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdTargetSelect interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "target-select".
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
-//--
-class CMICmdCmdTargetSelect : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdTargetSelect();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTargetSelect() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgNamedType;
- const CMIUtilString m_constStrArgNamedParameters;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "target-attach".
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
-//--
-class CMICmdCmdTargetAttach : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdTargetAttach();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTargetAttach() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgPid;
- const CMIUtilString m_constStrArgNamedFile;
- const CMIUtilString m_constStrArgWaitFor;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "target-attach".
-// http://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Target-Manipulation.html#GDB_002fMI-Target-Manipulation
-//--
-class CMICmdCmdTargetDetach : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdTargetDetach();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTargetDetach() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdThread.cpp (removed)
@@ -1,211 +0,0 @@
-//===-- MICmdCmdThread.cpp --------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdThreadInfo implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBBreakpointLocation.h"
-#include "lldb/API/SBThread.h"
-
-// In-house headers:
-#include "MICmdArgValNumber.h"
-#include "MICmdCmdThread.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-//++
-// Details: CMICmdCmdThreadInfo constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdThreadInfo::CMICmdCmdThreadInfo()
- : m_bSingleThread(false), m_bThreadInvalid(true),
- m_constStrArgNamedThreadId("thread-id"), m_bHasCurrentThread(false) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "thread-info";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdThreadInfo::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdThreadInfo destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdThreadInfo::~CMICmdCmdThreadInfo() { 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.
-//--
-bool CMICmdCmdThreadInfo::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValNumber(m_constStrArgNamedThreadId, false, true));
- return 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.
-//--
-bool CMICmdCmdThreadInfo::Execute() {
- CMICMDBASE_GETOPTION(pArgThreadId, Number, m_constStrArgNamedThreadId);
- MIuint nThreadId = 0;
- if (pArgThreadId->GetFound() && pArgThreadId->GetValid()) {
- m_bSingleThread = true;
- nThreadId = static_cast<MIuint>(pArgThreadId->GetValue());
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
-
- if (m_bSingleThread) {
- thread = sbProcess.GetThreadByIndexID(nThreadId);
- m_bThreadInvalid = !thread.IsValid();
- if (m_bThreadInvalid)
- return MIstatus::success;
-
- CMICmnMIValueTuple miTuple;
- if (!rSessionInfo.MIResponseFormThreadInfo(
- m_cmdData, thread,
- CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_AllFrames, miTuple))
- return MIstatus::failure;
-
- m_miValueTupleThread = miTuple;
-
- return MIstatus::success;
- }
-
- // Multiple threads
- m_vecMIValueTuple.clear();
- const MIuint nThreads = sbProcess.GetNumThreads();
- for (MIuint i = 0; i < nThreads; i++) {
- lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
- if (thread.IsValid()) {
- CMICmnMIValueTuple miTuple;
- if (!rSessionInfo.MIResponseFormThreadInfo(
- m_cmdData, thread,
- CMICmnLLDBDebugSessionInfo::eThreadInfoFormat_AllFrames, miTuple))
- return MIstatus::failure;
-
- m_vecMIValueTuple.push_back(miTuple);
- }
- }
-
- // -thread-info with multiple threads ends with the current thread id if any
- if (thread.IsValid()) {
- const CMIUtilString strId(CMIUtilString::Format("%d", thread.GetIndexID()));
- CMICmnMIValueConst miValueCurrThreadId(strId);
- m_miValueCurrThreadId = miValueCurrThreadId;
- m_bHasCurrentThread = true;
- }
-
- 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.
-//--
-bool CMICmdCmdThreadInfo::Acknowledge() {
- if (m_bSingleThread) {
- if (m_bThreadInvalid) {
- const CMICmnMIValueConst miValueConst("invalid thread id");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- // MI print
- // "%s^done,threads=[{id=\"%d\",target-id=\"%s\",frame={},state=\"%s\"}]
- const CMICmnMIValueList miValueList(m_miValueTupleThread);
- const CMICmnMIValueResult miValueResult("threads", miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- 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;
- }
-
- CMICmnMIValueResult miValueResult("threads", miValueList);
- if (m_bHasCurrentThread) {
- CMIUtilString strCurrThreadId = "current-thread-id";
- miValueResult.Add(strCurrThreadId, m_miValueCurrThreadId);
- }
- 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.
-//--
-CMICmdBase *CMICmdCmdThreadInfo::CreateSelf() {
- return new CMICmdCmdThreadInfo();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdThread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdThread.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdThread.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdThread.h (removed)
@@ -1,69 +0,0 @@
-//===-- MICmdCmdThread.h ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdThreadInfo interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "thread-info".
-//--
-class CMICmdCmdThreadInfo : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdThreadInfo();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdThreadInfo() override;
-
- // Typedefs:
-private:
- typedef std::vector<CMICmnMIValueTuple> VecMIValueTuple_t;
-
- // Attributes:
-private:
- CMICmnMIValueTuple m_miValueTupleThread;
- bool m_bSingleThread; // True = yes single thread, false = multiple threads
- bool m_bThreadInvalid; // True = invalid, false = ok
- VecMIValueTuple_t m_vecMIValueTuple;
- const CMIUtilString m_constStrArgNamedThreadId;
-
- // mi value of current-thread-id if multiple threads are requested
- bool m_bHasCurrentThread;
- CMICmnMIValue m_miValueCurrThreadId;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTrace.cpp (removed)
@@ -1,88 +0,0 @@
-//===-- MICmdCmdTrace.cpp ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdTraceStatus implementation.
-
-// In-house headers:
-#include "MICmdCmdTrace.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-//++
-// Details: CMICmdCmdTraceStatus constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTraceStatus::CMICmdCmdTraceStatus() {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "trace-status";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdTraceStatus::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdTraceStatus destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdTraceStatus::~CMICmdCmdTraceStatus() {}
-
-//++
-// 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 CMICmdCmdTraceStatus::Execute() {
- // 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.
-//--
-bool CMICmdCmdTraceStatus::Acknowledge() {
- const CMICmnMIValueConst miValueConst(MIRSRC(IDS_CMD_ERR_NOT_IMPLEMENTED));
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdTraceStatus::CreateSelf() {
- return new CMICmdCmdTraceStatus();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdTrace.h (removed)
@@ -1,50 +0,0 @@
-//===-- MICmdCmdTrace.h -----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdTraceStatus interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "trace-status".
-//--
-class CMICmdCmdTraceStatus : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdTraceStatus();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdTraceStatus() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdVar.cpp (removed)
@@ -1,1460 +0,0 @@
-//===-- MICmdCmdVar.cpp -----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdVarCreate implementation.
-// CMICmdCmdVarUpdate implementation.
-// CMICmdCmdVarDelete implementation.
-// CMICmdCmdVarAssign implementation.
-// CMICmdCmdVarSetFormat implementation.
-// CMICmdCmdVarListChildren implementation.
-// CMICmdCmdVarEvaluateExpression implementation.
-// CMICmdCmdVarInfoPathExpression implementation.
-// CMICmdCmdVarShowAttributes implementation.
-
-// Third Party Headers:
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBThread.h"
-#include "lldb/API/SBType.h"
-
-// In-house headers:
-#include "MICmdArgValListOfN.h"
-#include "MICmdArgValNumber.h"
-#include "MICmdArgValOptionLong.h"
-#include "MICmdArgValOptionShort.h"
-#include "MICmdArgValPrintValues.h"
-#include "MICmdArgValString.h"
-#include "MICmdArgValThreadGrp.h"
-#include "MICmdCmdVar.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBProxySBValue.h"
-#include "MICmnLLDBUtilSBValue.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-
-#include <algorithm>
-
-//++
-// Details: CMICmdCmdVarCreate constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarCreate::CMICmdCmdVarCreate()
- : m_nChildren(0), m_nThreadId(0), m_strType("??"), m_bValid(false),
- m_strValue("??"), m_constStrArgName("name"),
- m_constStrArgFrameAddr("frame-addr"),
- m_constStrArgExpression("expression") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-create";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarCreate::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarCreate destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarCreate::~CMICmdCmdVarCreate() {}
-
-//++
-// 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 CMICmdCmdVarCreate::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, false, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFrameAddr, false, true));
- m_setCmdArgs.Add(
- new CMICmdArgValString(m_constStrArgExpression, true, true, true, true));
- return 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.
-//--
-bool CMICmdCmdVarCreate::Execute() {
- CMICMDBASE_GETOPTION(pArgThread, OptionLong, m_constStrArgThread);
- CMICMDBASE_GETOPTION(pArgFrame, OptionLong, m_constStrArgFrame);
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgFrameAddr, String, m_constStrArgFrameAddr);
- CMICMDBASE_GETOPTION(pArgExpression, String, m_constStrArgExpression);
-
- // Retrieve the --thread option's thread ID (only 1)
- MIuint64 nThreadId = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgThread->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nThreadId)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgThread.c_str()));
- return MIstatus::failure;
- }
-
- // Retrieve the --frame option's number
- MIuint64 nFrame = UINT64_MAX;
- if (pArgThread->GetFound() &&
- !pArgFrame->GetExpectedOption<CMICmdArgValNumber, MIuint64>(nFrame)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
-
- const CMICmdArgValOptionLong::VecArgObjPtr_t &rVecFrameId(
- pArgFrame->GetExpectedOptions());
- CMICmdArgValOptionLong::VecArgObjPtr_t::const_iterator it2 =
- rVecFrameId.begin();
- if (it2 != rVecFrameId.end()) {
- const CMICmdArgValNumber *pOption = static_cast<CMICmdArgValNumber *>(*it2);
- nFrame = pOption->GetValue();
- }
-
- m_strVarName = "<unnamedvariable>";
- if (pArgName->GetFound()) {
- const CMIUtilString &rArg = pArgName->GetValue();
- const bool bAutoName = (rArg == "-");
- if (bAutoName) {
- m_strVarName = CMIUtilString::Format(
- "var%u", CMICmnLLDBDebugSessionInfoVarObj::VarObjIdGet());
- CMICmnLLDBDebugSessionInfoVarObj::VarObjIdInc();
- } else
- m_strVarName = rArg;
- }
-
- bool bCurrentFrame = false;
- if (pArgFrameAddr->GetFound()) {
- const CMIUtilString &rStrFrameAddr(pArgFrameAddr->GetValue());
- bCurrentFrame = CMIUtilString::Compare(rStrFrameAddr, "*");
- if (!bCurrentFrame && (nFrame == UINT64_MAX)) {
- // FIXME: *addr isn't implemented. Exit with error if --thread isn't
- // specified.
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
- m_cmdData.strMiCmd.c_str(),
- m_constStrArgFrame.c_str()));
- return MIstatus::failure;
- }
- }
-
- const CMIUtilString &rStrExpression(pArgExpression->GetValue());
- m_strExpression = rStrExpression;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- lldb::SBThread thread = (nThreadId != UINT64_MAX)
- ? sbProcess.GetThreadByIndexID(nThreadId)
- : sbProcess.GetSelectedThread();
- m_nThreadId = thread.GetIndexID();
- lldb::SBFrame frame = bCurrentFrame ? thread.GetSelectedFrame()
- : thread.GetFrameAtIndex(nFrame);
- lldb::SBValue value;
-
- if (rStrExpression[0] == '$') {
- const CMIUtilString rStrRegister(rStrExpression.substr(1));
- value = frame.FindRegister(rStrRegister.c_str());
- } else {
- const bool bArgs = true;
- const bool bLocals = true;
- const bool bStatics = true;
- const bool bInScopeOnly = true;
- const lldb::SBValueList valueList =
- frame.GetVariables(bArgs, bLocals, bStatics, bInScopeOnly);
- value = valueList.GetFirstValueByName(rStrExpression.c_str());
- }
-
- if (!value.IsValid())
- value = frame.EvaluateExpression(rStrExpression.c_str());
-
- if (value.IsValid() && value.GetError().Success()) {
- CompleteSBValue(value);
- m_bValid = true;
- m_nChildren = value.GetNumChildren();
- m_strType = CMICmnLLDBUtilSBValue(value).GetTypeNameDisplay();
-
- // This gets added to CMICmnLLDBDebugSessionInfoVarObj static container of
- // varObjs
- CMICmnLLDBDebugSessionInfoVarObj varObj(rStrExpression, m_strVarName,
- value);
- m_strValue = varObj.GetValueFormatted();
- } else {
- m_strValue = value.GetError().GetCString();
- }
-
- 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.
-//--
-bool CMICmdCmdVarCreate::Acknowledge() {
- if (m_bValid) {
- // MI print
- // "%s^done,name=\"%s\",numchild=\"%d\",value=\"%s\",type=\"%s\",thread-id=\"%llu\",has_more=\"%u\""
- const CMICmnMIValueConst miValueConst(m_strVarName);
- CMICmnMIValueResult miValueResultAll("name", miValueConst);
- const CMIUtilString strNumChild(CMIUtilString::Format("%d", m_nChildren));
- const CMICmnMIValueConst miValueConst2(strNumChild);
- miValueResultAll.Add("numchild", miValueConst2);
- const CMICmnMIValueConst miValueConst3(m_strValue);
- miValueResultAll.Add("value", miValueConst3);
- const CMICmnMIValueConst miValueConst4(m_strType);
- miValueResultAll.Add("type", miValueConst4);
- const CMIUtilString strThreadId(CMIUtilString::Format("%llu", m_nThreadId));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- miValueResultAll.Add("thread-id", miValueConst5);
- const CMICmnMIValueConst miValueConst6("0");
- miValueResultAll.Add("has_more", miValueConst6);
-
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResultAll);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- CMIUtilString strErrMsg(m_strValue);
- if (m_strValue.empty())
- strErrMsg = CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_VARIABLE_CREATION_FAILED), m_strExpression.c_str());
- const CMICmnMIValueConst miValueConst(
- strErrMsg.Escape(true /* vbEscapeQuotes */));
- CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdVarCreate::CreateSelf() {
- return new CMICmdCmdVarCreate();
-}
-
-//++
-// Details: Complete SBValue object and its children to get
-// SBValue::GetValueDidChange
-// work.
-// Type: Method.
-// Args: vrwValue - (R) Value to update.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-void CMICmdCmdVarCreate::CompleteSBValue(lldb::SBValue &vrwValue) {
- // Force a value to update
- vrwValue.GetValueDidChange();
-
- // And update its children
- lldb::SBType valueType = vrwValue.GetType();
- if (!valueType.IsPointerType() && !valueType.IsReferenceType()) {
- const MIuint nChildren = vrwValue.GetNumChildren();
- for (MIuint i = 0; i < nChildren; ++i) {
- lldb::SBValue member = vrwValue.GetChildAtIndex(i);
- if (member.IsValid())
- CompleteSBValue(member);
- }
- }
-}
-
-
-//++
-// Details: CMICmdCmdVarUpdate constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarUpdate::CMICmdCmdVarUpdate()
- : m_constStrArgPrintValues("print-values"), m_constStrArgName("name"),
- m_bValueChanged(false), m_miValueList(true) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-update";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarUpdate::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarUpdate destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarUpdate::~CMICmdCmdVarUpdate() {}
-
-//++
-// 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 CMICmdCmdVarUpdate::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValPrintValues(m_constStrArgPrintValues, false, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return 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.
-//--
-bool CMICmdCmdVarUpdate::Execute() {
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
-
- CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
- CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_NoValues;
- if (pArgPrintValues->GetFound())
- eVarInfoFormat =
- static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
- pArgPrintValues->GetValue());
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBValue &rValue = varObj.GetValue();
- if (!ExamineSBValueForChange(rValue, m_bValueChanged))
- return MIstatus::failure;
-
- if (m_bValueChanged) {
- varObj.UpdateValue();
- const bool bPrintValue(
- (eVarInfoFormat ==
- CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_AllValues) ||
- (eVarInfoFormat ==
- CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_SimpleValues &&
- rValue.GetNumChildren() == 0));
- const CMIUtilString strValue(bPrintValue ? varObj.GetValueFormatted() : "");
- const CMIUtilString strInScope(rValue.IsInScope() ? "true" : "false");
- MIFormResponse(rVarObjName, bPrintValue ? strValue.c_str() : nullptr,
- strInScope);
- }
-
- 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.
-//--
-bool CMICmdCmdVarUpdate::Acknowledge() {
- if (m_bValueChanged) {
- // MI print
- // "%s^done,changelist=[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
- CMICmnMIValueResult miValueResult("changelist", m_miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- } else {
- // MI print "%s^done,changelist=[]"
- const CMICmnMIValueList miValueList(true);
- CMICmnMIValueResult miValueResult6("changelist", miValueList);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult6);
- 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.
-//--
-CMICmdBase *CMICmdCmdVarUpdate::CreateSelf() {
- return new CMICmdCmdVarUpdate();
-}
-
-//++
-// Details: Form the MI response for multiple variables.
-// Type: Method.
-// Args: vrStrVarName - (R) Session var object's name.
-// vpValue - (R) Text version of the value held in the
-// variable.
-// vrStrScope - (R) In scope "yes" or "no".
-// Return: None.
-// Throws: None.
-//--
-void CMICmdCmdVarUpdate::MIFormResponse(const CMIUtilString &vrStrVarName,
- const char *const vpValue,
- const CMIUtilString &vrStrScope) {
- // MI print
- // "[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
- const CMICmnMIValueConst miValueConst(vrStrVarName);
- const CMICmnMIValueResult miValueResult("name", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- if (vpValue != nullptr) {
- const CMICmnMIValueConst miValueConst2(vpValue);
- const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- miValueTuple.Add(miValueResult2);
- }
- const CMICmnMIValueConst miValueConst3(vrStrScope);
- const CMICmnMIValueResult miValueResult3("in_scope", miValueConst3);
- miValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("false");
- const CMICmnMIValueResult miValueResult4("type_changed", miValueConst4);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueConst miValueConst5("0");
- const CMICmnMIValueResult miValueResult5("has_more", miValueConst5);
- miValueTuple.Add(miValueResult5);
- m_miValueList.Add(miValueTuple);
-}
-
-//++
-// Details: Determine if the var object was changed.
-// Type: Method.
-// Args: vrVarObj - (R) Session var object to examine.
-// vrwbChanged - (W) True = The var object was changed,
-// False = It was not changed.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdCmdVarUpdate::ExamineSBValueForChange(lldb::SBValue &vrwValue,
- bool &vrwbChanged) {
- if (vrwValue.GetValueDidChange()) {
- vrwbChanged = true;
- return MIstatus::success;
- }
-
- const MIuint nChildren = vrwValue.GetNumChildren();
- for (MIuint i = 0; i < nChildren; ++i) {
- lldb::SBValue member = vrwValue.GetChildAtIndex(i);
- if (!member.IsValid())
- continue;
-
- // skip pointers and references to avoid infinite loop
- if (member.GetType().GetTypeFlags() &
- (lldb::eTypeIsPointer | lldb::eTypeIsReference))
- continue;
-
- // Handle composite types (i.e. struct or arrays)
- if (ExamineSBValueForChange(member, vrwbChanged) && vrwbChanged)
- return MIstatus::success;
- }
- vrwbChanged = false;
- return MIstatus::success;
-}
-
-
-//++
-// Details: CMICmdCmdVarDelete constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarDelete::CMICmdCmdVarDelete() : m_constStrArgName("name") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-delete";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarDelete::CreateSelf;
-}
-
-//++
-// 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 CMICmdCmdVarDelete::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return ParseValidateCmdOptions();
-}
-
-//++
-// Details: CMICmdCmdVarDelete destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarDelete::~CMICmdCmdVarDelete() {}
-
-//++
-// 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 CMICmdCmdVarDelete::Execute() {
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj::VarObjDelete(rVarObjName);
-
- 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.
-//--
-bool CMICmdCmdVarDelete::Acknowledge() {
- 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.
-//--
-CMICmdBase *CMICmdCmdVarDelete::CreateSelf() {
- return new CMICmdCmdVarDelete();
-}
-
-
-//++
-// Details: CMICmdCmdVarAssign constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarAssign::CMICmdCmdVarAssign()
- : m_bOk(true), m_constStrArgName("name"),
- m_constStrArgExpression("expression") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-assign";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarAssign::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarAssign destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarAssign::~CMICmdCmdVarAssign() {}
-
-//++
-// 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 CMICmdCmdVarAssign::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgExpression, true, true));
- return 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.
-//--
-bool CMICmdCmdVarAssign::Execute() {
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgExpression, String, m_constStrArgExpression);
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- const CMIUtilString &rExpression(pArgExpression->GetValue());
-
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
- m_varObjName = rVarObjName;
-
- CMIUtilString strExpression(rExpression.Trim());
- strExpression = strExpression.Trim('"');
- lldb::SBValue &rValue(const_cast<lldb::SBValue &>(varObj.GetValue()));
- m_bOk = rValue.SetValueFromCString(strExpression.c_str());
- if (m_bOk)
- varObj.UpdateValue();
-
- 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.
-//--
-bool CMICmdCmdVarAssign::Acknowledge() {
- if (m_bOk) {
- // MI print "%s^done,value=\"%s\""
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
- const CMICmnMIValueConst miValueConst(varObj.GetValueFormatted());
- const CMICmnMIValueResult miValueResult("value", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst("expression could not be evaluated");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdVarAssign::CreateSelf() {
- return new CMICmdCmdVarAssign();
-}
-
-
-//++
-// Details: CMICmdCmdVarSetFormat constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarSetFormat::CMICmdCmdVarSetFormat()
- : m_constStrArgName("name"), m_constStrArgFormatSpec("format-spec") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-set-format";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarSetFormat::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarSetFormat destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarSetFormat::~CMICmdCmdVarSetFormat() {}
-
-//++
-// 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 CMICmdCmdVarSetFormat::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFormatSpec, true, true));
- return 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.
-//--
-bool CMICmdCmdVarSetFormat::Execute() {
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgFormatSpec, String, m_constStrArgFormatSpec);
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- const CMIUtilString &rExpression(pArgFormatSpec->GetValue());
-
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
- if (!varObj.SetVarFormat(
- CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForString(
- rExpression))) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_ENUM_INVALID),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str(), rExpression.c_str()));
- return MIstatus::failure;
- }
- varObj.UpdateValue();
-
- m_varObjName = rVarObjName;
-
- 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.
-//--
-bool CMICmdCmdVarSetFormat::Acknowledge() {
- // MI print
- // "%s^done,changelist=[{name=\"%s\",value=\"%s\",in_scope=\"%s\",type_changed=\"false\",has_more=\"0\"}]"
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
- const CMICmnMIValueConst miValueConst(m_varObjName);
- const CMICmnMIValueResult miValueResult("name", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueConst miValueConst2(varObj.GetValueFormatted());
- const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- miValueTuple.Add(miValueResult2);
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- const CMICmnMIValueConst miValueConst3(rValue.IsInScope() ? "true" : "false");
- const CMICmnMIValueResult miValueResult3("in_scope", miValueConst3);
- miValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("false");
- const CMICmnMIValueResult miValueResult4("type_changed", miValueConst4);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueConst miValueConst5("0");
- const CMICmnMIValueResult miValueResult5("type_changed", miValueConst5);
- miValueTuple.Add(miValueResult5);
- const CMICmnMIValueList miValueList(miValueTuple);
- const CMICmnMIValueResult miValueResult6("changelist", miValueList);
-
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult6);
- 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.
-//--
-CMICmdBase *CMICmdCmdVarSetFormat::CreateSelf() {
- return new CMICmdCmdVarSetFormat();
-}
-
-
-//++
-// Details: CMICmdCmdVarListChildren constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarListChildren::CMICmdCmdVarListChildren()
- : m_constStrArgPrintValues("print-values"), m_constStrArgName("name"),
- m_constStrArgFrom("from"), m_constStrArgTo("to"), m_bValueValid(false),
- m_nChildren(0), m_miValueList(true), m_bHasMore(false) {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-list-children";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarListChildren::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarListChildren destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarListChildren::~CMICmdCmdVarListChildren() {}
-
-//++
-// 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 CMICmdCmdVarListChildren::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValPrintValues(m_constStrArgPrintValues, false, true));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrom, false, true));
- m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgTo, false, true));
- return 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.
-//--
-bool CMICmdCmdVarListChildren::Execute() {
- CMICMDBASE_GETOPTION(pArgPrintValues, PrintValues, m_constStrArgPrintValues);
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
- CMICMDBASE_GETOPTION(pArgFrom, Number, m_constStrArgFrom);
- CMICMDBASE_GETOPTION(pArgTo, Number, m_constStrArgTo);
-
- CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e eVarInfoFormat =
- CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_NoValues;
- if (pArgPrintValues->GetFound())
- eVarInfoFormat =
- static_cast<CMICmnLLDBDebugSessionInfo::VariableInfoFormat_e>(
- pArgPrintValues->GetValue());
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- MIuint nFrom = 0;
- MIuint nTo = UINT32_MAX;
- if (pArgFrom->GetFound() && pArgTo->GetFound()) {
- nFrom = pArgFrom->GetValue();
- nTo = pArgTo->GetValue();
- } else if (pArgFrom->GetFound() || pArgTo->GetFound()) {
- // Only from or to was specified but both are required
- SetError(
- CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_CHILD_RANGE_INVALID),
- m_cmdData.strMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- m_bValueValid = rValue.IsValid();
- if (!m_bValueValid)
- return MIstatus::success;
-
- const MIuint nChildren = rValue.GetNumChildren();
- m_bHasMore = nTo < nChildren;
- nTo = std::min(nTo, nChildren);
- m_nChildren = nFrom < nTo ? nTo - nFrom : 0;
- for (MIuint i = nFrom; i < nTo; i++) {
- lldb::SBValue member = rValue.GetChildAtIndex(i);
- const CMICmnLLDBUtilSBValue utilValue(member);
- const CMIUtilString strExp = utilValue.GetName();
- const CMIUtilString name(
- strExp.empty() ? CMIUtilString::Format("%s.$%u", rVarObjName.c_str(), i)
- : CMIUtilString::Format("%s.%s", rVarObjName.c_str(),
- strExp.c_str()));
- const MIuint nChildren = member.GetNumChildren();
- const CMIUtilString strThreadId(
- CMIUtilString::Format("%u", member.GetThread().GetIndexID()));
-
- // Varobj gets added to CMICmnLLDBDebugSessionInfoVarObj static container of
- // varObjs
- CMICmnLLDBDebugSessionInfoVarObj var(strExp, name, member, rVarObjName);
-
- // MI print
- // "child={name=\"%s\",exp=\"%s\",numchild=\"%d\",value=\"%s\",type=\"%s\",thread-id=\"%u\",has_more=\"%u\"}"
- const CMICmnMIValueConst miValueConst(name);
- const CMICmnMIValueResult miValueResult("name", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueConst miValueConst2(strExp);
- const CMICmnMIValueResult miValueResult2("exp", miValueConst2);
- miValueTuple.Add(miValueResult2);
- const CMIUtilString strNumChild(CMIUtilString::Format("%u", nChildren));
- const CMICmnMIValueConst miValueConst3(strNumChild);
- const CMICmnMIValueResult miValueResult3("numchild", miValueConst3);
- miValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst5(utilValue.GetTypeNameDisplay());
- const CMICmnMIValueResult miValueResult5("type", miValueConst5);
- miValueTuple.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6(strThreadId);
- const CMICmnMIValueResult miValueResult6("thread-id", miValueConst6);
- miValueTuple.Add(miValueResult6);
- // nChildren == 0 is used to check for simple values
- if (eVarInfoFormat ==
- CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_AllValues ||
- (eVarInfoFormat ==
- CMICmnLLDBDebugSessionInfo::eVariableInfoFormat_SimpleValues &&
- nChildren == 0)) {
- const CMIUtilString strValue(
- CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(
- member, CMICmnLLDBDebugSessionInfoVarObj::eVarFormat_Natural));
- const CMICmnMIValueConst miValueConst7(strValue);
- const CMICmnMIValueResult miValueResult7("value", miValueConst7);
- miValueTuple.Add(miValueResult7);
- }
- const CMICmnMIValueConst miValueConst8("0");
- const CMICmnMIValueResult miValueResult8("has_more", miValueConst8);
- miValueTuple.Add(miValueResult8);
- const CMICmnMIValueResult miValueResult9("child", miValueTuple);
- m_miValueList.Add(miValueResult9);
- }
-
- 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.
-//--
-bool CMICmdCmdVarListChildren::Acknowledge() {
- if (m_bValueValid) {
- // MI print "%s^done,numchild=\"%u\",children=[%s],has_more=\"%d\""
- const CMIUtilString strNumChild(CMIUtilString::Format("%u", m_nChildren));
- const CMICmnMIValueConst miValueConst(strNumChild);
- CMICmnMIValueResult miValueResult("numchild", miValueConst);
- if (m_nChildren != 0)
- miValueResult.Add("children", m_miValueList);
- const CMIUtilString strHasMore(m_bHasMore ? "1" : "0");
- const CMICmnMIValueConst miValueConst2(strHasMore);
- miValueResult.Add("has_more", miValueConst2);
-
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
-
- return MIstatus::success;
- }
-
- // MI print "%s^error,msg=\"variable invalid\""
- const CMICmnMIValueConst miValueConst("variable invalid");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdVarListChildren::CreateSelf() {
- return new CMICmdCmdVarListChildren();
-}
-
-
-//++
-// Details: CMICmdCmdVarEvaluateExpression constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarEvaluateExpression::CMICmdCmdVarEvaluateExpression()
- : m_bValueValid(true), m_constStrArgFormatSpec("-f"),
- m_constStrArgName("name") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-evaluate-expression";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarEvaluateExpression::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarEvaluateExpression destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarEvaluateExpression::~CMICmdCmdVarEvaluateExpression() {}
-
-//++
-// 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 CMICmdCmdVarEvaluateExpression::ParseArgs() {
- m_setCmdArgs.Add(
- new CMICmdArgValOptionShort(m_constStrArgFormatSpec, false, false,
- CMICmdArgValListBase::eArgValType_String, 1));
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return 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.
-//--
-bool CMICmdCmdVarEvaluateExpression::Execute() {
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- m_bValueValid = rValue.IsValid();
- if (!m_bValueValid)
- return MIstatus::success;
-
- m_varObjName = rVarObjName;
- varObj.UpdateValue();
-
- 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.
-//--
-bool CMICmdCmdVarEvaluateExpression::Acknowledge() {
- if (m_bValueValid) {
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(m_varObjName, varObj);
- const CMICmnMIValueConst miValueConst(varObj.GetValueFormatted());
- const CMICmnMIValueResult miValueResult("value", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst("variable invalid");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdVarEvaluateExpression::CreateSelf() {
- return new CMICmdCmdVarEvaluateExpression();
-}
-
-
-//++
-// Details: CMICmdCmdVarInfoPathExpression constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarInfoPathExpression::CMICmdCmdVarInfoPathExpression()
- : m_bValueValid(true), m_constStrArgName("name") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-info-path-expression";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarInfoPathExpression::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarInfoPathExpression destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarInfoPathExpression::~CMICmdCmdVarInfoPathExpression() {}
-
-//++
-// 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 CMICmdCmdVarInfoPathExpression::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return 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.
-//--
-bool CMICmdCmdVarInfoPathExpression::Execute() {
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(varObj.GetValue());
- m_bValueValid = rValue.IsValid();
- if (!m_bValueValid)
- return MIstatus::success;
-
- lldb::SBStream stream;
- if (!rValue.GetExpressionPath(stream, true)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_EXPRESSIONPATH),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- const char *pPathExpression = stream.GetData();
- if (pPathExpression == nullptr) {
- // Build expression from what we do know
- m_strPathExpression = varObj.GetNameReal();
- return MIstatus::success;
- }
-
- // Has LLDB returned a var signature of it's own
- if (pPathExpression[0] != '$') {
- m_strPathExpression = pPathExpression;
- return MIstatus::success;
- }
-
- // Build expression from what we do know
- const CMIUtilString &rVarParentName(varObj.GetVarParentName());
- if (rVarParentName.empty()) {
- m_strPathExpression = varObj.GetNameReal();
- } else {
- CMICmnLLDBDebugSessionInfoVarObj varObjParent;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarParentName,
- varObjParent)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarParentName.c_str()));
- return MIstatus::failure;
- }
- m_strPathExpression =
- CMIUtilString::Format("%s.%s", varObjParent.GetNameReal().c_str(),
- varObj.GetNameReal().c_str());
- }
-
- 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.
-//--
-bool CMICmdCmdVarInfoPathExpression::Acknowledge() {
- if (m_bValueValid) {
- const CMICmnMIValueConst miValueConst(m_strPathExpression);
- const CMICmnMIValueResult miValueResult("path_expr", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Done,
- miValueResult);
- m_miResultRecord = miRecordResult;
- return MIstatus::success;
- }
-
- const CMICmnMIValueConst miValueConst("variable invalid");
- const CMICmnMIValueResult miValueResult("msg", miValueConst);
- const CMICmnMIResultRecord miRecordResult(
- m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error,
- 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.
-//--
-CMICmdBase *CMICmdCmdVarInfoPathExpression::CreateSelf() {
- return new CMICmdCmdVarInfoPathExpression();
-}
-
-
-//++
-// Details: CMICmdCmdVarShowAttributes constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarShowAttributes::CMICmdCmdVarShowAttributes()
- : m_constStrArgName("name") {
- // Command factory matches this name with that received from the stdin stream
- m_strMiCmd = "var-show-attributes";
-
- // Required by the CMICmdFactory when registering *this command
- m_pSelfCreatorFn = &CMICmdCmdVarShowAttributes::CreateSelf;
-}
-
-//++
-// Details: CMICmdCmdVarShowAttributes destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdCmdVarShowAttributes::~CMICmdCmdVarShowAttributes() {}
-
-//++
-// 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 CMICmdCmdVarShowAttributes::ParseArgs() {
- m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, true, true));
- return 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.
-//--
-bool CMICmdCmdVarShowAttributes::Execute() {
- CMICMDBASE_GETOPTION(pArgName, String, m_constStrArgName);
-
- const CMIUtilString &rVarObjName(pArgName->GetValue());
- CMICmnLLDBDebugSessionInfoVarObj varObj;
- if (!CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(rVarObjName, varObj)) {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_VARIABLE_DOESNOTEXIST),
- m_cmdData.strMiCmd.c_str(),
- rVarObjName.c_str()));
- return MIstatus::failure;
- }
-
- 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.
-//--
-bool CMICmdCmdVarShowAttributes::Acknowledge() {
- // MI output: "%s^done,status=\"editable\"]"
- const CMICmnMIValueConst miValueConst("editable");
- const CMICmnMIValueResult miValueResult("status", miValueConst);
- 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.
-//--
-CMICmdBase *CMICmdCmdVarShowAttributes::CreateSelf() {
- return new CMICmdCmdVarShowAttributes();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCmdVar.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdVar.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdVar.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdVar.h (removed)
@@ -1,348 +0,0 @@
-//===-- MICmdCmdVar.h -------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: CMICmdCmdVarCreate interface.
-// CMICmdCmdVarUpdate interface.
-// CMICmdCmdVarDelete interface.
-// CMICmdCmdVarAssign interface.
-// CMICmdCmdVarSetFormat interface.
-// CMICmdCmdVarListChildren interface.
-// CMICmdCmdVarEvaluateExpression interface.
-// CMICmdCmdVarInfoPathExpression interface.
-// CMICmdCmdVarShowAttributes interface.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-// For an introduction to adding a new command see
-// CMICmdCmdSupportInfoMiCmdQuery
-// command class as an example.
-
-#pragma once
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugSessionInfoVarObj.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-
-// Declarations:
-class CMICmnLLDBDebugSessionInfoVarObj;
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-create".
-//--
-class CMICmdCmdVarCreate : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarCreate();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarCreate() override;
-
- // Methods:
-private:
- void CompleteSBValue(lldb::SBValue &vrwValue);
-
- // Attribute:
-private:
- CMIUtilString m_strVarName;
- MIuint m_nChildren;
- MIuint64 m_nThreadId;
- CMIUtilString m_strType;
- bool m_bValid; // True = Variable is valid, false = not valid
- CMIUtilString m_strExpression;
- CMIUtilString m_strValue;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgFrameAddr;
- const CMIUtilString m_constStrArgExpression;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-update".
-//--
-class CMICmdCmdVarUpdate : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarUpdate();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarUpdate() override;
-
- // Methods:
-private:
- bool ExamineSBValueForChange(lldb::SBValue &vrwValue, bool &vrwbChanged);
- void MIFormResponse(const CMIUtilString &vrStrVarName,
- const char *const vpValue,
- const CMIUtilString &vrStrScope);
-
- // Attribute:
-private:
- const CMIUtilString m_constStrArgPrintValues;
- const CMIUtilString m_constStrArgName;
- bool m_bValueChanged; // True = yes value changed, false = no change
- CMICmnMIValueList m_miValueList;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-delete".
-//--
-class CMICmdCmdVarDelete : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarDelete();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarDelete() override;
-
- // Attribute:
-private:
- const CMIUtilString m_constStrArgName;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-assign".
-//--
-class CMICmdCmdVarAssign : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarAssign();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarAssign() override;
-
- // Attributes:
-private:
- bool m_bOk; // True = success, false = failure
- CMIUtilString m_varObjName;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgExpression;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-set-format".
-//--
-class CMICmdCmdVarSetFormat : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarSetFormat();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarSetFormat() override;
-
- // Attributes:
-private:
- CMIUtilString m_varObjName;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgFormatSpec;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-list-children".
-//--
-class CMICmdCmdVarListChildren : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarListChildren();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarListChildren() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgPrintValues;
- const CMIUtilString m_constStrArgName;
- const CMIUtilString m_constStrArgFrom;
- const CMIUtilString m_constStrArgTo;
- bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
- MIuint m_nChildren;
- CMICmnMIValueList m_miValueList;
- bool m_bHasMore;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-evaluate-expression".
-//--
-class CMICmdCmdVarEvaluateExpression : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarEvaluateExpression();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarEvaluateExpression() override;
-
- // Attributes:
-private:
- bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
- CMIUtilString m_varObjName;
- const CMIUtilString m_constStrArgFormatSpec; // Not handled by *this command
- const CMIUtilString m_constStrArgName;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-info-path-expression".
-//--
-class CMICmdCmdVarInfoPathExpression : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarInfoPathExpression();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarInfoPathExpression() override;
-
- // Attributes:
-private:
- bool m_bValueValid; // True = yes SBValue object is valid, false = not valid
- CMIUtilString m_strPathExpression;
- const CMIUtilString m_constStrArgName;
-};
-
-//++
-//============================================================================
-// Details: MI command class. MI commands derived from the command base class.
-// *this class implements MI command "var-show-attributes".
-//--
-class CMICmdCmdVarShowAttributes : public CMICmdBase {
- // Statics:
-public:
- // Required by the CMICmdFactory when registering *this command
- static CMICmdBase *CreateSelf();
-
- // Methods:
-public:
- /* ctor */ CMICmdCmdVarShowAttributes();
-
- // Overridden:
-public:
- // From CMICmdInvoker::ICmd
- bool Execute() override;
- bool Acknowledge() override;
- bool ParseArgs() override;
- // From CMICmnBase
- /* dtor */ ~CMICmdCmdVarShowAttributes() override;
-
- // Attributes:
-private:
- const CMIUtilString m_constStrArgName;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdCommands.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCommands.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCommands.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCommands.cpp (removed)
@@ -1,134 +0,0 @@
-//===-- MICmdCommands.cpp ---------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Overview: MI command are registered with the MI command factory.
-//
-// To implement new MI commands derive a new command class from the
-// command base
-// class. To enable the new command for interpretation add the new
-// command class
-// to the command factory. The files of relevance are:
-// MICmdCommands.cpp
-// MICmdBase.h / .cpp
-// MICmdCmd.h / .cpp
-
-// In-house headers:
-#include "MICmdCommands.h"
-#include "MICmdCmd.h"
-#include "MICmdCmdBreak.h"
-#include "MICmdCmdData.h"
-#include "MICmdCmdEnviro.h"
-#include "MICmdCmdExec.h"
-#include "MICmdCmdFile.h"
-#include "MICmdCmdGdbInfo.h"
-#include "MICmdCmdGdbSet.h"
-#include "MICmdCmdGdbShow.h"
-#include "MICmdCmdGdbThread.h"
-#include "MICmdCmdMiscellanous.h"
-#include "MICmdCmdStack.h"
-#include "MICmdCmdSupportInfo.h"
-#include "MICmdCmdSupportList.h"
-#include "MICmdCmdSymbol.h"
-#include "MICmdCmdTarget.h"
-#include "MICmdCmdThread.h"
-#include "MICmdCmdTrace.h"
-#include "MICmdCmdVar.h"
-#include "MICmdFactory.h"
-
-namespace MICmnCommands {
-template <typename T> static bool Register();
-}
-
-//++
-// Details: Command to command factory registration function.
-// Type: Template function.
-// Args: typename T - A command type class.
-// Return: bool - True = yes command is registered, false = command failed to
-// register.
-// Throws: None.
-//--
-template <typename T> static bool MICmnCommands::Register() {
- static CMICmdFactory &rCmdFactory = CMICmdFactory::Instance();
- const CMIUtilString strMiCmd = T().GetMiCmd();
- CMICmdFactory::CmdCreatorFnPtr fn = T().GetCmdCreatorFn();
- return rCmdFactory.CmdRegister(strMiCmd, fn);
-}
-
-//++
-// Details: Register commands with MI command factory
-// Type: Function.
-// Args: None.
-// Return: bool - True = yes all commands are registered,
-// false = one or more commands failed to register.
-// Throws: None.
-//--
-bool MICmnCommands::RegisterAll() {
- bool bOk = MIstatus::success;
-
- bOk &= Register<CMICmdCmdSupportInfoMiCmdQuery>();
- bOk &= Register<CMICmdCmdBreakAfter>();
- bOk &= Register<CMICmdCmdBreakCondition>();
- bOk &= Register<CMICmdCmdBreakDelete>();
- bOk &= Register<CMICmdCmdBreakDisable>();
- bOk &= Register<CMICmdCmdBreakEnable>();
- bOk &= Register<CMICmdCmdBreakInsert>();
- bOk &= Register<CMICmdCmdDataDisassemble>();
- bOk &= Register<CMICmdCmdDataEvaluateExpression>();
- bOk &= Register<CMICmdCmdDataInfoLine>();
- bOk &= Register<CMICmdCmdDataReadMemoryBytes>();
- bOk &= Register<CMICmdCmdDataReadMemory>();
- bOk &= Register<CMICmdCmdDataListRegisterNames>();
- bOk &= Register<CMICmdCmdDataListRegisterValues>();
- bOk &= Register<CMICmdCmdDataWriteMemory>();
- bOk &= Register<CMICmdCmdEnablePrettyPrinting>();
- bOk &= Register<CMICmdCmdEnvironmentCd>();
- bOk &= Register<CMICmdCmdExecAbort>();
- bOk &= Register<CMICmdCmdExecArguments>();
- bOk &= Register<CMICmdCmdExecContinue>();
- bOk &= Register<CMICmdCmdExecInterrupt>();
- bOk &= Register<CMICmdCmdExecFinish>();
- bOk &= Register<CMICmdCmdExecNext>();
- bOk &= Register<CMICmdCmdExecNextInstruction>();
- bOk &= Register<CMICmdCmdExecRun>();
- bOk &= Register<CMICmdCmdExecStep>();
- bOk &= Register<CMICmdCmdExecStepInstruction>();
- bOk &= Register<CMICmdCmdFileExecAndSymbols>();
- bOk &= Register<CMICmdCmdGdbExit>();
- bOk &= Register<CMICmdCmdGdbInfo>();
- bOk &= Register<CMICmdCmdGdbSet>();
- bOk &= Register<CMICmdCmdGdbShow>();
- bOk &= Register<CMICmdCmdGdbThread>();
- bOk &= Register<CMICmdCmdInferiorTtySet>();
- bOk &= Register<CMICmdCmdInterpreterExec>();
- bOk &= Register<CMICmdCmdListThreadGroups>();
- bOk &= Register<CMICmdCmdSource>();
- bOk &= Register<CMICmdCmdStackInfoDepth>();
- bOk &= Register<CMICmdCmdStackInfoFrame>();
- bOk &= Register<CMICmdCmdStackListFrames>();
- bOk &= Register<CMICmdCmdStackListArguments>();
- bOk &= Register<CMICmdCmdStackListLocals>();
- bOk &= Register<CMICmdCmdStackListVariables>();
- bOk &= Register<CMICmdCmdStackSelectFrame>();
- bOk &= Register<CMICmdCmdSupportListFeatures>();
- bOk &= Register<CMICmdCmdSymbolListLines>();
- bOk &= Register<CMICmdCmdTargetSelect>();
- bOk &= Register<CMICmdCmdTargetAttach>();
- bOk &= Register<CMICmdCmdTargetDetach>();
- bOk &= Register<CMICmdCmdThreadInfo>();
- bOk &= Register<CMICmdCmdVarAssign>();
- bOk &= Register<CMICmdCmdVarCreate>();
- bOk &= Register<CMICmdCmdVarDelete>();
- bOk &= Register<CMICmdCmdVarEvaluateExpression>();
- bOk &= Register<CMICmdCmdVarInfoPathExpression>();
- bOk &= Register<CMICmdCmdVarListChildren>();
- bOk &= Register<CMICmdCmdVarSetFormat>();
- bOk &= Register<CMICmdCmdVarShowAttributes>();
- bOk &= Register<CMICmdCmdVarUpdate>();
-
- return bOk;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdCommands.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCommands.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCommands.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCommands.h (removed)
@@ -1,19 +0,0 @@
-//===-- MICmdCommands.h -----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-namespace MICmnCommands {
-
-//++
-//============================================================================
-// Details: MI Command are instantiated and registered automatically with the
-// Command Factory
-//--
-bool RegisterAll();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdData.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdData.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdData.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdData.cpp (removed)
@@ -1,10 +0,0 @@
-//===-- MICmdData.cpp -------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdData.h"
Removed: lldb/trunk/tools/lldb-mi/MICmdData.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdData.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdData.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdData.h (removed)
@@ -1,58 +0,0 @@
-//===-- MICmdData.h ---------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnResources.h"
-
-//++
-//============================================================================
-// Details: MI command metadata. Holds the command's name, MI number and options
-// as found on stdin. Holds the command's MI output (written to
-// stdout).
-//--
-struct SMICmdData {
- SMICmdData()
- : id(0), bCmdValid(false), bCmdExecutedSuccessfully(false),
- bMIOldStyle(false), bHasResultRecordExtra(false) {}
-
- MIuint id; // A command's unique ID i.e. GUID
- CMIUtilString strMiCmdToken; // The command's MI token (a number)
- CMIUtilString strMiCmd; // The command's name
- CMIUtilString strMiCmdOption; // The command's arguments or options
- CMIUtilString strMiCmdAll; // The text as received from the client
- CMIUtilString
- strMiCmdResultRecord; // Each command forms 1 response to its input
- CMIUtilString strMiCmdResultRecordExtra; // Hack command produce more response
- // text to help the client because of
- // using LLDB
- bool bCmdValid; // True = Valid MI format command, false = invalid
- bool bCmdExecutedSuccessfully; // True = Command finished successfully, false
- // = Did not start/did not complete
- CMIUtilString strErrorDescription; // Command failed this is why
- bool bMIOldStyle; // True = format "3thread", false = format "3-thread"
- bool bHasResultRecordExtra; // True = Yes command produced additional MI
- // output to its 1 line response, false = no extra
- // MI output formed
-
- void Clear() {
- id = 0;
- strMiCmdToken.clear();
- strMiCmd = MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION);
- strMiCmdOption.clear();
- strMiCmdAll.clear();
- strMiCmdResultRecord.clear();
- strMiCmdResultRecordExtra.clear();
- bCmdValid = false;
- bCmdExecutedSuccessfully = false;
- strErrorDescription.clear();
- bMIOldStyle = false;
- bHasResultRecordExtra = false;
- }
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdFactory.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdFactory.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdFactory.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdFactory.cpp (removed)
@@ -1,206 +0,0 @@
-//===-- MICmdFactory.cpp ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdFactory.h"
-#include "MICmdBase.h"
-#include "MICmdCommands.h"
-#include "MICmdData.h"
-#include "MICmnResources.h"
-
-//++
-// Details: CMICmdFactory constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdFactory::CMICmdFactory() {}
-
-//++
-// Details: CMICmdFactory destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdFactory::~CMICmdFactory() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this Command factory.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdFactory::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = true;
-
- MICmnCommands::RegisterAll();
-
- return MIstatus::success;
-}
-
-//++
-// Details: Release resources for *this Command Factory.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdFactory::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_mapMiCmdToCmdCreatorFn.clear();
-
- m_bInitialized = false;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Register a command's creator function with the command identifier
-// the MI
-// command name i.e. 'file-exec-and-symbols'.
-// Type: Method.
-// Args: vMiCmd - (R) Command's name, the MI command.
-// vCmdCreateFn - (R) Command's creator function pointer.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdFactory::CmdRegister(const CMIUtilString &vMiCmd,
- CmdCreatorFnPtr vCmdCreateFn) {
- if (!IsValid(vMiCmd)) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_NAME), vMiCmd.c_str()));
- return MIstatus::failure;
- }
- if (vCmdCreateFn == nullptr) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_CR8FN), vMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- if (HaveAlready(vMiCmd)) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMDFACTORY_ERR_CMD_ALREADY_REGED), vMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- MapPairMiCmdToCmdCreatorFn_t pr(vMiCmd, vCmdCreateFn);
- m_mapMiCmdToCmdCreatorFn.insert(pr);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Check a command is already registered.
-// Type: Method.
-// Args: vMiCmd - (R) Command's name, the MI command.
-// Return: True - registered.
-// False - not found.
-// Throws: None.
-//--
-bool CMICmdFactory::HaveAlready(const CMIUtilString &vMiCmd) const {
- const MapMiCmdToCmdCreatorFn_t::const_iterator it =
- m_mapMiCmdToCmdCreatorFn.find(vMiCmd);
- return it != m_mapMiCmdToCmdCreatorFn.end();
-}
-
-//++
-// Details: Check a command's name is valid:
-// - name is not empty
-// - name does not have spaces
-// Type: Method.
-// Args: vMiCmd - (R) Command's name, the MI command.
-// Return: True - valid.
-// False - not valid.
-// Throws: None.
-//--
-bool CMICmdFactory::IsValid(const CMIUtilString &vMiCmd) const {
- bool bValid = true;
-
- if (vMiCmd.empty()) {
- bValid = false;
- return false;
- }
-
- const size_t nPos = vMiCmd.find(' ');
- if (nPos != std::string::npos)
- bValid = false;
-
- return bValid;
-}
-
-//++
-// Details: Check a command is already registered.
-// Type: Method.
-// Args: vMiCmd - (R) Command's name, the MI command.
-// Return: True - registered.
-// False - not found.
-// Throws: None.
-//--
-bool CMICmdFactory::CmdExist(const CMIUtilString &vMiCmd) const {
- return HaveAlready(vMiCmd);
-}
-
-//++
-// Details: Create a command given the specified MI command name. The command
-// data object
-// contains the options for the command.
-// Type: Method.
-// Args: vMiCmd - (R) Command's name, the MI command.
-// vCmdData - (RW) Command's metadata status/information/result
-// object.
-// vpNewCmd - (W) New command instance.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdFactory::CmdCreate(const CMIUtilString &vMiCmd,
- const SMICmdData &vCmdData,
- CMICmdBase *&vpNewCmd) {
- vpNewCmd = nullptr;
-
- if (!IsValid(vMiCmd)) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMDFACTORY_ERR_INVALID_CMD_NAME), vMiCmd.c_str()));
- return MIstatus::failure;
- }
- if (!HaveAlready(vMiCmd)) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMDFACTORY_ERR_CMD_NOT_REGISTERED), vMiCmd.c_str()));
- return MIstatus::failure;
- }
-
- const MapMiCmdToCmdCreatorFn_t::const_iterator it =
- m_mapMiCmdToCmdCreatorFn.find(vMiCmd);
- const CMIUtilString &rMiCmd((*it).first);
- MIunused(rMiCmd);
- CmdCreatorFnPtr pFn = (*it).second;
- CMICmdBase *pCmd = (*pFn)();
-
- SMICmdData cmdData(vCmdData);
- cmdData.id = pCmd->GetGUID();
- pCmd->SetCmdData(cmdData);
- vpNewCmd = pCmd;
-
- return MIstatus::success;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdFactory.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdFactory.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdFactory.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdFactory.h (removed)
@@ -1,84 +0,0 @@
-//===-- MICmdFactory.h ------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers
-#include <map>
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
-
-// Declarations:
-class CMICmdBase;
-struct SMICmdData;
-
-//++
-//============================================================================
-// Details: MI Command Factory. Holds a list of registered MI commands that
-// MI application understands to interpret. Creates commands objects.
-// The Command Factory is carried out in the main thread.
-// A singleton class.
-//--
-class CMICmdFactory : public CMICmnBase, public MI::ISingleton<CMICmdFactory> {
- friend class MI::ISingleton<CMICmdFactory>;
-
- // Typedefs:
-public:
- typedef CMICmdBase *(*CmdCreatorFnPtr)();
-
- // Class:
-public:
- //++
- // Description: Command's factory's interface for commands to implement.
- //--
- class ICmd {
- public:
- virtual const CMIUtilString &GetMiCmd() const = 0;
- virtual CmdCreatorFnPtr GetCmdCreatorFn() const = 0;
- // virtual CMICmdBase * CreateSelf( void ) = 0; // Not
- // possible as require a static creator
- // function in the command class, here for awareness
-
- /* dtor */ virtual ~ICmd() {}
- };
-
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
- bool CmdRegister(const CMIUtilString &vMiCmd, CmdCreatorFnPtr vCmdCreateFn);
- bool CmdCreate(const CMIUtilString &vMiCmd, const SMICmdData &vCmdData,
- CMICmdBase *&vpNewCmd);
- bool CmdExist(const CMIUtilString &vMiCmd) const;
-
- // Methods:
-private:
- /* ctor */ CMICmdFactory();
- /* ctor */ CMICmdFactory(const CMICmdFactory &);
- void operator=(const CMICmdFactory &);
-
- bool HaveAlready(const CMIUtilString &vMiCmd) const;
- bool IsValid(const CMIUtilString &vMiCmd) const;
-
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmdFactory() override;
-
- // Typedefs:
-private:
- typedef std::map<CMIUtilString, CmdCreatorFnPtr> MapMiCmdToCmdCreatorFn_t;
- typedef std::pair<CMIUtilString, CmdCreatorFnPtr>
- MapPairMiCmdToCmdCreatorFn_t;
-
- // Attributes:
-private:
- MapMiCmdToCmdCreatorFn_t m_mapMiCmdToCmdCreatorFn;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInterpreter.cpp (removed)
@@ -1,290 +0,0 @@
-//===-- MICmdInterpreter.cpp ------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdInterpreter.h"
-#include "MICmdFactory.h"
-
-//++
-// Details: CMICmdInterpreter constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdInterpreter::CMICmdInterpreter()
- : m_rCmdFactory(CMICmdFactory::Instance()) {}
-
-//++
-// Details: CMICmdInterpreter destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdInterpreter::~CMICmdInterpreter() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this Command Interpreter.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdInterpreter::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = true;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Release resources for *this Command Interpreter.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdInterpreter::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = false;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Establish whether the text data is an MI format type command.
-// Type: Method.
-// Args: vTextLine - (R) Text data to interpret.
-// vwbYesValid - (W) True = MI type command, false = not
-// recognised.
-// vwbCmdNotInCmdFactor - (W) True = MI command not found in the
-// command factory, false = recognised.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdInterpreter::ValidateIsMi(const CMIUtilString &vTextLine,
- bool &vwbYesValid,
- bool &vwbCmdNotInCmdFactor,
- SMICmdData &rwCmdData) {
- vwbYesValid = false;
- vwbCmdNotInCmdFactor = false;
- rwCmdData.Clear();
-
- if (vTextLine.empty())
- return MIstatus::success;
-
- // MI format is [cmd #]-[command name]<space>[command arg(s)]
- // i.e. 1-file-exec-and-symbols --thread-group i1 DEVICE_EXECUTABLE
- // 5-data-evaluate-expression --thread 1 --frame 0 *(argv)
-
- m_miCmdData.Clear();
- m_miCmdData.strMiCmd = vTextLine;
-
- // The following change m_miCmdData as valid parts are identified
- vwbYesValid = (MiHasCmdTokenEndingHyphen(vTextLine) ||
- MiHasCmdTokenEndingAlpha(vTextLine));
- vwbYesValid = vwbYesValid && MiHasCmd(vTextLine);
- if (vwbYesValid) {
- vwbCmdNotInCmdFactor = !HasCmdFactoryGotMiCmd(MiGetCmdData());
- vwbYesValid = !vwbCmdNotInCmdFactor;
- }
-
- // Update command's meta data valid state
- m_miCmdData.bCmdValid = vwbYesValid;
-
- // Ok to return new updated command information
- rwCmdData = MiGetCmdData();
-
- return MIstatus::success;
-}
-
-//++
-// Details: Establish whether the command name entered on the stdin stream is
-// recognised by
-// the MI driver.
-// Type: Method.
-// Args: vCmd - (R) Command information structure.
-// Return: bool - True = yes command is recognised, false = command not
-// recognised.
-// Throws: None.
-//--
-bool CMICmdInterpreter::HasCmdFactoryGotMiCmd(const SMICmdData &vCmd) const {
- return m_rCmdFactory.CmdExist(vCmd.strMiCmd);
-}
-
-//++
-// Details: Does the command entered match the criteria for a MI command format.
-// The format to validate against is 'nn-' where there can be 1 to n
-// digits.
-// I.e. '2-gdb-exit'.
-// Is the execution token present? The command token is entered into
-// the
-// command meta data structure whether correct or not for reporting or
-// later
-// command execution purposes.
-// Type: Method.
-// Args: vTextLine - (R) Text data to interpret.
-// Return: bool - True = yes command token present, false = command not
-// recognised.
-// Throws: None.
-//--
-bool CMICmdInterpreter::MiHasCmdTokenEndingHyphen(
- const CMIUtilString &vTextLine) {
- // The hyphen is mandatory
- const size_t nPos = vTextLine.find('-', 0);
- if ((nPos == std::string::npos))
- return false;
-
- if (MiHasCmdTokenPresent(vTextLine)) {
- const std::string strNum = vTextLine.substr(0, nPos);
- if (!CMIUtilString(strNum).IsNumber())
- return false;
-
- m_miCmdData.strMiCmdToken = strNum;
- }
-
- m_miCmdData.bMIOldStyle = false;
-
- return true;
-}
-
-//++
-// Details: Does the command entered match the criteria for a MI command format.
-// The format to validate against is 'nnA' where there can be 1 to n
-// digits.
-// 'A' represents any non numeric token. I.e. '1source .gdbinit'.
-// Is the execution token present? The command token is entered into
-// the
-// command meta data structure whether correct or not for reporting or
-// later
-// command execution purposes.
-// Type: Method.
-// Args: vTextLine - (R) Text data to interpret.
-// Return: bool - True = yes command token present, false = command not
-// recognised.
-// Throws: None.
-//--
-bool CMICmdInterpreter::MiHasCmdTokenEndingAlpha(
- const CMIUtilString &vTextLine) {
- char cChar = vTextLine[0];
- MIuint i = 0;
- while (::isdigit(cChar) != 0) {
- cChar = vTextLine[++i];
- }
- if (::isalpha(cChar) == 0)
- return false;
- if (i == 0)
- return false;
-
- const std::string strNum = vTextLine.substr(0, i);
- m_miCmdData.strMiCmdToken = strNum.c_str();
- m_miCmdData.bMIOldStyle = true;
-
- return true;
-}
-
-//++
-// Details: Does the command entered match the criteria for a MI command format.
-// Is the command token present before the hyphen?
-// Type: Method.
-// Args: vTextLine - (R) Text data to interpret.
-// Return: bool - True = yes command token present, false = token not present.
-// Throws: None.
-//--
-bool CMICmdInterpreter::MiHasCmdTokenPresent(const CMIUtilString &vTextLine) {
- const size_t nPos = vTextLine.find('-', 0);
- return (nPos > 0);
-}
-
-//++
-// Details: Does the command name entered match the criteria for a MI command
-// format.
-// Is a recognised command present? The command name is entered into
-// the
-// command meta data structure whether correct or not for reporting or
-// later
-// command execution purposes. Command options is present are also put
-// into the
-// command meta data structure.
-// Type: Method.
-// Args: vTextLine - (R) Command information structure.
-// Return: bool - True = yes command name present, false = command not
-// recognised.
-// Throws: None.
-//--
-bool CMICmdInterpreter::MiHasCmd(const CMIUtilString &vTextLine) {
- size_t nPos = 0;
- if (m_miCmdData.bMIOldStyle) {
- char cChar = vTextLine[0];
- size_t i = 0;
- while (::isdigit(cChar) != 0) {
- cChar = vTextLine[++i];
- }
- nPos = --i;
- } else {
- nPos = vTextLine.find('-', 0);
- }
-
- bool bFoundCmd = false;
- const size_t nLen = vTextLine.length();
- const size_t nPos2 = vTextLine.find(' ', nPos);
- if (nPos2 != std::string::npos) {
- if (nPos2 == nLen)
- return false;
- const CMIUtilString cmd =
- CMIUtilString(vTextLine.substr(nPos + 1, nPos2 - nPos - 1));
- if (cmd.empty())
- return false;
-
- m_miCmdData.strMiCmd = cmd;
-
- if (nPos2 < nLen)
- m_miCmdData.strMiCmdOption =
- CMIUtilString(vTextLine.substr(nPos2 + 1, nLen - nPos2 - 1));
-
- bFoundCmd = true;
- } else {
- const CMIUtilString cmd =
- CMIUtilString(vTextLine.substr(nPos + 1, nLen - nPos - 1));
- if (cmd.empty())
- return false;
- m_miCmdData.strMiCmd = cmd;
- bFoundCmd = true;
- }
-
- if (bFoundCmd)
- m_miCmdData.strMiCmdAll = vTextLine;
-
- return bFoundCmd;
-}
-
-//++
-// Details: Retrieve the just entered new command from stdin. It contains the
-// command
-// name, number and any options.
-// Type: Method.
-// Args: vTextLine - (R) Command information structure.
-// Return: SMICmdData & - Command meta data information/result/status.
-// Throws: None.
-//--
-const SMICmdData &CMICmdInterpreter::MiGetCmdData() const {
- return m_miCmdData;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdInterpreter.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInterpreter.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInterpreter.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInterpreter.h (removed)
@@ -1,62 +0,0 @@
-//===-- MICmdInterpreter.h --------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmdData.h"
-#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
-
-// Declarations:
-class CMICmdFactory;
-
-//++
-//============================================================================
-// Details: MI command interpreter. It takes text data from the MI driver
-// (which got it from Stdin singleton) and validate the text to see if
-// matches Machine Interface (MI) format and commands defined in the
-// MI application.
-// A singleton class.
-//--
-class CMICmdInterpreter : public CMICmnBase,
- public MI::ISingleton<CMICmdInterpreter> {
- friend MI::ISingleton<CMICmdInterpreter>;
-
- // Methods:
-public:
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
- bool ValidateIsMi(const CMIUtilString &vTextLine, bool &vwbYesValid,
- bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData);
-
- // Methods:
-private:
- /* ctor */ CMICmdInterpreter();
- /* ctor */ CMICmdInterpreter(const CMICmdInterpreter &);
- void operator=(const CMICmdInterpreter &);
-
- bool HasCmdFactoryGotMiCmd(const SMICmdData &vCmdData) const;
- bool MiHasCmdTokenEndingHyphen(const CMIUtilString &vTextLine);
- bool MiHasCmdTokenEndingAlpha(const CMIUtilString &vTextLine);
- bool MiHasCmd(const CMIUtilString &vTextLine);
- bool MiHasCmdTokenPresent(const CMIUtilString &vTextLine);
- const SMICmdData &MiGetCmdData() const;
-
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmdInterpreter() override;
-
- // Attributes:
-private:
- SMICmdData m_miCmdData; // Filled in on each new line being interpreted
- CMICmdFactory &m_rCmdFactory;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInvoker.cpp (removed)
@@ -1,321 +0,0 @@
-//===-- MICmdInvoker.cpp ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdInvoker.h"
-#include "MICmdBase.h"
-#include "MICmdMgr.h"
-#include "MICmnLog.h"
-#include "MICmnStreamStdout.h"
-#include "MIDriver.h"
-
-//++
-// Details: CMICmdInvoker constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdInvoker::CMICmdInvoker() : m_rStreamOut(CMICmnStreamStdout::Instance()) {}
-
-//++
-// Details: CMICmdInvoker destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdInvoker::~CMICmdInvoker() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this Command Invoker.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdInvoker::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = true;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Release resources for *this Stdin stream.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdInvoker::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- CmdDeleteAll();
-
- m_bInitialized = false;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Empty the map of invoked commands doing work. Command objects are
-// deleted too.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdInvoker::CmdDeleteAll() {
- CMICmdMgr &rMgr = CMICmdMgr::Instance();
- MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.begin();
- while (it != m_mapCmdIdToCmd.end()) {
- const MIuint cmdId((*it).first);
- MIunused(cmdId);
- CMICmdBase *pCmd = (*it).second;
- const CMIUtilString &rCmdName(pCmd->GetCmdData().strMiCmd);
- MIunused(rCmdName);
- rMgr.CmdDelete(pCmd->GetCmdData());
-
- // Next
- ++it;
- }
- m_mapCmdIdToCmd.clear();
-}
-
-//++
-// Details: Remove from the map of invoked commands doing work a command that
-// has finished
-// its work. The command object is deleted too.
-// Type: Method.
-// Args: vId - (R) Command object's unique ID.
-// vbYesDeleteCmd - (R) True = Delete command object, false = delete
-// via the Command Manager.
-// Return: None.
-// Throws: None.
-//--
-bool CMICmdInvoker::CmdDelete(const MIuint vId,
- const bool vbYesDeleteCmd /*= false*/) {
- CMICmdMgr &rMgr = CMICmdMgr::Instance();
- MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.find(vId);
- if (it != m_mapCmdIdToCmd.end()) {
- CMICmdBase *pCmd = (*it).second;
- if (vbYesDeleteCmd) {
- // Via registered interest command manager callback *this object to delete
- // the command
- m_mapCmdIdToCmd.erase(it);
- delete pCmd;
- } else
- // Notify other interested object of this command's pending deletion
- rMgr.CmdDelete(pCmd->GetCmdData());
- }
-
- if (m_mapCmdIdToCmd.empty())
- rMgr.CmdUnregisterForDeleteNotification(*this);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Add to the map of invoked commands doing work a command that is
-// about to
-// start to do work.
-// Type: Method.
-// Args: vCmd - (R) Command object.
-// Return: None.
-// Throws: None.
-//--
-bool CMICmdInvoker::CmdAdd(const CMICmdBase &vCmd) {
- if (m_mapCmdIdToCmd.empty()) {
- CMICmdMgr &rMgr = CMICmdMgr::Instance();
- rMgr.CmdRegisterForDeleteNotification(*this);
- }
-
- const MIuint &cmdId(vCmd.GetCmdData().id);
- MapCmdIdToCmd_t::const_iterator it = m_mapCmdIdToCmd.find(cmdId);
- if (it != m_mapCmdIdToCmd.end())
- return MIstatus::success;
-
- MapPairCmdIdToCmd_t pr(cmdId, const_cast<CMICmdBase *>(&vCmd));
- m_mapCmdIdToCmd.insert(pr);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Having previously had the potential command validated and found
-// valid now
-// get the command executed.
-// If the Functionality returns MIstatus::failure call
-// GetErrorDescription().
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: vCmd - (RW) Command object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdInvoker::CmdExecute(CMICmdBase &vCmd) {
- bool bOk = CmdAdd(vCmd);
-
- if (bOk) {
- vCmd.AddCommonArgs();
- if (!vCmd.ParseArgs()) {
- // Report command execution failed
- const SMICmdData cmdData(vCmd.GetCmdData());
- CmdStdout(cmdData);
- CmdCauseAppExit(vCmd);
- CmdDelete(cmdData.id);
-
- // Proceed to wait or execute next command
- return MIstatus::success;
- }
- }
-
- if (bOk && !vCmd.Execute()) {
- // Report command execution failed
- const SMICmdData cmdData(vCmd.GetCmdData());
- CmdStdout(cmdData);
- CmdCauseAppExit(vCmd);
- CmdDelete(cmdData.id);
-
- // Proceed to wait or execute next command
- return MIstatus::success;
- }
-
- bOk = CmdExecuteFinished(vCmd);
-
- return bOk;
-}
-
-//++
-// Details: Called when a command has finished its Execution() work either
-// synchronously
-// because the command executed was the type a non event type or
-// asynchronously
-// via the command's callback (because of an SB Listener event). Needs
-// to be called
-// so that *this invoker call do some house keeping and then proceed to
-// call
-// the command's Acknowledge() function.
-// Type: Method.
-// Args: vCmd - (R) Command object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdInvoker::CmdExecuteFinished(CMICmdBase &vCmd) {
- // Command finished now get the command to gather it's information and form
- // the MI
- // Result record
- if (!vCmd.Acknowledge()) {
- // Report command acknowledge functionality failed
- const SMICmdData cmdData(vCmd.GetCmdData());
- CmdStdout(cmdData);
- CmdCauseAppExit(vCmd);
- CmdDelete(cmdData.id);
-
- // Proceed to wait or execute next command
- return MIstatus::success;
- }
-
- // Retrieve the command's latest data/information. Needed for commands of the
- // event type so have
- // a record of commands pending finishing execution.
- const CMIUtilString &rMIResultRecord(vCmd.GetMIResultRecord());
- SMICmdData cmdData(
- vCmd.GetCmdData()); // Make a copy as the command will be deleted soon
- cmdData.strMiCmdResultRecord = rMIResultRecord; // Precautionary copy as the
- // command might forget to do
- // this
- if (vCmd.HasMIResultRecordExtra()) {
- cmdData.bHasResultRecordExtra = true;
- const CMIUtilString &rMIExtra(vCmd.GetMIResultRecordExtra());
- cmdData.strMiCmdResultRecordExtra =
- rMIExtra; // Precautionary copy as the command might forget to do this
- }
-
- // Send command's MI response to the client
- bool bOk = CmdStdout(cmdData);
-
- // Delete the command object as do not require anymore
- bOk = bOk && CmdDelete(vCmd.GetCmdData().id);
-
- return bOk;
-}
-
-//++
-// Details: If the MI Driver is not operating via a client i.e. Eclipse check
-// the command
-// on failure suggests the application exits. A command can be such
-// that a
-// failure cannot the allow the application to continue operating.
-// Args: vCmd - (R) Command object.
-// Return: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdInvoker::CmdCauseAppExit(const CMICmdBase &vCmd) const {
- if (vCmd.GetExitAppOnCommandFailure()) {
- CMIDriver &rDriver(CMIDriver::Instance());
- if (rDriver.IsDriverDebuggingArgExecutable()) {
- rDriver.SetExitApplicationFlag(true);
- }
- }
-}
-
-//++
-// Details: Write to stdout and the Log file the command's MI formatted result.
-// Type: vCmdData - (R) A command's information.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Return: None.
-// Throws: None.
-//--
-bool CMICmdInvoker::CmdStdout(const SMICmdData &vCmdData) const {
- bool bOk = m_pLog->WriteLog(vCmdData.strMiCmdAll);
- const bool bLock = bOk && m_rStreamOut.Lock();
- bOk = bOk && bLock &&
- m_rStreamOut.WriteMIResponse(vCmdData.strMiCmdResultRecord);
- if (bOk && vCmdData.bHasResultRecordExtra) {
- bOk = m_rStreamOut.WriteMIResponse(vCmdData.strMiCmdResultRecordExtra);
- }
- bOk = bLock && m_rStreamOut.Unlock();
-
- return bOk;
-}
-
-//++
-// Details: Required by the CMICmdMgr::ICmdDeleteCallback. *this object is
-// registered
-// with the Command Manager to receive callbacks when a command is
-// being deleted.
-// An object, *this invoker, does not delete a command object itself
-// but calls
-// the Command Manager to delete a command object. This function is the
-// Invoker's
-// called.
-// The Invoker owns the command objects and so can delete them but must
-// do it
-// via the manager so other objects can be notified of the deletion.
-// Type: Method.
-// Args: vCmd - (RW) Command.
-// Return: None.
-// Throws: None.
-//--
-void CMICmdInvoker::Delete(SMICmdData &vCmd) { CmdDelete(vCmd.id, true); }
Removed: lldb/trunk/tools/lldb-mi/MICmdInvoker.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdInvoker.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdInvoker.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdInvoker.h (removed)
@@ -1,103 +0,0 @@
-//===-- MICmdInvoker.h ------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers
-#include <map>
-
-// In-house headers:
-#include "MICmdData.h"
-#include "MICmdMgrSetCmdDeleteCallback.h"
-#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
-
-// Declarations:
-class CMICmdBase;
-class CMICmnStreamStdout;
-
-//++
-//============================================================================
-// Details: MI Command Invoker. The Invoker works on the command pattern design.
-// There two main jobs; action command Execute() function, followed by
-// the command's Acknowledge() function. When a command has finished
-// its
-// execute function it returns to the invoker. The invoker then calls
-// the
-// command's Acknowledge() function to do more work, form and give
-// back a MI result. In the meantime the Command Monitor is monitoring
-// the each command doing their Execute() function work so they do not
-// exceed a time limit which if it exceeds informs the command(s) to
-// stop work.
-// The work by the Invoker is carried out in the main thread.
-// The Invoker takes ownership of any commands created which means it
-// is the only object to delete them when a command is finished
-// working.
-// A singleton class.
-//--
-class CMICmdInvoker : public CMICmnBase,
- public CMICmdMgrSetCmdDeleteCallback::ICallback,
- public MI::ISingleton<CMICmdInvoker> {
- friend class MI::ISingleton<CMICmdInvoker>;
-
- // Class:
-public:
- //++
- // Description: Invoker's interface for commands to implement.
- //--
- class ICmd {
- public:
- virtual bool Acknowledge() = 0;
- virtual bool Execute() = 0;
- virtual bool ParseArgs() = 0;
- virtual void SetCmdData(const SMICmdData &vCmdData) = 0;
- virtual const SMICmdData &GetCmdData() const = 0;
- virtual const CMIUtilString &GetErrorDescription() const = 0;
- virtual void CmdFinishedTellInvoker() const = 0;
- virtual const CMIUtilString &GetMIResultRecord() const = 0;
- virtual const CMIUtilString &GetMIResultRecordExtra() const = 0;
- virtual bool HasMIResultRecordExtra() const = 0;
-
- /* dtor */ virtual ~ICmd() {}
- };
-
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
- bool CmdExecute(CMICmdBase &vCmd);
- bool CmdExecuteFinished(CMICmdBase &vCmd);
-
- // Typedefs:
-private:
- typedef std::map<MIuint, CMICmdBase *> MapCmdIdToCmd_t;
- typedef std::pair<MIuint, CMICmdBase *> MapPairCmdIdToCmd_t;
-
- // Methods:
-private:
- /* ctor */ CMICmdInvoker();
- /* ctor */ CMICmdInvoker(const CMICmdInvoker &);
- void operator=(const CMICmdInvoker &);
- void CmdDeleteAll();
- bool CmdDelete(const MIuint vCmdId, const bool vbYesDeleteCmd = false);
- bool CmdAdd(const CMICmdBase &vCmd);
- bool CmdStdout(const SMICmdData &vCmdData) const;
- void CmdCauseAppExit(const CMICmdBase &vCmd) const;
-
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmdInvoker() override;
- // From CMICmdMgrSetCmdDeleteCallback::ICallback
- void Delete(SMICmdData &vCmd) override;
-
- // Attributes:
-private:
- MapCmdIdToCmd_t m_mapCmdIdToCmd;
- CMICmnStreamStdout &m_rStreamOut;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdMgr.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgr.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgr.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgr.cpp (removed)
@@ -1,248 +0,0 @@
-//===-- MICmdMgr.cpp --------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdMgr.h"
-#include "MICmdBase.h"
-#include "MICmdFactory.h"
-#include "MICmdInterpreter.h"
-#include "MICmdInvoker.h"
-#include "MICmnLog.h"
-#include "MICmnResources.h"
-#include "MIUtilSingletonBase.h"
-#include "MIUtilSingletonHelper.h"
-
-//++
-// Details: CMICmdMgr constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdMgr::CMICmdMgr()
- : m_interpretor(CMICmdInterpreter::Instance()),
- m_factory(CMICmdFactory::Instance()),
- m_invoker(CMICmdInvoker::Instance()) {}
-
-//++
-// Details: CMICmdMgr destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmdMgr::~CMICmdMgr() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this Command Manager.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdMgr::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
-
- // Note initialization order is important here as some resources depend on
- // previous
- MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
- MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- if (bOk && !m_interpretor.Initialize()) {
- bOk = false;
- errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDINTERPRETER),
- m_interpretor.GetErrorDescription().c_str());
- }
- if (bOk && !m_factory.Initialize()) {
- bOk = false;
- errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDFACTORY),
- m_factory.GetErrorDescription().c_str());
- }
- if (bOk && !m_invoker.Initialize()) {
- bOk = false;
- errMsg = CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDINVOKER),
- m_invoker.GetErrorDescription().c_str());
- }
- m_bInitialized = bOk;
-
- if (!bOk) {
- CMIUtilString strInitError(
- CMIUtilString::Format(MIRSRC(IDS_MI_INIT_ERR_CMDMGR), errMsg.c_str()));
- SetErrorDescription(strInitError);
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Release resources for *this Command Manager.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdMgr::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = false;
-
- ClrErrorDescription();
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
-
- // Tidy up
- m_setCmdDeleteCallback.clear();
-
- // Note shutdown order is important here
- if (!m_invoker.Shutdown()) {
- bOk = false;
- errMsg += CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDINVOKER),
- m_invoker.GetErrorDescription().c_str());
- }
- if (!m_factory.Shutdown()) {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg += CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDFACTORY),
- m_factory.GetErrorDescription().c_str());
- }
- if (!m_interpretor.Shutdown()) {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg +=
- CMIUtilString::Format(MIRSRC(IDS_MI_SHTDWN_ERR_CMDINTERPRETER),
- m_interpretor.GetErrorDescription().c_str());
- }
- MI::ModuleShutdown<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- MI::ModuleShutdown<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
-
- if (!bOk) {
- SetErrorDescriptionn(MIRSRC(IDS_MI_SHUTDOWN_ERR), errMsg.c_str());
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Establish whether the text data is an MI format type command.
-// Type: Method.
-// Args: vTextLine - (R) Text data to interpret.
-// vwbYesValid - (W) True = MI type command, false = not
-// recognised.
-// vwbCmdNotInCmdFactor - (W) True = MI command not found in the
-// command factor, false = recognised.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdMgr::CmdInterpret(const CMIUtilString &vTextLine, bool &vwbYesValid,
- bool &vwbCmdNotInCmdFactor,
- SMICmdData &rwCmdData) {
- return m_interpretor.ValidateIsMi(vTextLine, vwbYesValid,
- vwbCmdNotInCmdFactor, rwCmdData);
-}
-
-//++
-// Details: Having previously had the potential command validated and found
-// valid now
-// get the command executed.
-// If the Functionality returns MIstatus::failure call
-// GetErrorDescription().
-// This function is used by the application's main thread.
-// Type: Method.
-// Args: vCmdData - (RW) Command meta data.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmdMgr::CmdExecute(const SMICmdData &vCmdData) {
- bool bOk = MIstatus::success;
-
- // Pass the command's meta data structure to the command
- // so it can update it if required. (Need to copy it out of the
- // command before the command is deleted)
- CMICmdBase *pCmd = nullptr;
- bOk = m_factory.CmdCreate(vCmdData.strMiCmd, vCmdData, pCmd);
- if (!bOk) {
- const CMIUtilString errMsg(
- CMIUtilString::Format(MIRSRC(IDS_CMDMGR_ERR_CMD_FAILED_CREATE),
- m_factory.GetErrorDescription().c_str()));
- SetErrorDescription(errMsg);
- return MIstatus::failure;
- }
-
- bOk = m_invoker.CmdExecute(*pCmd);
- if (!bOk) {
- const CMIUtilString errMsg(
- CMIUtilString::Format(MIRSRC(IDS_CMDMGR_ERR_CMD_INVOKER),
- m_invoker.GetErrorDescription().c_str()));
- SetErrorDescription(errMsg);
- return MIstatus::failure;
- }
-
- return bOk;
-}
-
-//++
-// Details: Iterate all interested clients and tell them a command is being
-// deleted.
-// Type: Method.
-// Args: vCmdData - (RW) The command to be deleted.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdMgr::CmdDelete(SMICmdData vCmdData) {
- // Note vCmdData is a copy! The command holding its copy will be deleted soon
- // we still need to iterate callback clients after a command object is deleted
-
- m_setCmdDeleteCallback.Delete(vCmdData);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Register an object to be called when a command object is deleted.
-// Type: Method.
-// Args: vObject - (R) A new interested client.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdMgr::CmdRegisterForDeleteNotification(
- CMICmdMgrSetCmdDeleteCallback::ICallback &vObject) {
- return m_setCmdDeleteCallback.Register(vObject);
-}
-
-//++
-// Details: Unregister an object from being called when a command object is
-// deleted.
-// Type: Method.
-// Args: vObject - (R) The was interested client.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmdMgr::CmdUnregisterForDeleteNotification(
- CMICmdMgrSetCmdDeleteCallback::ICallback &vObject) {
- return m_setCmdDeleteCallback.Unregister(vObject);
-}
Removed: lldb/trunk/tools/lldb-mi/MICmdMgr.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgr.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgr.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgr.h (removed)
@@ -1,69 +0,0 @@
-//===-- MICmdMgr.h ----------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers
-#include <set>
-
-// In-house headers:
-#include "MICmdBase.h"
-#include "MICmdMgrSetCmdDeleteCallback.h"
-#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
-
-// Declarations:
-class CMICmdInterpreter;
-class CMICmdFactory;
-class CMICmdInvoker;
-class CMICmdBase;
-
-//++
-//============================================================================
-// Details: MI command manager. Oversees command operations, controls command
-// production and the running of commands.
-// Command Invoker, Command Factory and Command Monitor while
-// independent
-// units are overseen/managed by *this manager.
-// A singleton class.
-//--
-class CMICmdMgr : public CMICmnBase, public MI::ISingleton<CMICmdMgr> {
- friend class MI::ISingleton<CMICmdMgr>;
-
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
-
- bool CmdInterpret(const CMIUtilString &vTextLine, bool &vwbYesValid,
- bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData);
- bool CmdExecute(const SMICmdData &vCmdData);
- bool CmdDelete(SMICmdData vCmdData);
- bool CmdRegisterForDeleteNotification(
- CMICmdMgrSetCmdDeleteCallback::ICallback &vObject);
- bool CmdUnregisterForDeleteNotification(
- CMICmdMgrSetCmdDeleteCallback::ICallback &vObject);
-
- // Methods:
-private:
- /* ctor */ CMICmdMgr();
- /* ctor */ CMICmdMgr(const CMICmdMgr &);
- void operator=(const CMICmdMgr &);
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmdMgr() override;
-
- // Attributes:
-private:
- CMICmdInterpreter &m_interpretor;
- CMICmdFactory &m_factory;
- CMICmdInvoker &m_invoker;
- CMICmdMgrSetCmdDeleteCallback::CSetClients m_setCmdDeleteCallback;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp (removed)
@@ -1,87 +0,0 @@
-//===-- MICmdMgrSetCmdDeleteCallback.cpp ------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmdMgrSetCmdDeleteCallback.h"
-
-namespace CMICmdMgrSetCmdDeleteCallback {
-
-//++
-// Details: CSetClients constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CSetClients::CSetClients() : m_bClientUnregistered(false) {}
-
-//++
-// Details: CSetClients destructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CSetClients::~CSetClients() {}
-
-//++
-// Details: Register an object to be called when a command object is deleted.
-// Type: Method.
-// Args: vObject - (R) A new interested client.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CSetClients::Register(ICallback &vObject) {
- insert(&vObject);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Unregister an object from being called when a command object is
-// deleted.
-// Type: Method.
-// Args: vObject - (R) The was interested client.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CSetClients::Unregister(ICallback &vObject) {
- m_bClientUnregistered = true;
- erase(&vObject);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Iterate all interested clients and tell them a command is being
-// deleted.
-// Type: Method.
-// Args: vCmd - (RW) The command to be deleted.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-void CSetClients::Delete(SMICmdData &vCmd) {
- m_bClientUnregistered = false; // Reset
- iterator it = begin();
- while (it != end()) {
- ICallback *pObj = *it;
- pObj->Delete(vCmd);
-
- if (m_bClientUnregistered) {
- m_bClientUnregistered = false; // Reset
- it = begin();
- } else
- // Next
- ++it;
- }
-}
-
-} // namespace CMICmdMgrSetCmdDeleteCallback
Removed: lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h (removed)
@@ -1,72 +0,0 @@
-//===-- MICmdMgrSetCmdDeleteCallback.h --------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//--
-
-#pragma once
-
-// Third party headers:
-#include <set>
-
-// In-house headers:
-#include "MICmnBase.h"
-
-// Declarations:
-struct SMICmdData;
-
-namespace CMICmdMgrSetCmdDeleteCallback {
-
-//++
-//============================================================================
-// Details: MI Command Manager interface for client call back.
-// Objects that want to be notified of a command being deleted
-// inherit this interface and register interest in command object
-// deletion. An object deleting a command must not do it itself but
-// call
-// the Command Manager CmdDelete() function to delete a command object.
-//--
-class ICallback {
-public:
- virtual void Delete(SMICmdData &vCmd) = 0;
-
- /* dtor */ virtual ~ICallback() {}
-};
-
-//++
-//============================================================================
-// Details: MI Command Manager container for clients registered interest in
-// command
-// objects being deleted. Objects register an interest so when a
-// command
-// is to be deleted that object wanting the delete calls the Command
-// Manager to delete the command object. In so do all other registered
-// objects get called to about the deletion including the object
-// wanting
-// to do the delete in the first place.
-//--
-class CSetClients : public std::set<class ICallback *>, public CMICmnBase {
- // Methods:
-public:
- /* ctor */ CSetClients();
-
- bool Register(class ICallback &vObject);
- bool Unregister(class ICallback &vObject);
- void Delete(SMICmdData &vCmdData);
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CSetClients() override;
-
- // Attributes:
-private:
- bool m_bClientUnregistered; // True = yes while deleting a client
- // unregistered, false = no client unregistered
- // during deletion
-};
-
-} // namespace CMICmdMgrSetCmdDeleteCallback
Removed: lldb/trunk/tools/lldb-mi/MICmnBase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnBase.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnBase.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnBase.cpp (removed)
@@ -1,123 +0,0 @@
-//===-- MICmnBase.cpp -------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Third party headers
-#include <stdarg.h>
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MICmnLog.h"
-#include "MICmnStreamStderr.h"
-
-//++
-// Details: CMICmnBase constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnBase::CMICmnBase()
- : m_strMILastErrorDescription(CMIUtilString()), m_bInitialized(false),
- m_pLog(&CMICmnLog::Instance()), m_clientUsageRefCnt(0) {}
-
-//++
-// Details: CMICmnBase destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnBase::~CMICmnBase() { m_pLog = nullptr; }
-
-//++
-// Details: Retrieve whether *this object has an error description set.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes already defined, false = empty description.
-// Throws: None.
-//--
-bool CMICmnBase::HaveErrorDescription() const {
- return m_strMILastErrorDescription.empty();
-}
-
-//++
-// Details: Retrieve MI's last error condition.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Text description.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnBase::GetErrorDescription() const {
- return m_strMILastErrorDescription;
-}
-
-//++
-// Details: Set MI's error condition description. This may be accessed by
-// clients and
-// seen by users. Message is available to the client using the server
-// and sent
-// to the Logger.
-// Type: Method.
-// Args: vrTxt - (R) Text description.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnBase::SetErrorDescription(const CMIUtilString &vrTxt) const {
- m_strMILastErrorDescription = vrTxt;
- if (!vrTxt.empty()) {
- const CMIUtilString txt(CMIUtilString::Format("Error: %s", vrTxt.c_str()));
- CMICmnStreamStderr::Instance().Write(txt);
- }
-}
-
-//++
-// Details: Set MI's error condition description. This may be accessed by
-// clients and
-// seen by users. Message is available to the client using the server
-// and sent
-// to the Logger.
-// Type: Method.
-// Args: vrTxt - (R) Text description.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnBase::SetErrorDescriptionNoLog(const CMIUtilString &vrTxt) const {
- m_strMILastErrorDescription = vrTxt;
-}
-
-//++
-// Details: Clear MI's error condition description.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnBase::ClrErrorDescription() const {
- m_strMILastErrorDescription.clear();
-}
-
-//++
-// Details: Set MI's error condition description. This may be accessed by
-// clients and
-// seen by users. Message is available to the client using the server
-// and sent
-// to the Logger.
-// Type: Method.
-// Args: vFormat - (R) Format string.
-// ... - (R) Variable number of CMIUtilString type objects.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnBase::SetErrorDescriptionn(const char *vFormat, ...) const {
- va_list args;
- va_start(args, vFormat);
- CMIUtilString strResult = CMIUtilString::FormatValist(vFormat, args);
- va_end(args);
-
- SetErrorDescription(strResult);
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnBase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnBase.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnBase.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnBase.h (removed)
@@ -1,46 +0,0 @@
-//===-- MICmnBase.h ---------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MIDataTypes.h"
-#include "MIUtilString.h"
-
-// Declarations:
-class CMICmnLog;
-
-//++
-//============================================================================
-// Details: MI common code implementation base class.
-//--
-class CMICmnBase {
- // Methods:
-public:
- /* ctor */ CMICmnBase();
-
- bool HaveErrorDescription() const;
- const CMIUtilString &GetErrorDescription() const;
- void SetErrorDescription(const CMIUtilString &vrTxt) const;
- void SetErrorDescriptionn(const char *vFormat, ...) const;
- void SetErrorDescriptionNoLog(const CMIUtilString &vrTxt) const;
- void ClrErrorDescription() const;
-
- // Overrideable:
-public:
- /* dtor */ virtual ~CMICmnBase();
-
- // Attributes:
-protected:
- mutable CMIUtilString m_strMILastErrorDescription;
- bool m_bInitialized; // True = yes successfully initialized, false = no yet or
- // failed
- CMICmnLog *m_pLog; // Allow all derived classes to use the logger
- MIint m_clientUsageRefCnt; // Count of client using *this object so not
- // shutdown() object to early
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnConfig.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnConfig.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnConfig.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnConfig.h (removed)
@@ -1,19 +0,0 @@
-//===-- MICmnConfig.h -------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//--
-#pragma once
-
-// 1 = Show debug process attach modal dialog, 0 = do not show
-// For windows only ATM, other OS's code is an infinite loop which a debugger
-// must change a value to continue
-#define MICONFIG_DEBUG_SHOW_ATTACH_DBG_DLG 0
-
-// 1 = Write to MI's Log file warnings about commands that did not handle
-// arguments or
-// options present to them by the driver's client, 0 = no warnings given
-#define MICONFIG_GIVE_WARNING_CMD_ARGS_NOT_HANDLED 1
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.cpp (removed)
@@ -1,68 +0,0 @@
-//===-- MICmnLLDBBroadcaster.cpp --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnLLDBBroadcaster.h"
-
-//++
-// Details: CMICmnLLDBBroadcaster constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBBroadcaster::CMICmnLLDBBroadcaster()
- : lldb::SBBroadcaster("MI driver") {}
-
-//++
-// Details: CMICmnLLDBBroadcaster destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBBroadcaster::~CMICmnLLDBBroadcaster() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this broadcaster object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBBroadcaster::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = MIstatus::success;
-
- return m_bInitialized;
-}
-
-//++
-// Details: Release resources for *this broadcaster object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBBroadcaster::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = false;
-
- return MIstatus::success;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBBroadcaster.h (removed)
@@ -1,44 +0,0 @@
-//===-- MICmnLLDBBroadcaster.h ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
-#include "lldb/API/SBBroadcaster.h"
-
-//++
-//============================================================================
-// Details: MI derived class from LLDB SBBroadcaster API.
-//
-// *** This class (files) is a place holder until we know we need it or
-// *** not
-//
-// A singleton class.
-//--
-class CMICmnLLDBBroadcaster : public CMICmnBase,
- public lldb::SBBroadcaster,
- public MI::ISingleton<CMICmnLLDBBroadcaster> {
- friend MI::ISingleton<CMICmnLLDBBroadcaster>;
-
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
- // Methods:
-private:
- /* ctor */ CMICmnLLDBBroadcaster();
- /* ctor */ CMICmnLLDBBroadcaster(const CMICmnLLDBBroadcaster &);
- void operator=(const CMICmnLLDBBroadcaster &);
-
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBBroadcaster() override;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp (removed)
@@ -1,863 +0,0 @@
-//===-- MICmnLLDBDebugSessionInfo.cpp ---------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Third party headers:
-#include "lldb/API/SBThread.h"
-#include <inttypes.h>
-#ifdef _WIN32
-#include <io.h>
-#else
-#include <unistd.h>
-#endif // _WIN32
-#include "lldb/API/SBBreakpointLocation.h"
-
-// In-house headers:
-#include "MICmdData.h"
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBUtilSBValue.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-#include "MICmnResources.h"
-#include "Platform.h"
-
-//++
-// Details: CMICmnLLDBDebugSessionInfo constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfo::CMICmnLLDBDebugSessionInfo()
- : m_nBrkPointCntMax(INT32_MAX),
- m_currentSelectedThread(LLDB_INVALID_THREAD_ID),
- m_constStrSharedDataKeyWkDir("Working Directory"),
- m_constStrSharedDataSolibPath("Solib Path"),
- m_constStrPrintCharArrayAsString("Print CharArrayAsString"),
- m_constStrPrintExpandAggregates("Print ExpandAggregates"),
- m_constStrPrintAggregateFieldNames("Print AggregateFieldNames") {}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfo destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfo::~CMICmnLLDBDebugSessionInfo() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- m_currentSelectedThread = LLDB_INVALID_THREAD_ID;
- CMICmnLLDBDebugSessionInfoVarObj::VarObjIdResetToZero();
-
- m_bInitialized = MIstatus::success;
-
- return m_bInitialized;
-}
-
-//++
-// Details: Release resources for *this object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- // Tidy up
- SharedDataDestroy();
-
- m_vecActiveThreadId.clear();
- CMICmnLLDBDebugSessionInfoVarObj::VarObjClear();
-
- m_bInitialized = false;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Command instances can create and share data between other instances
-// of commands.
-// Data can also be assigned by a command and retrieved by LLDB event
-// handler.
-// This function takes down those resources build up over the use of
-// the commands.
-// This function should be called when the creation and running of
-// command has
-// stopped i.e. application shutdown.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfo::SharedDataDestroy() {
- m_mapIdToSessionData.Clear();
- m_vecVarObj.clear();
- m_mapBrkPtIdToBrkPtInfo.clear();
-}
-
-//++
-// Details: Record information about a LLDB break point so that is can be
-// recalled in other
-// commands or LLDB event handling functions.
-// Type: Method.
-// Args: vBrkPtId - (R) LLDB break point ID.
-// vrBrkPtInfo - (R) Break point information object.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::RecordBrkPtInfo(
- const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo) {
- MapPairBrkPtIdToBrkPtInfo_t pr(vnBrkPtId, vrBrkPtInfo);
- m_mapBrkPtIdToBrkPtInfo.insert(pr);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve information about a LLDB break point previous recorded
-// either by
-// commands or LLDB event handling functions.
-// Type: Method.
-// Args: vBrkPtId - (R) LLDB break point ID.
-// vrwBrkPtInfo - (W) Break point information object.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::RecordBrkPtInfoGet(
- const MIuint vnBrkPtId, SBrkPtInfo &vrwBrkPtInfo) const {
- const MapBrkPtIdToBrkPtInfo_t::const_iterator it =
- m_mapBrkPtIdToBrkPtInfo.find(vnBrkPtId);
- if (it != m_mapBrkPtIdToBrkPtInfo.end()) {
- vrwBrkPtInfo = (*it).second;
- return MIstatus::success;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Delete information about a specific LLDB break point object. This
-// function
-// should be called when a LLDB break point is deleted.
-// Type: Method.
-// Args: vBrkPtId - (R) LLDB break point ID.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::RecordBrkPtInfoDelete(const MIuint vnBrkPtId) {
- const MapBrkPtIdToBrkPtInfo_t::const_iterator it =
- m_mapBrkPtIdToBrkPtInfo.find(vnBrkPtId);
- if (it != m_mapBrkPtIdToBrkPtInfo.end()) {
- m_mapBrkPtIdToBrkPtInfo.erase(it);
- return MIstatus::success;
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Retrieve the specified thread's frame information.
-// Type: Method.
-// Args: vCmdData - (R) A command's information.
-// vThreadIdx - (R) Thread index.
-// vwrThreadFrames - (W) Frame data.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::GetThreadFrames(
- const SMICmdData &vCmdData, const MIuint vThreadIdx,
- const FrameInfoFormat_e veFrameInfoFormat, CMIUtilString &vwrThreadFrames) {
- lldb::SBThread thread = GetProcess().GetThreadByIndexID(vThreadIdx);
- const uint32_t nFrames = thread.GetNumFrames();
- if (nFrames == 0) {
- // MI print "frame={}"
- CMICmnMIValueTuple miValueTuple;
- CMICmnMIValueResult miValueResult("frame", miValueTuple);
- vwrThreadFrames = miValueResult.GetString();
- return MIstatus::success;
- }
-
- // MI print
- // "frame={level=\"%d\",addr=\"0x%016" PRIx64
- // "\",func=\"%s\",args=[%s],file=\"%s\",fullname=\"%s\",line=\"%d\"},frame={level=\"%d\",addr=\"0x%016"
- // PRIx64 "\",func=\"%s\",args=[%s],file=\"%s\",fullname=\"%s\",line=\"%d\"},
- // ..."
- CMIUtilString strListCommaSeparated;
- for (MIuint nLevel = 0; nLevel < nFrames; nLevel++) {
- CMICmnMIValueTuple miValueTuple;
- if (!MIResponseFormFrameInfo(thread, nLevel, veFrameInfoFormat,
- miValueTuple))
- return MIstatus::failure;
-
- const CMICmnMIValueResult miValueResult2("frame", miValueTuple);
- if (nLevel != 0)
- strListCommaSeparated += ",";
- strListCommaSeparated += miValueResult2.GetString();
- }
-
- vwrThreadFrames = strListCommaSeparated;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Return the resolved file's path for the given file.
-// Type: Method.
-// Args: vCmdData - (R) A command's information.
-// vPath - (R) Original path.
-// vwrResolvedPath - (W) Resolved path.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::ResolvePath(const SMICmdData &vCmdData,
- const CMIUtilString &vPath,
- CMIUtilString &vwrResolvedPath) {
- // ToDo: Verify this code as it does not work as vPath is always empty
-
- CMIUtilString strResolvedPath;
- if (!SharedDataRetrieve<CMIUtilString>(m_constStrSharedDataKeyWkDir,
- strResolvedPath)) {
- vwrResolvedPath = "";
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_SHARED_DATA_NOT_FOUND), vCmdData.strMiCmd.c_str(),
- m_constStrSharedDataKeyWkDir.c_str()));
- return MIstatus::failure;
- }
-
- vwrResolvedPath = vPath;
-
- return ResolvePath(strResolvedPath, vwrResolvedPath);
-}
-
-//++
-// Details: Return the resolved file's path for the given file.
-// Type: Method.
-// Args: vstrUnknown - (R) String assigned to path when resolved path
-// is empty.
-// vwrResolvedPath - (RW) The original path overwritten with resolved
-// path.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::ResolvePath(const CMIUtilString &vstrUnknown,
- CMIUtilString &vwrResolvedPath) {
- if (vwrResolvedPath.size() < 1) {
- vwrResolvedPath = vstrUnknown;
- return MIstatus::success;
- }
-
- bool bOk = MIstatus::success;
-
- CMIUtilString::VecString_t vecPathFolders;
- const MIuint nSplits = vwrResolvedPath.Split("/", vecPathFolders);
- MIunused(nSplits);
- MIuint nFoldersBack = 1; // 1 is just the file (last element of vector)
- while (bOk && (vecPathFolders.size() >= nFoldersBack)) {
- CMIUtilString strTestPath;
- MIuint nFoldersToAdd = nFoldersBack;
- while (nFoldersToAdd > 0) {
- strTestPath += "/";
- strTestPath += vecPathFolders[vecPathFolders.size() - nFoldersToAdd];
- nFoldersToAdd--;
- }
- bool bYesAccessible = false;
- bOk = AccessPath(strTestPath, bYesAccessible);
- if (bYesAccessible) {
- vwrResolvedPath = strTestPath;
- return MIstatus::success;
- } else
- nFoldersBack++;
- }
-
- // No files exist in the union of working directory and debuginfo path
- // Simply use the debuginfo path and let the IDE handle it.
-
- return bOk;
-}
-
-//++
-// Details: Determine the given file path exists or not.
-// Type: Method.
-// Args: vPath - (R) File name path.
-// vwbYesAccessible - (W) True - file exists, false = does not
-// exist.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::AccessPath(const CMIUtilString &vPath,
- bool &vwbYesAccessible) {
-#ifdef _WIN32
- vwbYesAccessible = (::_access(vPath.c_str(), 0) == 0);
-#else
- vwbYesAccessible = (::access(vPath.c_str(), 0) == 0);
-#endif // _WIN32
-
- return MIstatus::success;
-}
-
-//++
-// Details: Form MI partial response by appending more MI value type objects to
-// the
-// tuple type object past in.
-// Type: Method.
-// Args: vCmdData - (R) A command's information.
-// vrThread - (R) LLDB thread object.
-// vwrMIValueTuple - (W) MI value tuple object.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::MIResponseFormThreadInfo(
- const SMICmdData &vCmdData, const lldb::SBThread &vrThread,
- const ThreadInfoFormat_e veThreadInfoFormat,
- CMICmnMIValueTuple &vwrMIValueTuple) {
- lldb::SBThread &rThread = const_cast<lldb::SBThread &>(vrThread);
-
- const bool bSuspended = rThread.IsSuspended();
- const lldb::StopReason eReason = rThread.GetStopReason();
- const bool bValidReason = !((eReason == lldb::eStopReasonNone) ||
- (eReason == lldb::eStopReasonInvalid));
- const CMIUtilString strState((bSuspended || bValidReason) ? "stopped"
- : "running");
-
- // Add "id"
- const CMIUtilString strId(CMIUtilString::Format("%d", rThread.GetIndexID()));
- const CMICmnMIValueConst miValueConst1(strId);
- const CMICmnMIValueResult miValueResult1("id", miValueConst1);
- vwrMIValueTuple.Add(miValueResult1);
-
- // Add "target-id"
- const char *pThreadName = rThread.GetName();
- const MIuint len = CMIUtilString(pThreadName).length();
- const bool bHaveName = (len > 0) && (len < 32) && // 32 is arbitrary number
- CMIUtilString::IsAllValidAlphaAndNumeric(pThreadName);
- const char *pThrdFmt = bHaveName ? "%s" : "Thread %d";
- CMIUtilString strThread;
- if (bHaveName)
- strThread = CMIUtilString::Format(pThrdFmt, pThreadName);
- else
- strThread = CMIUtilString::Format(pThrdFmt, rThread.GetIndexID());
- const CMICmnMIValueConst miValueConst2(strThread);
- const CMICmnMIValueResult miValueResult2("target-id", miValueConst2);
- vwrMIValueTuple.Add(miValueResult2);
-
- // Add "frame"
- if (veThreadInfoFormat != eThreadInfoFormat_NoFrames) {
- CMIUtilString strFrames;
- if (!GetThreadFrames(vCmdData, rThread.GetIndexID(),
- eFrameInfoFormat_AllArgumentsInSimpleForm, strFrames))
- return MIstatus::failure;
-
- const CMICmnMIValueConst miValueConst3(strFrames, true);
- vwrMIValueTuple.Add(miValueConst3, false);
- }
-
- // Add "state"
- const CMICmnMIValueConst miValueConst4(strState);
- const CMICmnMIValueResult miValueResult4("state", miValueConst4);
- vwrMIValueTuple.Add(miValueResult4);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Form MI partial response by appending more MI value type objects to
-// the
-// tuple type object past in.
-// Type: Method.
-// Args: vrFrame - (R) LLDB thread object.
-// vMaskVarTypes - (R) Construed according to VariableType_e.
-// veVarInfoFormat - (R) The type of variable info that should be
-// shown.
-// vwrMIValueList - (W) MI value list object.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::MIResponseFormVariableInfo(
- const lldb::SBFrame &vrFrame, const MIuint vMaskVarTypes,
- const VariableInfoFormat_e veVarInfoFormat,
- CMICmnMIValueList &vwrMiValueList, const MIuint vnMaxDepth, /* = 10 */
- const bool vbMarkArgs /* = false*/) {
- bool bOk = MIstatus::success;
- lldb::SBFrame &rFrame = const_cast<lldb::SBFrame &>(vrFrame);
-
- const bool bArg = (vMaskVarTypes & eVariableType_Arguments);
- const bool bLocals = (vMaskVarTypes & eVariableType_Locals);
- const bool bStatics = (vMaskVarTypes & eVariableType_Statics);
- const bool bInScopeOnly = (vMaskVarTypes & eVariableType_InScope);
-
- // Handle arguments first
- lldb::SBValueList listArg = rFrame.GetVariables(bArg, false, false, false);
- bOk = bOk && MIResponseForVariableInfoInternal(veVarInfoFormat,
- vwrMiValueList, listArg,
- vnMaxDepth, true, vbMarkArgs);
-
- // Handle remaining variables
- lldb::SBValueList listVars =
- rFrame.GetVariables(false, bLocals, bStatics, bInScopeOnly);
- bOk = bOk && MIResponseForVariableInfoInternal(veVarInfoFormat,
- vwrMiValueList, listVars,
- vnMaxDepth, false, vbMarkArgs);
-
- return bOk;
-}
-
-bool CMICmnLLDBDebugSessionInfo::MIResponseForVariableInfoInternal(
- const VariableInfoFormat_e veVarInfoFormat,
- CMICmnMIValueList &vwrMiValueList, const lldb::SBValueList &vwrSBValueList,
- const MIuint vnMaxDepth, const bool vbIsArgs, const bool vbMarkArgs) {
- const MIuint nArgs = vwrSBValueList.GetSize();
- for (MIuint i = 0; i < nArgs; i++) {
- CMICmnMIValueTuple miValueTuple;
- lldb::SBValue value = vwrSBValueList.GetValueAtIndex(i);
- // If one stops inside try block with, which catch clause type is unnamed
- // (e.g std::exception&) then value name will be nullptr as well as value
- // pointer
- const char *name = value.GetName();
- if (name == nullptr)
- continue;
- const CMICmnMIValueConst miValueConst(name);
- const CMICmnMIValueResult miValueResultName("name", miValueConst);
- if (vbMarkArgs && vbIsArgs) {
- const CMICmnMIValueConst miValueConstArg("1");
- const CMICmnMIValueResult miValueResultArg("arg", miValueConstArg);
- miValueTuple.Add(miValueResultArg);
- }
- if (veVarInfoFormat != eVariableInfoFormat_NoValues) {
- miValueTuple.Add(miValueResultName); // name
- if (veVarInfoFormat == eVariableInfoFormat_SimpleValues) {
- const CMICmnMIValueConst miValueConst3(value.GetTypeName());
- const CMICmnMIValueResult miValueResult3("type", miValueConst3);
- miValueTuple.Add(miValueResult3);
- }
- const MIuint nChildren = value.GetNumChildren();
- const bool bIsPointerType = value.GetType().IsPointerType();
- if (nChildren == 0 || // no children
- (bIsPointerType && nChildren == 1) || // pointers
- veVarInfoFormat == eVariableInfoFormat_AllValues) // show all values
- {
- CMIUtilString strValue;
- if (GetVariableInfo(value, vnMaxDepth == 0, strValue)) {
- const CMICmnMIValueConst miValueConst2(
- strValue.Escape().AddSlashes());
- const CMICmnMIValueResult miValueResult2("value", miValueConst2);
- miValueTuple.Add(miValueResult2);
- }
- }
- vwrMiValueList.Add(miValueTuple);
- continue;
- }
-
- if (vbMarkArgs) {
- // If we are printing names only with vbMarkArgs, we still need to add the
- // name to the value tuple
- miValueTuple.Add(miValueResultName); // name
- vwrMiValueList.Add(miValueTuple);
- } else {
- // If we are printing name only then no need to put it in the tuple.
- vwrMiValueList.Add(miValueResultName);
- }
- }
- return MIstatus::success;
-}
-
-//++
-// Details: Extract the value's name and value or recurse into child value
-// object.
-// Type: Method.
-// Args: vrValue - (R) LLDB value object.
-// vbInSimpleForm - (R) True = Get variable info in simple form (i.e.
-// don't expand aggregates).
-// - False = Get variable info (and expand
-// aggregates if any).
-// vwrStrValue t - (W) The string representation of this value.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::GetVariableInfo(const lldb::SBValue &vrValue,
- const bool vbInSimpleForm,
- CMIUtilString &vwrStrValue) {
- const CMICmnLLDBUtilSBValue utilValue(vrValue, true, false);
- const bool bExpandAggregates = !vbInSimpleForm;
- vwrStrValue = utilValue.GetValue(bExpandAggregates);
- return MIstatus::success;
-}
-
-//++
-// Details: Form MI partial response by appending more MI value type objects to
-// the
-// tuple type object past in.
-// Type: Method.
-// Args: vrThread - (R) LLDB thread object.
-// vwrMIValueTuple - (W) MI value tuple object.
-// vArgInfo - (R) Args information in MI response form.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::MIResponseFormFrameInfo(
- const lldb::SBThread &vrThread, const MIuint vnLevel,
- const FrameInfoFormat_e veFrameInfoFormat,
- CMICmnMIValueTuple &vwrMiValueTuple) {
- lldb::SBThread &rThread = const_cast<lldb::SBThread &>(vrThread);
-
- lldb::SBFrame frame = rThread.GetFrameAtIndex(vnLevel);
- lldb::addr_t pc = 0;
- CMIUtilString fnName;
- CMIUtilString fileName;
- CMIUtilString path;
- MIuint nLine = 0;
- if (!GetFrameInfo(frame, pc, fnName, fileName, path, nLine))
- return MIstatus::failure;
-
- // MI print "{level=\"0\",addr=\"0x%016" PRIx64
- // "\",func=\"%s\",file=\"%s\",fullname=\"%s\",line=\"%d\"}"
- const CMIUtilString strLevel(CMIUtilString::Format("%d", vnLevel));
- const CMICmnMIValueConst miValueConst(strLevel);
- const CMICmnMIValueResult miValueResult("level", miValueConst);
- vwrMiValueTuple.Add(miValueResult);
- const CMIUtilString strAddr(CMIUtilString::Format("0x%016" PRIx64, pc));
- const CMICmnMIValueConst miValueConst2(strAddr);
- const CMICmnMIValueResult miValueResult2("addr", miValueConst2);
- vwrMiValueTuple.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3(fnName);
- const CMICmnMIValueResult miValueResult3("func", miValueConst3);
- vwrMiValueTuple.Add(miValueResult3);
- if (veFrameInfoFormat != eFrameInfoFormat_NoArguments) {
- CMICmnMIValueList miValueList(true);
- const MIuint maskVarTypes = eVariableType_Arguments;
- if (veFrameInfoFormat == eFrameInfoFormat_AllArgumentsInSimpleForm) {
- if (!MIResponseFormVariableInfo(frame, maskVarTypes,
- eVariableInfoFormat_AllValues,
- miValueList, 0))
- return MIstatus::failure;
- } else if (!MIResponseFormVariableInfo(frame, maskVarTypes,
- eVariableInfoFormat_AllValues,
- miValueList))
- return MIstatus::failure;
-
- const CMICmnMIValueResult miValueResult4("args", miValueList);
- vwrMiValueTuple.Add(miValueResult4);
- }
- const CMICmnMIValueConst miValueConst5(fileName);
- const CMICmnMIValueResult miValueResult5("file", miValueConst5);
- vwrMiValueTuple.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6(path);
- const CMICmnMIValueResult miValueResult6("fullname", miValueConst6);
- vwrMiValueTuple.Add(miValueResult6);
- const CMIUtilString strLine(CMIUtilString::Format("%d", nLine));
- const CMICmnMIValueConst miValueConst7(strLine);
- const CMICmnMIValueResult miValueResult7("line", miValueConst7);
- vwrMiValueTuple.Add(miValueResult7);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve the frame information from LLDB frame object.
-// Type: Method.
-// Args: vrFrame - (R) LLDB thread object.
-// vPc - (W) Address number.
-// vFnName - (W) Function name.
-// vFileName - (W) File name text.
-// vPath - (W) Full file name and path text.
-// vnLine - (W) File line number.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::GetFrameInfo(
- const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc, CMIUtilString &vwFnName,
- CMIUtilString &vwFileName, CMIUtilString &vwPath, MIuint &vwnLine) {
- lldb::SBFrame &rFrame = const_cast<lldb::SBFrame &>(vrFrame);
-
- static char pBuffer[PATH_MAX];
- const MIuint nBytes =
- rFrame.GetLineEntry().GetFileSpec().GetPath(&pBuffer[0], sizeof(pBuffer));
- MIunused(nBytes);
- CMIUtilString strResolvedPath(&pBuffer[0]);
- const char *pUnkwn = "??";
- if (!ResolvePath(pUnkwn, strResolvedPath))
- return MIstatus::failure;
- vwPath = strResolvedPath;
-
- vwPc = rFrame.GetPC();
-
- const char *pFnName = rFrame.GetFunctionName();
- vwFnName = (pFnName != nullptr) ? pFnName : pUnkwn;
-
- const char *pFileName = rFrame.GetLineEntry().GetFileSpec().GetFilename();
- vwFileName = (pFileName != nullptr) ? pFileName : pUnkwn;
-
- vwnLine = rFrame.GetLineEntry().GetLine();
-
- return MIstatus::success;
-}
-
-//++
-// Details: Form MI partial response by appending more MI value type objects to
-// the
-// tuple type object past in.
-// Type: Method.
-// Args: vrBrkPtInfo - (R) Break point information object.
-// vwrMIValueTuple - (W) MI value tuple object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfo::MIResponseFormBrkPtFrameInfo(
- const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple) {
- const CMIUtilString strAddr(
- CMIUtilString::Format("0x%016" PRIx64, vrBrkPtInfo.m_pc));
- const CMICmnMIValueConst miValueConst2(strAddr);
- const CMICmnMIValueResult miValueResult2("addr", miValueConst2);
- vwrMiValueTuple.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3(vrBrkPtInfo.m_fnName);
- const CMICmnMIValueResult miValueResult3("func", miValueConst3);
- vwrMiValueTuple.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst5(vrBrkPtInfo.m_fileName);
- const CMICmnMIValueResult miValueResult5("file", miValueConst5);
- vwrMiValueTuple.Add(miValueResult5);
- const CMIUtilString strN5 = CMIUtilString::Format(
- "%s/%s", vrBrkPtInfo.m_path.c_str(), vrBrkPtInfo.m_fileName.c_str());
- const CMICmnMIValueConst miValueConst6(strN5);
- const CMICmnMIValueResult miValueResult6("fullname", miValueConst6);
- vwrMiValueTuple.Add(miValueResult6);
- const CMIUtilString strLine(CMIUtilString::Format("%d", vrBrkPtInfo.m_nLine));
- const CMICmnMIValueConst miValueConst7(strLine);
- const CMICmnMIValueResult miValueResult7("line", miValueConst7);
- vwrMiValueTuple.Add(miValueResult7);
-}
-
-//++
-// Details: Form MI partial response by appending more MI value type objects to
-// the
-// tuple type object past in.
-// Type: Method.
-// Args: vrBrkPtInfo - (R) Break point information object.
-// vwrMIValueTuple - (W) MI value tuple object.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::MIResponseFormBrkPtInfo(
- const SBrkPtInfo &vrBrkPtInfo, CMICmnMIValueTuple &vwrMiValueTuple) {
- // MI print
- // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
- // PRIx64 "\",
- // func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
-
- // "number="
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format("%d", vrBrkPtInfo.m_id));
- const CMICmnMIValueResult miValueResult("number", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- // "type="
- const CMICmnMIValueConst miValueConst2(vrBrkPtInfo.m_strType);
- const CMICmnMIValueResult miValueResult2("type", miValueConst2);
- miValueTuple.Add(miValueResult2);
- // "disp="
- const CMICmnMIValueConst miValueConst3(vrBrkPtInfo.m_bDisp ? "del" : "keep");
- const CMICmnMIValueResult miValueResult3("disp", miValueConst3);
- miValueTuple.Add(miValueResult3);
- // "enabled="
- const CMICmnMIValueConst miValueConst4(vrBrkPtInfo.m_bEnabled ? "y" : "n");
- const CMICmnMIValueResult miValueResult4("enabled", miValueConst4);
- miValueTuple.Add(miValueResult4);
- // "addr="
- // "func="
- // "file="
- // "fullname="
- // "line="
- MIResponseFormBrkPtFrameInfo(vrBrkPtInfo, miValueTuple);
- // "pending="
- if (vrBrkPtInfo.m_bPending) {
- const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strOrigLoc);
- const CMICmnMIValueList miValueList(miValueConst);
- const CMICmnMIValueResult miValueResult("pending", miValueList);
- miValueTuple.Add(miValueResult);
- }
- if (vrBrkPtInfo.m_bHaveArgOptionThreadGrp) {
- const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strOptThrdGrp);
- const CMICmnMIValueList miValueList(miValueConst);
- const CMICmnMIValueResult miValueResult("thread-groups", miValueList);
- miValueTuple.Add(miValueResult);
- }
- // "times="
- const CMICmnMIValueConst miValueConstB(
- CMIUtilString::Format("%d", vrBrkPtInfo.m_nTimes));
- const CMICmnMIValueResult miValueResultB("times", miValueConstB);
- miValueTuple.Add(miValueResultB);
- // "thread="
- if (vrBrkPtInfo.m_bBrkPtThreadId) {
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format("%d", vrBrkPtInfo.m_nBrkPtThreadId));
- const CMICmnMIValueResult miValueResult("thread", miValueConst);
- miValueTuple.Add(miValueResult);
- }
- // "cond="
- if (vrBrkPtInfo.m_bCondition) {
- const CMICmnMIValueConst miValueConst(vrBrkPtInfo.m_strCondition);
- const CMICmnMIValueResult miValueResult("cond", miValueConst);
- miValueTuple.Add(miValueResult);
- }
- // "ignore="
- if (vrBrkPtInfo.m_nIgnore != 0) {
- const CMICmnMIValueConst miValueConst(
- CMIUtilString::Format("%d", vrBrkPtInfo.m_nIgnore));
- const CMICmnMIValueResult miValueResult("ignore", miValueConst);
- miValueTuple.Add(miValueResult);
- }
- // "original-location="
- const CMICmnMIValueConst miValueConstC(vrBrkPtInfo.m_strOrigLoc);
- const CMICmnMIValueResult miValueResultC("original-location", miValueConstC);
- miValueTuple.Add(miValueResultC);
-
- vwrMiValueTuple = miValueTuple;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve breakpoint information and write into the given breakpoint
-// information
-// object. Note not all possible information is retrieved and so the
-// information
-// object may need to be filled in with more information after calling
-// this
-// function. Mainly breakpoint location information of information that
-// is
-// unlikely to change.
-// Type: Method.
-// Args: vBrkPt - (R) LLDB break point object.
-// vrBrkPtInfo - (W) Break point information object.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfo::GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt,
- SBrkPtInfo &vrwBrkPtInfo) const {
- lldb::SBBreakpoint &rBrkPt = const_cast<lldb::SBBreakpoint &>(vBrkPt);
- lldb::SBBreakpointLocation brkPtLoc = rBrkPt.GetLocationAtIndex(0);
- lldb::SBAddress brkPtAddr = brkPtLoc.GetAddress();
- lldb::SBSymbolContext symbolCntxt =
- brkPtAddr.GetSymbolContext(lldb::eSymbolContextEverything);
- const char *pUnkwn = "??";
- lldb::SBModule rModule = symbolCntxt.GetModule();
- const char *pModule =
- rModule.IsValid() ? rModule.GetFileSpec().GetFilename() : pUnkwn;
- MIunused(pModule);
- const char *pFile = pUnkwn;
- const char *pFn = pUnkwn;
- const char *pFilePath = pUnkwn;
- size_t nLine = 0;
- lldb::addr_t nAddr = brkPtAddr.GetLoadAddress(GetTarget());
- if (nAddr == LLDB_INVALID_ADDRESS)
- nAddr = brkPtAddr.GetFileAddress();
-
- lldb::SBCompileUnit rCmplUnit = symbolCntxt.GetCompileUnit();
- if (rCmplUnit.IsValid()) {
- lldb::SBFileSpec rFileSpec = rCmplUnit.GetFileSpec();
- pFile = rFileSpec.GetFilename();
- pFilePath = rFileSpec.GetDirectory();
- lldb::SBFunction rFn = symbolCntxt.GetFunction();
- if (rFn.IsValid())
- pFn = rFn.GetName();
- lldb::SBLineEntry rLnEntry = symbolCntxt.GetLineEntry();
- if (rLnEntry.GetLine() > 0)
- nLine = rLnEntry.GetLine();
- }
-
- vrwBrkPtInfo.m_id = vBrkPt.GetID();
- vrwBrkPtInfo.m_strType = "breakpoint";
- vrwBrkPtInfo.m_pc = nAddr;
- vrwBrkPtInfo.m_fnName = pFn;
- vrwBrkPtInfo.m_fileName = pFile;
- vrwBrkPtInfo.m_path = pFilePath;
- vrwBrkPtInfo.m_nLine = nLine;
- vrwBrkPtInfo.m_nTimes = vBrkPt.GetHitCount();
-
- return MIstatus::success;
-}
-
-//++
-// Details: Get current debugger.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBDebugger - current debugger.
-// Throws: None.
-//--
-lldb::SBDebugger &CMICmnLLDBDebugSessionInfo::GetDebugger() const {
- return CMICmnLLDBDebugger::Instance().GetTheDebugger();
-}
-
-//++
-// Details: Get current listener.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBListener - current listener.
-// Throws: None.
-//--
-lldb::SBListener &CMICmnLLDBDebugSessionInfo::GetListener() const {
- return CMICmnLLDBDebugger::Instance().GetTheListener();
-}
-
-//++
-// Details: Get current target.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBTarget - current target.
-// Throws: None.
-//--
-lldb::SBTarget CMICmnLLDBDebugSessionInfo::GetTarget() const {
- auto target = GetDebugger().GetSelectedTarget();
- if (target.IsValid())
- return target;
- return GetDebugger().GetDummyTarget();
-}
-
-//++
-// Details: Get current process.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBProcess - current process.
-// Throws: None.
-//--
-lldb::SBProcess CMICmnLLDBDebugSessionInfo::GetProcess() const {
- return GetTarget().GetProcess();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h (removed)
@@ -1,292 +0,0 @@
-//===-- MICmnLLDBDebugSessionInfo.h -----------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers:
-#include "lldb/API/SBDebugger.h"
-#include "lldb/API/SBListener.h"
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBTarget.h"
-#include <map>
-#include <vector>
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MICmnLLDBDebugSessionInfoVarObj.h"
-#include "MICmnMIValueTuple.h"
-#include "MIUtilMapIdToVariant.h"
-#include "MIUtilSingletonBase.h"
-#include "MIUtilThreadBaseStd.h"
-
-// Declarations:
-class CMICmnLLDBDebugger;
-struct SMICmdData;
-class CMICmnMIValueTuple;
-class CMICmnMIValueList;
-
-//++
-//============================================================================
-// Details: MI debug session object that holds debugging information between
-// instances of MI commands executing their work and producing MI
-// result records. Information/data is set by one or many commands then
-// retrieved by the same or other subsequent commands.
-// It primarily holds LLDB type objects.
-// A singleton class.
-//--
-class CMICmnLLDBDebugSessionInfo
- : public CMICmnBase,
- public MI::ISingleton<CMICmnLLDBDebugSessionInfo> {
- friend class MI::ISingleton<CMICmnLLDBDebugSessionInfo>;
-
- // Structs:
-public:
- //++
- //============================================================================
- // Details: Break point information object. Used to easily pass information
- // about
- // a break around and record break point information to be recalled
- // by
- // other commands or LLDB event handling functions.
- //--
- struct SBrkPtInfo {
- SBrkPtInfo()
- : m_id(0), m_bDisp(false), m_bEnabled(false), m_pc(0), m_nLine(0),
- m_bHaveArgOptionThreadGrp(false), m_nTimes(0), m_bPending(false),
- m_nIgnore(0), m_bCondition(false), m_bBrkPtThreadId(false),
- m_nBrkPtThreadId(0) {}
-
- MIuint m_id; // LLDB break point ID.
- CMIUtilString m_strType; // Break point type.
- bool m_bDisp; // True = "del", false = "keep".
- bool m_bEnabled; // True = enabled, false = disabled break point.
- lldb::addr_t m_pc; // Address number.
- CMIUtilString m_fnName; // Function name.
- CMIUtilString m_fileName; // File name text.
- CMIUtilString m_path; // Full file name and path text.
- MIuint m_nLine; // File line number.
- bool m_bHaveArgOptionThreadGrp; // True = include MI field, false = do not
- // include "thread-groups".
- CMIUtilString m_strOptThrdGrp; // Thread group number.
- MIuint m_nTimes; // The count of the breakpoint existence.
- CMIUtilString m_strOrigLoc; // The name of the break point.
- bool m_bPending; // True = the breakpoint has not been established yet,
- // false = location found
- MIuint m_nIgnore; // The number of time the breakpoint is run over before it
- // is stopped on a hit
- bool m_bCondition; // True = break point is conditional, use condition
- // expression, false = no condition
- CMIUtilString m_strCondition; // Break point condition expression
- bool m_bBrkPtThreadId; // True = break point is specified to work with a
- // specific thread, false = no specified thread given
- MIuint
- m_nBrkPtThreadId; // Restrict the breakpoint to the specified thread-id
- };
-
- // Enumerations:
-public:
- //++ ===================================================================
- // Details: The type of variable used by MIResponseFormVariableInfo family
- // functions.
- //--
- enum VariableType_e {
- eVariableType_InScope = (1u << 0), // In scope only.
- eVariableType_Statics = (1u << 1), // Statics.
- eVariableType_Locals = (1u << 2), // Locals.
- eVariableType_Arguments = (1u << 3) // Arguments.
- };
-
- //++ ===================================================================
- // Details: Determine the information that should be shown by using
- // MIResponseFormVariableInfo family functions.
- //--
- enum VariableInfoFormat_e {
- eVariableInfoFormat_NoValues = 0,
- eVariableInfoFormat_AllValues = 1,
- eVariableInfoFormat_SimpleValues = 2
- };
-
- //++ ===================================================================
- // Details: Determine the information that should be shown by using
- // MIResponseFormThreadInfo family functions.
- //--
- enum ThreadInfoFormat_e {
- eThreadInfoFormat_NoFrames,
- eThreadInfoFormat_AllFrames
- };
-
- //++ ===================================================================
- // Details: Determine the information that should be shown by using
- // MIResponseFormFrameInfo family functions.
- //--
- enum FrameInfoFormat_e {
- eFrameInfoFormat_NoArguments,
- eFrameInfoFormat_AllArguments,
- eFrameInfoFormat_AllArgumentsInSimpleForm
- };
-
- // Typedefs:
-public:
- typedef std::vector<uint32_t> VecActiveThreadId_t;
-
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
-
- // Variant type data which can be assigned and retrieved across all command
- // instances
- template <typename T>
- bool SharedDataAdd(const CMIUtilString &vKey, const T &vData);
- template <typename T>
- bool SharedDataRetrieve(const CMIUtilString &vKey, T &vwData);
- void SharedDataDestroy();
-
- // Common command required functionality
- bool AccessPath(const CMIUtilString &vPath, bool &vwbYesAccessible);
- bool ResolvePath(const SMICmdData &vCmdData, const CMIUtilString &vPath,
- CMIUtilString &vwrResolvedPath);
- bool ResolvePath(const CMIUtilString &vstrUnknown,
- CMIUtilString &vwrResolvedPath);
- bool MIResponseFormFrameInfo(const lldb::SBThread &vrThread,
- const MIuint vnLevel,
- const FrameInfoFormat_e veFrameInfoFormat,
- CMICmnMIValueTuple &vwrMiValueTuple);
- bool MIResponseFormThreadInfo(const SMICmdData &vCmdData,
- const lldb::SBThread &vrThread,
- const ThreadInfoFormat_e veThreadInfoFormat,
- CMICmnMIValueTuple &vwrMIValueTuple);
- bool MIResponseFormVariableInfo(const lldb::SBFrame &vrFrame,
- const MIuint vMaskVarTypes,
- const VariableInfoFormat_e veVarInfoFormat,
- CMICmnMIValueList &vwrMiValueList,
- const MIuint vnMaxDepth = 10,
- const bool vbMarkArgs = false);
- void MIResponseFormBrkPtFrameInfo(const SBrkPtInfo &vrBrkPtInfo,
- CMICmnMIValueTuple &vwrMiValueTuple);
- bool MIResponseFormBrkPtInfo(const SBrkPtInfo &vrBrkPtInfo,
- CMICmnMIValueTuple &vwrMiValueTuple);
- bool GetBrkPtInfo(const lldb::SBBreakpoint &vBrkPt,
- SBrkPtInfo &vrwBrkPtInfo) const;
- bool RecordBrkPtInfo(const MIuint vnBrkPtId, const SBrkPtInfo &vrBrkPtInfo);
- bool RecordBrkPtInfoGet(const MIuint vnBrkPtId,
- SBrkPtInfo &vrwBrkPtInfo) const;
- bool RecordBrkPtInfoDelete(const MIuint vnBrkPtId);
- CMIUtilThreadMutex &GetSessionMutex() { return m_sessionMutex; }
- lldb::SBDebugger &GetDebugger() const;
- lldb::SBListener &GetListener() const;
- lldb::SBTarget GetTarget() const;
- lldb::SBProcess GetProcess() const;
-
- // Attributes:
-public:
- // The following are available to all command instances
- const MIuint m_nBrkPointCntMax;
- VecActiveThreadId_t m_vecActiveThreadId;
- lldb::tid_t m_currentSelectedThread;
-
- // These are keys that can be used to access the shared data map
- // Note: This list is expected to grow and will be moved and abstracted in the
- // future.
- const CMIUtilString m_constStrSharedDataKeyWkDir;
- const CMIUtilString m_constStrSharedDataSolibPath;
- const CMIUtilString m_constStrPrintCharArrayAsString;
- const CMIUtilString m_constStrPrintExpandAggregates;
- const CMIUtilString m_constStrPrintAggregateFieldNames;
-
- // Typedefs:
-private:
- typedef std::vector<CMICmnLLDBDebugSessionInfoVarObj> VecVarObj_t;
- typedef std::map<MIuint, SBrkPtInfo> MapBrkPtIdToBrkPtInfo_t;
- typedef std::pair<MIuint, SBrkPtInfo> MapPairBrkPtIdToBrkPtInfo_t;
-
- // Methods:
-private:
- /* ctor */ CMICmnLLDBDebugSessionInfo();
- /* ctor */ CMICmnLLDBDebugSessionInfo(const CMICmnLLDBDebugSessionInfo &);
- void operator=(const CMICmnLLDBDebugSessionInfo &);
- //
- bool GetVariableInfo(const lldb::SBValue &vrValue, const bool vbInSimpleForm,
- CMIUtilString &vwrStrValue);
- bool GetFrameInfo(const lldb::SBFrame &vrFrame, lldb::addr_t &vwPc,
- CMIUtilString &vwFnName, CMIUtilString &vwFileName,
- CMIUtilString &vwPath, MIuint &vwnLine);
- bool GetThreadFrames(const SMICmdData &vCmdData, const MIuint vThreadIdx,
- const FrameInfoFormat_e veFrameInfoFormat,
- CMIUtilString &vwrThreadFrames);
- bool
- MIResponseForVariableInfoInternal(const VariableInfoFormat_e veVarInfoFormat,
- CMICmnMIValueList &vwrMiValueList,
- const lldb::SBValueList &vwrSBValueList,
- const MIuint vnMaxDepth,
- const bool vbIsArgs, const bool vbMarkArgs);
-
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBDebugSessionInfo() override;
-
- // Attributes:
-private:
- CMIUtilMapIdToVariant m_mapIdToSessionData; // Hold and retrieve key to value
- // data available across all
- // commands
- VecVarObj_t m_vecVarObj; // Vector of session variable objects
- MapBrkPtIdToBrkPtInfo_t m_mapBrkPtIdToBrkPtInfo;
- CMIUtilThreadMutex m_sessionMutex;
-};
-
-//++
-// Details: Command instances can create and share data between other instances
-// of commands.
-// This function adds new data to the shared data. Using the same ID
-// more than
-// once replaces any previous matching data keys.
-// Type: Template method.
-// Args: T - The type of the object to be stored.
-// vKey - (R) A non empty unique data key to retrieve the data by.
-// vData - (R) Data to be added to the share.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-template <typename T>
-bool CMICmnLLDBDebugSessionInfo::SharedDataAdd(const CMIUtilString &vKey,
- const T &vData) {
- if (!m_mapIdToSessionData.Add<T>(vKey, vData)) {
- SetErrorDescription(m_mapIdToSessionData.GetErrorDescription());
- return MIstatus::failure;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Command instances can create and share data between other instances
-// of commands.
-// This function retrieves data from the shared data container.
-// Type: Method.
-// Args: T - The type of the object being retrieved.
-// vKey - (R) A non empty unique data key to retrieve the data by.
-// vData - (W) The data.
-// Return: bool - True = data found, false = data not found or an error
-// occurred trying to fetch.
-// Throws: None.
-//--
-template <typename T>
-bool CMICmnLLDBDebugSessionInfo::SharedDataRetrieve(const CMIUtilString &vKey,
- T &vwData) {
- bool bDataFound = false;
-
- if (!m_mapIdToSessionData.Get<T>(vKey, vwData, bDataFound)) {
- SetErrorDescription(m_mapIdToSessionData.GetErrorDescription());
- return MIstatus::failure;
- }
-
- return bDataFound;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.cpp (removed)
@@ -1,573 +0,0 @@
-//===-- MICmnLLDBDebugSessionInfoVarObj.cpp ---------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnLLDBDebugSessionInfoVarObj.h"
-#include "MICmnLLDBProxySBValue.h"
-#include "MICmnLLDBUtilSBValue.h"
-
-// Instantiations:
-const char *CMICmnLLDBDebugSessionInfoVarObj::ms_aVarFormatStrings[] = {
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- // *** Order is import here.
- "<Invalid var format>", "binary", "octal", "decimal",
- "hexadecimal", "natural"};
-const char *CMICmnLLDBDebugSessionInfoVarObj::ms_aVarFormatChars[] = {
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- // *** Order is import here.
- "<Invalid var format>", "t", "o", "d", "x", "N"};
-CMICmnLLDBDebugSessionInfoVarObj::MapKeyToVarObj_t
- CMICmnLLDBDebugSessionInfoVarObj::ms_mapVarIdToVarObj;
-MIuint CMICmnLLDBDebugSessionInfoVarObj::ms_nVarUniqueId = 0; // Index from 0
-CMICmnLLDBDebugSessionInfoVarObj::varFormat_e
- CMICmnLLDBDebugSessionInfoVarObj::ms_eDefaultFormat = eVarFormat_Natural;
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj()
- : m_eVarFormat(eVarFormat_Natural), m_eVarType(eVarType_Internal) {
- // Do not call UpdateValue() in here as not necessary
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj constructor.
-// Type: Method.
-// Args: vrStrNameReal - (R) The actual name of the variable, the
-// expression.
-// vrStrName - (R) The name given for *this var object.
-// vrValue - (R) The LLDB SBValue object represented by *this
-// object.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
- const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue)
- : m_eVarFormat(eVarFormat_Natural), m_eVarType(eVarType_Internal),
- m_strName(vrStrName), m_SBValue(vrValue), m_strNameReal(vrStrNameReal) {
- UpdateValue();
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj constructor.
-// Type: Method.
-// Args: vrStrNameReal - (R) The actual name of the variable, the
-// expression.
-// vrStrName - (R) The name given for *this var object.
-// vrValue - (R) The LLDB SBValue object represented by
-// *this object.
-// vrStrVarObjParentName - (R) The var object parent to *this var
-// object (LLDB SBValue equivalent).
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
- const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue, const CMIUtilString &vrStrVarObjParentName)
- : m_eVarFormat(eVarFormat_Natural), m_eVarType(eVarType_Internal),
- m_strName(vrStrName), m_SBValue(vrValue), m_strNameReal(vrStrNameReal),
- m_strVarObjParentName(vrStrVarObjParentName) {
- UpdateValue();
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj copy constructor.
-// Type: Method.
-// Args: vrOther - (R) The object to copy from.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
- const CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
- CopyOther(vrOther);
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj copy constructor.
-// Type: Method.
-// Args: vrOther - (R) The object to copy from.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
- CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
- CopyOther(vrOther);
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj move constructor.
-// Type: Method.
-// Args: vrwOther - (R) The object to copy from.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::CMICmnLLDBDebugSessionInfoVarObj(
- CMICmnLLDBDebugSessionInfoVarObj &&vrwOther) {
- MoveOther(vrwOther);
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj assignment operator.
-// Type: Method.
-// Args: vrOther - (R) The object to copy from.
-// Return: CMICmnLLDBDebugSessionInfoVarObj & - Updated *this object.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj &CMICmnLLDBDebugSessionInfoVarObj::
-operator=(const CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
- CopyOther(vrOther);
-
- return *this;
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj assignment operator.
-// Type: Method.
-// Args: vrwOther - (R) The object to copy from.
-// Return: CMICmnLLDBDebugSessionInfoVarObj & - Updated *this object.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj &CMICmnLLDBDebugSessionInfoVarObj::
-operator=(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther) {
- MoveOther(vrwOther);
-
- return *this;
-}
-
-//++
-// Details: Copy the other instance of that object to *this object.
-// Type: Method.
-// Args: vrOther - (R) The object to copy from.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfoVarObj::CopyOther(
- const CMICmnLLDBDebugSessionInfoVarObj &vrOther) {
- // Check for self-assignment
- if (this == &vrOther)
- return MIstatus::success;
-
- m_eVarFormat = vrOther.m_eVarFormat;
- m_eVarType = vrOther.m_eVarType;
- m_strName = vrOther.m_strName;
- m_SBValue = vrOther.m_SBValue;
- m_strNameReal = vrOther.m_strNameReal;
- m_strFormattedValue = vrOther.m_strFormattedValue;
- m_strVarObjParentName = vrOther.m_strVarObjParentName;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Move that object to *this object.
-// Type: Method.
-// Args: vrwOther - (RW) The object to copy from.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfoVarObj::MoveOther(
- CMICmnLLDBDebugSessionInfoVarObj &vrwOther) {
- // Check for self-assignment
- if (this == &vrwOther)
- return MIstatus::success;
-
- CopyOther(vrwOther);
- vrwOther.m_eVarFormat = eVarFormat_Natural;
- vrwOther.m_eVarType = eVarType_Internal;
- vrwOther.m_strName.clear();
- vrwOther.m_SBValue.Clear();
- vrwOther.m_strNameReal.clear();
- vrwOther.m_strFormattedValue.clear();
- vrwOther.m_strVarObjParentName.clear();
-
- return MIstatus::success;
-}
-
-//++
-// Details: CMICmnLLDBDebugSessionInfoVarObj destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::~CMICmnLLDBDebugSessionInfoVarObj() {}
-
-//++
-// Details: Retrieve the var format enumeration for the specified string.
-// Type: Static method.
-// Args: vrStrFormat - (R) Text description of the var format.
-// Return: varFormat_e - Var format enumeration.
-// - No match found return eVarFormat_Invalid.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::varFormat_e
-CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForString(
- const CMIUtilString &vrStrFormat) {
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- for (MIuint i = 0; i < eVarFormat_count; i++) {
- const char *pVarFormatString = ms_aVarFormatStrings[i];
- if (vrStrFormat == pVarFormatString)
- return static_cast<varFormat_e>(i);
- }
-
- return eVarFormat_Invalid;
-}
-
-//++
-// Details: Retrieve the var format enumeration for the specified character.
-// Type: Static method.
-// Args: vcFormat - Character representing the var format.
-// Return: varFormat_e - Var format enumeration.
-// - No match found return eVarFormat_Invalid.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::varFormat_e
-CMICmnLLDBDebugSessionInfoVarObj::GetVarFormatForChar(char vcFormat) {
- if ('r' == vcFormat)
- return eVarFormat_Hex;
-
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- for (MIuint i = 0; i < eVarFormat_count; i++) {
- const char *pVarFormatChar = ms_aVarFormatChars[i];
- if (*pVarFormatChar == vcFormat)
- return static_cast<varFormat_e>(i);
- }
-
- return eVarFormat_Invalid;
-}
-
-//++
-// Details: Return the equivalent var value formatted string for the given value
-// type,
-// which was prepared for printing (i.e. value was escaped and now it's
-// ready
-// for wrapping into quotes).
-// The SBValue vrValue parameter is checked by LLDB private code for
-// valid
-// scalar type via MI Driver proxy function as the valued returned can
-// also be
-// an error condition. The proxy function determines if the check was
-// valid
-// otherwise return an error condition state by other means saying so.
-// Type: Static method.
-// Args: vrValue - (R) The var value object.
-// veVarFormat - (R) Var format enumeration.
-// Returns: CMIUtilString - Value formatted string.
-// Throws: None.
-//--
-CMIUtilString CMICmnLLDBDebugSessionInfoVarObj::GetValueStringFormatted(
- const lldb::SBValue &vrValue,
- const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat) {
- const CMICmnLLDBUtilSBValue utilValue(vrValue, true);
- if (utilValue.IsIntegerType()) {
- MIuint64 nValue = 0;
- if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(vrValue, nValue)) {
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- return GetStringFormatted(nValue, rValue.GetValue(), veVarFormat);
- }
- }
-
- return utilValue.GetValue().AddSlashes();
-}
-
-//++
-// Details: Return number formatted string according to the given value type.
-// Type: Static method.
-// Args: vnValue - (R) The number value to get formatted.
-// vpStrValueNatural - (R) The natural representation of the number
-// value.
-// veVarFormat - (R) Var format enumeration.
-// Returns: CMIUtilString - Numerical formatted string.
-// Throws: None.
-//--
-CMIUtilString CMICmnLLDBDebugSessionInfoVarObj::GetStringFormatted(
- const MIuint64 vnValue, const char *vpStrValueNatural,
- const CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veVarFormat) {
- CMIUtilString strFormattedValue;
- CMICmnLLDBDebugSessionInfoVarObj::varFormat_e veFormat = veVarFormat;
- if (ms_eDefaultFormat != eVarFormat_Invalid &&
- veVarFormat == eVarFormat_Natural) {
- veFormat = ms_eDefaultFormat;
- }
-
- switch (veFormat) {
- case eVarFormat_Binary:
- strFormattedValue = CMIUtilString::FormatBinary(vnValue);
- break;
- case eVarFormat_Octal:
- strFormattedValue = CMIUtilString::Format("0%llo", vnValue);
- break;
- case eVarFormat_Decimal:
- strFormattedValue = CMIUtilString::Format("%lld", vnValue);
- break;
- case eVarFormat_Hex:
- strFormattedValue = CMIUtilString::Format("0x%llx", vnValue);
- break;
- case eVarFormat_Natural:
- default: {
- strFormattedValue = (vpStrValueNatural != nullptr) ? vpStrValueNatural : "";
- }
- }
-
- return strFormattedValue;
-}
-
-//++
-// Details: Delete internal container contents.
-// Type: Static method.
-// Args: None.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::VarObjClear() {
- ms_mapVarIdToVarObj.clear();
-}
-
-//++
-// Details: Add a var object to the internal container.
-// Type: Static method.
-// Args: vrVarObj - (R) The var value object.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::VarObjAdd(
- const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj) {
- VarObjDelete(vrVarObj.GetName());
- MapPairKeyToVarObj_t pr(vrVarObj.GetName(), vrVarObj);
- ms_mapVarIdToVarObj.insert(pr);
-}
-
-//++
-// Details: Delete the var object from the internal container matching the
-// specified name.
-// Type: Static method.
-// Args: vrVarName - (R) The var value name.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::VarObjDelete(
- const CMIUtilString &vrVarName) {
- const MapKeyToVarObj_t::const_iterator it =
- ms_mapVarIdToVarObj.find(vrVarName);
- if (it != ms_mapVarIdToVarObj.end()) {
- ms_mapVarIdToVarObj.erase(it);
- }
-}
-
-//++
-// Details: Update an existing var object in the internal container.
-// Type: Static method.
-// Args: vrVarObj - (R) The var value object.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::VarObjUpdate(
- const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj) {
- VarObjAdd(vrVarObj);
-}
-
-//++
-// Details: Retrieve the var object matching the specified name.
-// Type: Static method.
-// Args: vrVarName - (R) The var value name.
-// vrwVarObj - (W) A var object.
-// Returns: bool - True = object found, false = object not found.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfoVarObj::VarObjGet(
- const CMIUtilString &vrVarName,
- CMICmnLLDBDebugSessionInfoVarObj &vrwVarObj) {
- const MapKeyToVarObj_t::const_iterator it =
- ms_mapVarIdToVarObj.find(vrVarName);
- if (it != ms_mapVarIdToVarObj.end()) {
- const CMICmnLLDBDebugSessionInfoVarObj &rVarObj = (*it).second;
- vrwVarObj = rVarObj;
- return true;
- }
-
- return false;
-}
-
-//++
-// Details: A count is kept of the number of var value objects created. This is
-// count is
-// used to ID the var value object. Reset the count to 0.
-// Type: Static method.
-// Args: None.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::VarObjIdResetToZero() {
- ms_nVarUniqueId = 0;
-}
-
-//++
-// Details: Default format is globally used as the data format when "natural" is
-// in effect, that is, this overrides the default
-// Type: Static method.
-// Args: None.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::VarObjSetFormat(
- varFormat_e eDefaultFormat) {
- ms_eDefaultFormat = eDefaultFormat;
-}
-
-//++
-// Details: A count is kept of the number of var value objects created. This is
-// count is
-// used to ID the var value object. Increment the count by 1.
-// Type: Static method.
-// Args: None.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::VarObjIdInc() { ms_nVarUniqueId++; }
-
-//++
-// Details: A count is kept of the number of var value objects created. This is
-// count is
-// used to ID the var value object. Retrieve ID.
-// Type: Static method.
-// Args: None.
-// Returns: None.
-// Throws: None.
-//--
-MIuint CMICmnLLDBDebugSessionInfoVarObj::VarObjIdGet() {
- return ms_nVarUniqueId;
-}
-
-//++
-// Details: Retrieve the value formatted object's name.
-// Type: Method.
-// Args: None.
-// Returns: CMIUtilString & - Value's var%u name text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLLDBDebugSessionInfoVarObj::GetName() const {
- return m_strName;
-}
-
-//++
-// Details: Retrieve the value formatted object's variable name as given in the
-// MI command
-// to create the var object.
-// Type: Method.
-// Args: None.
-// Returns: CMIUtilString & - Value's real name text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLLDBDebugSessionInfoVarObj::GetNameReal() const {
- return m_strNameReal;
-}
-
-//++
-// Details: Retrieve the value formatted string.
-// Type: Method.
-// Args: None.
-// Returns: CMIUtilString & - Value formatted string.
-// Throws: None.
-//--
-const CMIUtilString &
-CMICmnLLDBDebugSessionInfoVarObj::GetValueFormatted() const {
- return m_strFormattedValue;
-}
-
-//++
-// Details: Retrieve the LLDB Value object.
-// Type: Method.
-// Args: None.
-// Returns: lldb::SBValue & - LLDB Value object.
-// Throws: None.
-//--
-lldb::SBValue &CMICmnLLDBDebugSessionInfoVarObj::GetValue() {
- return m_SBValue;
-}
-
-//++
-// Details: Retrieve the LLDB Value object.
-// Type: Method.
-// Args: None.
-// Returns: lldb::SBValue & - Constant LLDB Value object.
-// Throws: None.
-//--
-const lldb::SBValue &CMICmnLLDBDebugSessionInfoVarObj::GetValue() const {
- return m_SBValue;
-}
-
-//++
-// Details: Set the var format type for *this object and update the formatting.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugSessionInfoVarObj::SetVarFormat(
- const varFormat_e veVarFormat) {
- if (veVarFormat >= eVarFormat_count)
- return MIstatus::failure;
-
- m_eVarFormat = veVarFormat;
- UpdateValue();
- return MIstatus::success;
-}
-
-//++
-// Details: Update *this var obj. Update it's value and type.
-// Type: Method.
-// Args: None.
-// Returns: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugSessionInfoVarObj::UpdateValue() {
- m_strFormattedValue = GetValueStringFormatted(m_SBValue, m_eVarFormat);
-
- MIuint64 nValue = 0;
- if (CMICmnLLDBProxySBValue::GetValueAsUnsigned(m_SBValue, nValue) ==
- MIstatus::failure)
- m_eVarType = eVarType_Composite;
-
- CMICmnLLDBDebugSessionInfoVarObj::VarObjUpdate(*this);
-}
-
-//++
-// Details: Retrieve the enumeration type of the var object.
-// Type: Method.
-// Args: None.
-// Returns: varType_e - Enumeration value.
-// Throws: None.
-//--
-CMICmnLLDBDebugSessionInfoVarObj::varType_e
-CMICmnLLDBDebugSessionInfoVarObj::GetType() const {
- return m_eVarType;
-}
-
-//++
-// Details: Retrieve the parent var object's name, the parent var object to
-// *this var
-// object (if assigned). The parent is equivalent to LLDB SBValue
-// variable's
-// parent.
-// Type: Method.
-// Args: None.
-// Returns: CMIUtilString & - Pointer to var object, NULL = no parent.
-// Throws: None.
-//--
-const CMIUtilString &
-CMICmnLLDBDebugSessionInfoVarObj::GetVarParentName() const {
- return m_strVarObjParentName;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfoVarObj.h (removed)
@@ -1,139 +0,0 @@
-//===-- MICmnLLDBDebugSessionInfoVarObj.h -----------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third Party Headers:
-#include "lldb/API/SBValue.h"
-#include <map>
-
-// In-house headers:
-#include "MIUtilString.h"
-
-//++
-//============================================================================
-// Details: MI debug session variable object. The static functionality in *this
-// class manages a map container of *these variable objects.
-//--
-class CMICmnLLDBDebugSessionInfoVarObj {
- // Enums:
-public:
- //++ ----------------------------------------------------------------------
- // Details: Enumeration of a variable type that is not a composite type
- //--
- enum varFormat_e {
- // CODETAG_SESSIONINFO_VARFORMAT_ENUM
- // *** Order is import here ***
- eVarFormat_Invalid = 0,
- eVarFormat_Binary,
- eVarFormat_Octal,
- eVarFormat_Decimal,
- eVarFormat_Hex,
- eVarFormat_Natural,
- eVarFormat_count // Always last one
- };
-
- //++ ----------------------------------------------------------------------
- // Details: Enumeration of a variable type by composite or internal type
- //--
- enum varType_e {
- eVarType_InValid = 0,
- eVarType_Composite, // i.e. struct
- eVarType_Internal, // i.e. int
- eVarType_count // Always last one
- };
-
- // Statics:
-public:
- static varFormat_e GetVarFormatForString(const CMIUtilString &vrStrFormat);
- static varFormat_e GetVarFormatForChar(char vcFormat);
- static CMIUtilString GetValueStringFormatted(const lldb::SBValue &vrValue,
- const varFormat_e veVarFormat);
- static void VarObjAdd(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
- static void VarObjDelete(const CMIUtilString &vrVarName);
- static bool VarObjGet(const CMIUtilString &vrVarName,
- CMICmnLLDBDebugSessionInfoVarObj &vrwVarObj);
- static void VarObjUpdate(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
- static void VarObjIdInc();
- static MIuint VarObjIdGet();
- static void VarObjIdResetToZero();
- static void VarObjClear();
- static void VarObjSetFormat(varFormat_e eDefaultFormat);
-
- // Methods:
-public:
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj();
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
- const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
- const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
- const lldb::SBValue &vrValue, const CMIUtilString &vrStrVarObjParentName);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
- const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
- CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- /* ctor */ CMICmnLLDBDebugSessionInfoVarObj(
- CMICmnLLDBDebugSessionInfoVarObj &&vrOther);
- //
- CMICmnLLDBDebugSessionInfoVarObj &
- operator=(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- CMICmnLLDBDebugSessionInfoVarObj &
- operator=(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther);
- //
- const CMIUtilString &GetName() const;
- const CMIUtilString &GetNameReal() const;
- const CMIUtilString &GetValueFormatted() const;
- lldb::SBValue &GetValue();
- const lldb::SBValue &GetValue() const;
- varType_e GetType() const;
- bool SetVarFormat(const varFormat_e veVarFormat);
- const CMIUtilString &GetVarParentName() const;
- void UpdateValue();
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ virtual ~CMICmnLLDBDebugSessionInfoVarObj();
-
- // Typedefs:
-private:
- typedef std::map<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj>
- MapKeyToVarObj_t;
- typedef std::pair<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj>
- MapPairKeyToVarObj_t;
-
- // Statics:
-private:
- static CMIUtilString GetStringFormatted(const MIuint64 vnValue,
- const char *vpStrValueNatural,
- varFormat_e veVarFormat);
-
- // Methods:
-private:
- bool CopyOther(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
- bool MoveOther(CMICmnLLDBDebugSessionInfoVarObj &vrwOther);
-
- // Attributes:
-private:
- static const char *ms_aVarFormatStrings[];
- static const char *ms_aVarFormatChars[];
- static MapKeyToVarObj_t ms_mapVarIdToVarObj;
- static MIuint ms_nVarUniqueId;
- static varFormat_e ms_eDefaultFormat; // overrides "natural" format
- //
- // *** Update the copy move constructors and assignment operator ***
- varFormat_e m_eVarFormat;
- varType_e m_eVarType;
- CMIUtilString m_strName;
- lldb::SBValue m_SBValue;
- CMIUtilString m_strNameReal;
- CMIUtilString m_strFormattedValue;
- CMIUtilString m_strVarObjParentName;
- // *** Update the copy move constructors and assignment operator ***
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp (removed)
@@ -1,905 +0,0 @@
-//===-- MICmnLLDBDebugger.cpp -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Third party headers:
-#include "lldb/API/SBCommandInterpreter.h"
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBTarget.h"
-#include "lldb/API/SBThread.h"
-#include "lldb/API/SBType.h"
-#include "lldb/API/SBTypeCategory.h"
-#include "lldb/API/SBTypeNameSpecifier.h"
-#include "lldb/API/SBTypeSummary.h"
-#include <cassert>
-
-// In-house headers:
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebuggerHandleEvents.h"
-#include "MICmnLog.h"
-#include "MICmnResources.h"
-#include "MICmnThreadMgrStd.h"
-#include "MIDriverBase.h"
-#include "MIUtilSingletonHelper.h"
-
-//++
-// MI private summary providers
-static inline bool MI_char_summary_provider(lldb::SBValue value,
- lldb::SBTypeSummaryOptions options,
- lldb::SBStream &stream) {
- if (!value.IsValid())
- return false;
-
- lldb::SBType value_type = value.GetType();
- if (!value_type.IsValid())
- return false;
-
- lldb::BasicType type_code = value_type.GetBasicType();
- if (type_code == lldb::eBasicTypeSignedChar)
- stream.Printf("%d %s", (int)value.GetValueAsSigned(),
- CMIUtilString::WithNullAsEmpty(value.GetValue()));
- else if (type_code == lldb::eBasicTypeUnsignedChar)
- stream.Printf("%u %s", (unsigned)value.GetValueAsUnsigned(),
- CMIUtilString::WithNullAsEmpty(value.GetValue()));
- else
- return false;
-
- return true;
-}
-
-//++
-// MI summary helper routines
-static inline bool MI_add_summary(lldb::SBTypeCategory category,
- const char *typeName,
- lldb::SBTypeSummary::FormatCallback cb,
- uint32_t options, bool regex = false) {
-#if defined(LLDB_DISABLE_PYTHON)
- return false;
-#else
- lldb::SBTypeSummary summary =
- lldb::SBTypeSummary::CreateWithCallback(cb, options);
- return summary.IsValid()
- ? category.AddTypeSummary(
- lldb::SBTypeNameSpecifier(typeName, regex), summary)
- : false;
-#endif
-}
-
-//++
-// Details: CMICmnLLDBDebugger constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugger::CMICmnLLDBDebugger()
- : m_constStrThisThreadId("MI debugger event") {}
-
-//++
-// Details: CMICmnLLDBDebugger destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebugger::~CMICmnLLDBDebugger() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this debugger object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
- ClrErrorDescription();
-
- if (m_pClientDriver == nullptr) {
- bOk = false;
- errMsg = MIRSRC(IDS_LLDBDEBUGGER_ERR_CLIENTDRIVER);
- }
-
- // Note initialization order is important here as some resources depend on
- // previous
- MI::ModuleInit<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
- MI::ModuleInit<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- MI::ModuleInit<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMGR, bOk, errMsg);
- MI::ModuleInit<CMICmnLLDBDebuggerHandleEvents>(
- IDS_MI_INIT_ERR_OUTOFBANDHANDLER, bOk, errMsg);
- MI::ModuleInit<CMICmnLLDBDebugSessionInfo>(IDS_MI_INIT_ERR_DEBUGSESSIONINFO,
- bOk, errMsg);
-
- // Note order is important here!
- if (bOk)
- lldb::SBDebugger::Initialize();
- if (bOk && !InitSBDebugger()) {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg += GetErrorDescription().c_str();
- }
- if (bOk && !InitSBListener()) {
- bOk = false;
- if (!errMsg.empty())
- errMsg += ", ";
- errMsg += GetErrorDescription().c_str();
- }
- bOk = bOk && InitStdStreams();
- bOk = bOk && RegisterMISummaryProviders();
- m_bInitialized = bOk;
-
- if (!bOk && !HaveErrorDescription()) {
- CMIUtilString strInitError(CMIUtilString::Format(
- MIRSRC(IDS_MI_INIT_ERR_LLDBDEBUGGER), errMsg.c_str()));
- SetErrorDescription(strInitError);
- }
-
- return bOk;
-}
-
-//++
-// Details: Release resources for *this debugger object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = false;
-
- ClrErrorDescription();
-
- bool bOk = MIstatus::success;
- CMIUtilString errMsg;
-
- // Explicitly delete the remote target in case MI needs to exit prematurely
- // otherwise
- // LLDB debugger may hang in its Destroy() fn waiting on events
- lldb::SBTarget sbTarget = CMICmnLLDBDebugSessionInfo::Instance().GetTarget();
- m_lldbDebugger.DeleteTarget(sbTarget);
-
- // Debug: May need this but does seem to work without it so commented out the
- // fudge 19/06/2014
- // It appears we need to wait as hang does not occur when hitting a debug
- // breakpoint here
- // const std::chrono::milliseconds time( 1000 );
- // std::this_thread::sleep_for( time );
-
- lldb::SBDebugger::Destroy(m_lldbDebugger);
- lldb::SBDebugger::Terminate();
- m_pClientDriver = nullptr;
- m_mapBroadcastClassNameToEventMask.clear();
- m_mapIdToEventMask.clear();
-
- // Note shutdown order is important here
- MI::ModuleShutdown<CMICmnLLDBDebugSessionInfo>(
- IDS_MI_INIT_ERR_DEBUGSESSIONINFO, bOk, errMsg);
- MI::ModuleShutdown<CMICmnLLDBDebuggerHandleEvents>(
- IDS_MI_INIT_ERR_OUTOFBANDHANDLER, bOk, errMsg);
- MI::ModuleShutdown<CMICmnThreadMgrStd>(IDS_MI_INIT_ERR_THREADMGR, bOk,
- errMsg);
- MI::ModuleShutdown<CMICmnResources>(IDS_MI_INIT_ERR_RESOURCES, bOk, errMsg);
- MI::ModuleShutdown<CMICmnLog>(IDS_MI_INIT_ERR_LOG, bOk, errMsg);
-
- if (!bOk) {
- SetErrorDescriptionn(MIRSRC(IDS_MI_SHTDWN_ERR_LLDBDEBUGGER),
- errMsg.c_str());
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Return the LLDB debugger instance created for this debug session.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBDebugger & - LLDB debugger object reference.
-// Throws: None.
-//--
-lldb::SBDebugger &CMICmnLLDBDebugger::GetTheDebugger() {
- return m_lldbDebugger;
-}
-
-//++
-// Details: Return the LLDB listener instance created for this debug session.
-// Type: Method.
-// Args: None.
-// Return: lldb::SBListener & - LLDB listener object reference.
-// Throws: None.
-//--
-lldb::SBListener &CMICmnLLDBDebugger::GetTheListener() {
- return m_lldbListener;
-}
-
-//++
-// Details: Set the client driver that wants to use *this LLDB debugger. Call
-// this function
-// prior to Initialize().
-// Type: Method.
-// Args: vClientDriver - (R) A driver.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::SetDriver(const CMIDriverBase &vClientDriver) {
- m_pClientDriver = const_cast<CMIDriverBase *>(&vClientDriver);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Get the client driver that is use *this LLDB debugger.
-// Type: Method.
-// Args: vClientDriver - (R) A driver.
-// Return: CMIDriverBase & - A driver instance.
-// Throws: None.
-//--
-CMIDriverBase &CMICmnLLDBDebugger::GetDriver() const {
- return *m_pClientDriver;
-}
-
-//++
-// Details: Wait until all events have been handled.
-// This function works in pair with
-// CMICmnLLDBDebugger::MonitorSBListenerEvents
-// that handles events from queue. When all events were handled and
-// queue is
-// empty the MonitorSBListenerEvents notifies this function that it's
-// ready to
-// go on. To synchronize them the m_mutexEventQueue and
-// m_conditionEventQueueEmpty are used.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugger::WaitForHandleEvent() {
- std::unique_lock<std::mutex> lock(m_mutexEventQueue);
-
- lldb::SBEvent event;
- if (ThreadIsActive() && m_lldbListener.PeekAtNextEvent(event))
- m_conditionEventQueueEmpty.wait(lock);
-}
-
-//++
-// Details: Check if need to rebroadcast stop event. This function will return
-// true if
-// debugger is in synchronouse mode. In such case the
-// CMICmnLLDBDebugger::RebroadcastStopEvent should be called to
-// rebroadcast
-// a new stop event (if any).
-// Type: Method.
-// Args: None.
-// Return: bool - True = Need to rebroadcast stop event, false = otherwise.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::CheckIfNeedToRebroadcastStopEvent() {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- if (!rSessionInfo.GetDebugger().GetAsync()) {
- const bool include_expression_stops = false;
- m_nLastStopId =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess().GetStopID(
- include_expression_stops);
- return true;
- }
-
- return false;
-}
-
-//++
-// Details: Rebroadcast stop event if needed. This function should be called
-// only if the
-// CMICmnLLDBDebugger::CheckIfNeedToRebroadcastStopEvent() returned
-// true.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnLLDBDebugger::RebroadcastStopEvent() {
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const bool include_expression_stops = false;
- const uint32_t nStopId = process.GetStopID(include_expression_stops);
- if (m_nLastStopId != nStopId) {
- lldb::SBEvent event = process.GetStopEventForStopID(nStopId);
- process.GetBroadcaster().BroadcastEvent(event);
- }
-}
-
-//++
-// Details: Initialize the LLDB Debugger object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::InitSBDebugger() {
- m_lldbDebugger = lldb::SBDebugger::Create(false);
- if (!m_lldbDebugger.IsValid()) {
- SetErrorDescription(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDDEBUGGER));
- return MIstatus::failure;
- }
-
- m_lldbDebugger.GetCommandInterpreter().SetPromptOnQuit(false);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Set the LLDB Debugger's std in, err and out streams. (Not
-// implemented left
-// here for reference. Was called in the
-// CMICmnLLDBDebugger::Initialize() )
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::InitStdStreams() {
- // This is not required when operating the MI driver's code as it has its own
- // streams. Setting the Stdin for the lldbDebugger especially on LINUX will
- // cause
- // another thread to run and partially consume stdin data meant for MI stdin
- // handler
- // m_lldbDebugger.SetErrorFileHandle( m_pClientDriver->GetStderr(), false );
- // m_lldbDebugger.SetOutputFileHandle( m_pClientDriver->GetStdout(), false );
- // m_lldbDebugger.SetInputFileHandle( m_pClientDriver->GetStdin(), false );
-
- return MIstatus::success;
-}
-
-//++
-// Details: Set up the events from the SBDebugger's we would like to listen to.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::InitSBListener() {
- m_lldbListener = m_lldbDebugger.GetListener();
- if (!m_lldbListener.IsValid()) {
- SetErrorDescription(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDLISTENER));
- return MIstatus::failure;
- }
-
- const CMIUtilString strDbgId("CMICmnLLDBDebugger1");
- MIuint eventMask = lldb::SBTarget::eBroadcastBitBreakpointChanged |
- lldb::SBTarget::eBroadcastBitModulesLoaded |
- lldb::SBTarget::eBroadcastBitModulesUnloaded |
- lldb::SBTarget::eBroadcastBitWatchpointChanged |
- lldb::SBTarget::eBroadcastBitSymbolsLoaded;
- bool bOk = RegisterForEvent(
- strDbgId, CMIUtilString(lldb::SBTarget::GetBroadcasterClassName()),
- eventMask);
-
- eventMask = lldb::SBThread::eBroadcastBitStackChanged;
- bOk = bOk &&
- RegisterForEvent(
- strDbgId, CMIUtilString(lldb::SBThread::GetBroadcasterClassName()),
- eventMask);
-
- eventMask = lldb::SBProcess::eBroadcastBitStateChanged |
- lldb::SBProcess::eBroadcastBitInterrupt |
- lldb::SBProcess::eBroadcastBitSTDOUT |
- lldb::SBProcess::eBroadcastBitSTDERR |
- lldb::SBProcess::eBroadcastBitProfileData |
- lldb::SBProcess::eBroadcastBitStructuredData;
- bOk = bOk &&
- RegisterForEvent(
- strDbgId, CMIUtilString(lldb::SBProcess::GetBroadcasterClassName()),
- eventMask);
-
- eventMask = lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived |
- lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit |
- lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData |
- lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData;
- bOk = bOk &&
- RegisterForEvent(
- strDbgId, m_lldbDebugger.GetCommandInterpreter().GetBroadcaster(),
- eventMask);
-
- return bOk;
-}
-
-//++
-// Details: Register with the debugger, the SBListener, the type of events you
-// are interested
-// in. Others, like commands, may have already set the mask.
-// Type: Method.
-// Args: vClientName - (R) ID of the client who wants these events
-// set.
-// vBroadcasterClass - (R) The SBBroadcaster's class name.
-// vEventMask - (R) The mask of events to listen for.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::RegisterForEvent(
- const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass,
- const MIuint vEventMask) {
- MIuint existingMask = 0;
- if (!BroadcasterGetMask(vBroadcasterClass, existingMask))
- return MIstatus::failure;
-
- if (!ClientSaveMask(vClientName, vBroadcasterClass, vEventMask))
- return MIstatus::failure;
-
- const char *pBroadCasterName = vBroadcasterClass.c_str();
- MIuint eventMask = vEventMask;
- eventMask += existingMask;
- const MIuint result = m_lldbListener.StartListeningForEventClass(
- m_lldbDebugger, pBroadCasterName, eventMask);
- if (result == 0) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBDEBUGGER_ERR_STARTLISTENER), pBroadCasterName));
- return MIstatus::failure;
- }
-
- return BroadcasterSaveMask(vBroadcasterClass, eventMask);
-}
-
-//++
-// Details: Register with the debugger, the SBListener, the type of events you
-// are interested
-// in. Others, like commands, may have already set the mask.
-// Type: Method.
-// Args: vClientName - (R) ID of the client who wants these events set.
-// vBroadcaster - (R) An SBBroadcaster's derived class.
-// vEventMask - (R) The mask of events to listen for.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::RegisterForEvent(
- const CMIUtilString &vClientName, const lldb::SBBroadcaster &vBroadcaster,
- const MIuint vEventMask) {
- const char *pBroadcasterName = vBroadcaster.GetName();
- if (pBroadcasterName == nullptr) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME),
- MIRSRC(IDS_WORD_INVALIDNULLPTR)));
- return MIstatus::failure;
- }
- CMIUtilString broadcasterName(pBroadcasterName);
- if (broadcasterName.length() == 0) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME),
- MIRSRC(IDS_WORD_INVALIDEMPTY)));
- return MIstatus::failure;
- }
-
- MIuint existingMask = 0;
- if (!BroadcasterGetMask(broadcasterName, existingMask))
- return MIstatus::failure;
-
- if (!ClientSaveMask(vClientName, broadcasterName, vEventMask))
- return MIstatus::failure;
-
- MIuint eventMask = vEventMask;
- eventMask += existingMask;
- const MIuint result =
- m_lldbListener.StartListeningForEvents(vBroadcaster, eventMask);
- if (result == 0) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBDEBUGGER_ERR_STARTLISTENER), pBroadcasterName));
- return MIstatus::failure;
- }
-
- return BroadcasterSaveMask(broadcasterName, eventMask);
-}
-
-//++
-// Details: Unregister with the debugger, the SBListener, the type of events you
-// are no
-// longer interested in. Others, like commands, may still remain
-// interested so
-// an event may not necessarily be stopped.
-// Type: Method.
-// Args: vClientName - (R) ID of the client who no longer requires
-// these events.
-// vBroadcasterClass - (R) The SBBroadcaster's class name.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::UnregisterForEvent(
- const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass) {
- MIuint clientsEventMask = 0;
- if (!ClientGetTheirMask(vClientName, vBroadcasterClass, clientsEventMask))
- return MIstatus::failure;
- if (!ClientRemoveTheirMask(vClientName, vBroadcasterClass))
- return MIstatus::failure;
-
- const MIuint otherClientsEventMask =
- ClientGetMaskForAllClients(vBroadcasterClass);
- MIuint newEventMask = 0;
- for (MIuint i = 0; i < 32; i++) {
- const MIuint bit = MIuint(1) << i;
- const MIuint clientBit = bit & clientsEventMask;
- const MIuint othersBit = bit & otherClientsEventMask;
- if ((clientBit != 0) && (othersBit == 0)) {
- newEventMask += clientBit;
- }
- }
-
- const char *pBroadCasterName = vBroadcasterClass.c_str();
- if (!m_lldbListener.StopListeningForEventClass(
- m_lldbDebugger, pBroadCasterName, newEventMask)) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_STOPLISTENER),
- vClientName.c_str(), pBroadCasterName));
- return MIstatus::failure;
- }
-
- return BroadcasterSaveMask(vBroadcasterClass, otherClientsEventMask);
-}
-
-//++
-// Details: Given the SBBroadcaster class name retrieve it's current event mask.
-// Type: Method.
-// Args: vBroadcasterClass - (R) The SBBroadcaster's class name.
-// vEventMask - (W) The mask of events to listen for.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::BroadcasterGetMask(
- const CMIUtilString &vBroadcasterClass, MIuint &vwEventMask) const {
- vwEventMask = 0;
-
- if (vBroadcasterClass.empty()) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER),
- vBroadcasterClass.c_str()));
- return MIstatus::failure;
- }
-
- const MapBroadcastClassNameToEventMask_t::const_iterator it =
- m_mapBroadcastClassNameToEventMask.find(vBroadcasterClass);
- if (it != m_mapBroadcastClassNameToEventMask.end()) {
- vwEventMask = (*it).second;
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Remove the event mask for the specified SBBroadcaster class name.
-// Type: Method.
-// Args: vBroadcasterClass - (R) The SBBroadcaster's class name.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::BroadcasterRemoveMask(
- const CMIUtilString &vBroadcasterClass) {
- MapBroadcastClassNameToEventMask_t::const_iterator it =
- m_mapBroadcastClassNameToEventMask.find(vBroadcasterClass);
- if (it != m_mapBroadcastClassNameToEventMask.end()) {
- m_mapBroadcastClassNameToEventMask.erase(it);
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Given the SBBroadcaster class name save it's current event mask.
-// Type: Method.
-// Args: vBroadcasterClass - (R) The SBBroadcaster's class name.
-// vEventMask - (R) The mask of events to listen for.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::BroadcasterSaveMask(
- const CMIUtilString &vBroadcasterClass, const MIuint vEventMask) {
- if (vBroadcasterClass.empty()) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER),
- vBroadcasterClass.c_str()));
- return MIstatus::failure;
- }
-
- BroadcasterRemoveMask(vBroadcasterClass);
- MapPairBroadcastClassNameToEventMask_t pr(vBroadcasterClass, vEventMask);
- m_mapBroadcastClassNameToEventMask.insert(pr);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Iterate all the clients who have registered event masks against
-// particular
-// SBBroadcasters and build up the mask that is for all of them.
-// Type: Method.
-// Args: vBroadcasterClass - (R) The broadcaster to retrieve the mask for.
-// Return: MIuint - Event mask.
-// Throws: None.
-//--
-MIuint CMICmnLLDBDebugger::ClientGetMaskForAllClients(
- const CMIUtilString &vBroadcasterClass) const {
- MIuint mask = 0;
- MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.begin();
- while (it != m_mapIdToEventMask.end()) {
- const CMIUtilString &rId((*it).first);
- if (rId.find(vBroadcasterClass) != std::string::npos) {
- const MIuint clientsMask = (*it).second;
- mask |= clientsMask;
- }
-
- // Next
- ++it;
- }
-
- return mask;
-}
-
-//++
-// Details: Given the client save its particular event requirements.
-// Type: Method.
-// Args: vClientName - (R) The Client's unique ID.
-// vBroadcasterClass - (R) The SBBroadcaster's class name targeted for
-// the events.
-// vEventMask - (R) The mask of events to listen for.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::ClientSaveMask(const CMIUtilString &vClientName,
- const CMIUtilString &vBroadcasterClass,
- const MIuint vEventMask) {
- if (vClientName.empty()) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
- return MIstatus::failure;
- }
-
- CMIUtilString strId(vBroadcasterClass);
- strId += vClientName;
-
- ClientRemoveTheirMask(vClientName, vBroadcasterClass);
- MapPairIdToEventMask_t pr(strId, vEventMask);
- m_mapIdToEventMask.insert(pr);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Given the client remove it's particular event requirements.
-// Type: Method.
-// Args: vClientName - (R) The Client's unique ID.
-// vBroadcasterClass - (R) The SBBroadcaster's class name.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::ClientRemoveTheirMask(
- const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass) {
- if (vClientName.empty()) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
- return MIstatus::failure;
- }
-
- CMIUtilString strId(vBroadcasterClass);
- strId += vClientName;
-
- const MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.find(strId);
- if (it != m_mapIdToEventMask.end()) {
- m_mapIdToEventMask.erase(it);
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve the client's event mask used for on a particular
-// SBBroadcaster.
-// Type: Method.
-// Args: vClientName - (R) The Client's unique ID.
-// vBroadcasterClass - (R) The SBBroadcaster's class name.
-// vwEventMask - (W) The client's mask.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::ClientGetTheirMask(
- const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass,
- MIuint &vwEventMask) {
- vwEventMask = 0;
-
- if (vClientName.empty()) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME), vClientName.c_str()));
- return MIstatus::failure;
- }
-
- const CMIUtilString strId(vBroadcasterClass + vClientName);
- const MapIdToEventMask_t::const_iterator it = m_mapIdToEventMask.find(strId);
- if (it != m_mapIdToEventMask.end()) {
- vwEventMask = (*it).second;
- }
-
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBDEBUGGER_ERR_CLIENTNOTREGISTERED), vClientName.c_str()));
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Momentarily wait for an events being broadcast and inspect those
-// that do
-// come this way. Check if the target should exit event if so start
-// shutting
-// down this thread and the application. Any other events pass on to
-// the
-// Out-of-band handler to further determine what kind of event arrived.
-// This function runs in the thread "MI debugger event".
-// Type: Method.
-// Args: vrbIsAlive - (W) False = yes exit event monitoring thread, true =
-// continue.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::MonitorSBListenerEvents(bool &vrbIsAlive) {
- vrbIsAlive = true;
-
- // Lock the mutex of event queue
- // Note that it should be locked while we are in
- // CMICmnLLDBDebugger::MonitorSBListenerEvents to
- // avoid a race condition with CMICmnLLDBDebugger::WaitForHandleEvent
- std::unique_lock<std::mutex> lock(m_mutexEventQueue);
-
- lldb::SBEvent event;
- const bool bGotEvent = m_lldbListener.GetNextEvent(event);
- if (!bGotEvent) {
- // Notify that we are finished and unlock the mutex of event queue before
- // sleeping
- m_conditionEventQueueEmpty.notify_one();
- lock.unlock();
-
- // Wait a bit to reduce CPU load
- const std::chrono::milliseconds time(1);
- std::this_thread::sleep_for(time);
- return MIstatus::success;
- }
- assert(event.IsValid());
- assert(event.GetBroadcaster().IsValid());
-
- // Debugging
- m_pLog->WriteLog(CMIUtilString::Format("##### An event occurred: %s",
- event.GetBroadcasterClass()));
-
- bool bHandledEvent = false;
- bool bOk = false;
- {
- // Lock Mutex before handling events so that we don't disturb a running cmd
- CMIUtilThreadLock lock(
- CMICmnLLDBDebugSessionInfo::Instance().GetSessionMutex());
- bOk = CMICmnLLDBDebuggerHandleEvents::Instance().HandleEvent(event,
- bHandledEvent);
- }
-
- if (!bHandledEvent) {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LLDBDEBUGGER_WRN_UNKNOWN_EVENT),
- event.GetBroadcasterClass()));
- m_pLog->WriteLog(msg);
- }
-
- if (!bOk)
- m_pLog->WriteLog(
- CMICmnLLDBDebuggerHandleEvents::Instance().GetErrorDescription());
-
- return MIstatus::success;
-}
-
-//++
-// Details: The main worker method for this thread.
-// Type: Method.
-// Args: vrbIsAlive - (W) True = *this thread is working, false = thread has
-// exited.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::ThreadRun(bool &vrbIsAlive) {
- return MonitorSBListenerEvents(vrbIsAlive);
-}
-
-//++
-// Details: Let this thread clean up after itself.
-// Type: Method.
-// Args:
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::ThreadFinish() { return MIstatus::success; }
-
-//++
-// Details: Retrieve *this thread object's name.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString & - Text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLLDBDebugger::ThreadGetName() const {
- return m_constStrThisThreadId;
-}
-
-//++
-// Details: Loads lldb-mi formatters
-// Type: Method.
-// Args: None.
-// Return: true - Functionality succeeded.
-// false - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::LoadMIFormatters(lldb::SBTypeCategory miCategory) {
- if (!MI_add_summary(miCategory, "char", MI_char_summary_provider,
- lldb::eTypeOptionHideValue |
- lldb::eTypeOptionSkipPointers))
- return false;
-
- if (!MI_add_summary(miCategory, "unsigned char", MI_char_summary_provider,
- lldb::eTypeOptionHideValue |
- lldb::eTypeOptionSkipPointers))
- return false;
-
- if (!MI_add_summary(miCategory, "signed char", MI_char_summary_provider,
- lldb::eTypeOptionHideValue |
- lldb::eTypeOptionSkipPointers))
- return false;
-
- return true;
-}
-
-//++
-// Details: Registers lldb-mi custom summary providers
-// Type: Method.
-// Args: None.
-// Return: true - Functionality succeeded.
-// false - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebugger::RegisterMISummaryProviders() {
- static const char *miCategoryName = "lldb-mi";
- lldb::SBTypeCategory miCategory =
- m_lldbDebugger.CreateCategory(miCategoryName);
- if (!miCategory.IsValid())
- return false;
-
- if (!LoadMIFormatters(miCategory)) {
- m_lldbDebugger.DeleteCategory(miCategoryName);
- return false;
- }
- miCategory.SetEnabled(true);
- return true;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.h (removed)
@@ -1,134 +0,0 @@
-//===-- MICmnLLDBDebugger.h -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers
-#include "lldb/API/SBDebugger.h"
-#include "lldb/API/SBEvent.h"
-#include "lldb/API/SBListener.h"
-#include <condition_variable>
-#include <map>
-#include <mutex>
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
-#include "MIUtilThreadBaseStd.h"
-
-// Declarations:
-class CMIDriverBase;
-class CMICmnLLDBDebuggerHandleEvents;
-
-//++
-//============================================================================
-// Details: MI proxy/adapter for the LLDB public SBDebugger API. The CMIDriver
-// requires *this object. Command classes make calls on *this object
-// to facilitate their work effort. The instance runs in its own worker
-// thread.
-// A singleton class.
-//--
-class CMICmnLLDBDebugger : public CMICmnBase,
- public CMIUtilThreadActiveObjBase,
- public MI::ISingleton<CMICmnLLDBDebugger> {
- friend class MI::ISingleton<CMICmnLLDBDebugger>;
-
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
-
- bool SetDriver(const CMIDriverBase &vClientDriver);
- CMIDriverBase &GetDriver() const;
- lldb::SBDebugger &GetTheDebugger();
- lldb::SBListener &GetTheListener();
- void WaitForHandleEvent();
- bool CheckIfNeedToRebroadcastStopEvent();
- void RebroadcastStopEvent();
-
- // MI Commands can use these functions to listen for events they require
- bool RegisterForEvent(const CMIUtilString &vClientName,
- const CMIUtilString &vBroadcasterClass,
- const MIuint vEventMask);
- bool UnregisterForEvent(const CMIUtilString &vClientName,
- const CMIUtilString &vBroadcasterClass);
- bool RegisterForEvent(const CMIUtilString &vClientName,
- const lldb::SBBroadcaster &vBroadcaster,
- const MIuint vEventMask);
- bool UnregisterForEvent(const CMIUtilString &vClientName,
- const lldb::SBBroadcaster &vBroadcaster);
-
- // Overridden:
-public:
- // From CMIUtilThreadActiveObjBase
- const CMIUtilString &ThreadGetName() const override;
-
- // Overridden:
-protected:
- // From CMIUtilThreadActiveObjBase
- bool ThreadRun(bool &vrIsAlive) override;
- bool ThreadFinish() override;
-
- // Typedefs:
-private:
- typedef std::map<CMIUtilString, MIuint> MapBroadcastClassNameToEventMask_t;
- typedef std::pair<CMIUtilString, MIuint>
- MapPairBroadcastClassNameToEventMask_t;
- typedef std::map<CMIUtilString, MIuint> MapIdToEventMask_t;
- typedef std::pair<CMIUtilString, MIuint> MapPairIdToEventMask_t;
-
- // Methods:
-private:
- /* ctor */ CMICmnLLDBDebugger();
- /* ctor */ CMICmnLLDBDebugger(const CMICmnLLDBDebugger &);
- void operator=(const CMICmnLLDBDebugger &);
-
- bool InitSBDebugger();
- bool InitSBListener();
- bool InitStdStreams();
- bool MonitorSBListenerEvents(bool &vrbYesExit);
-
- bool BroadcasterGetMask(const CMIUtilString &vBroadcasterClass,
- MIuint &vEventMask) const;
- bool BroadcasterRemoveMask(const CMIUtilString &vBroadcasterClass);
- bool BroadcasterSaveMask(const CMIUtilString &vBroadcasterClass,
- const MIuint vEventMask);
-
- MIuint
- ClientGetMaskForAllClients(const CMIUtilString &vBroadcasterClass) const;
- bool ClientSaveMask(const CMIUtilString &vClientName,
- const CMIUtilString &vBroadcasterClass,
- const MIuint vEventMask);
- bool ClientRemoveTheirMask(const CMIUtilString &vClientName,
- const CMIUtilString &vBroadcasterClass);
- bool ClientGetTheirMask(const CMIUtilString &vClientName,
- const CMIUtilString &vBroadcasterClass,
- MIuint &vwEventMask);
- bool LoadMIFormatters(lldb::SBTypeCategory miCategory);
- bool RegisterMISummaryProviders();
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBDebugger() override;
-
- // Attributes:
-private:
- CMIDriverBase
- *m_pClientDriver; // The driver that wants to use *this LLDB debugger
- lldb::SBDebugger m_lldbDebugger; // SBDebugger is the primordial object that
- // creates SBTargets and provides access to
- // them
- lldb::SBListener m_lldbListener; // API clients can register its own listener
- // to debugger events
- const CMIUtilString m_constStrThisThreadId;
- MapBroadcastClassNameToEventMask_t m_mapBroadcastClassNameToEventMask;
- MapIdToEventMask_t m_mapIdToEventMask;
- std::mutex m_mutexEventQueue;
- std::condition_variable m_conditionEventQueueEmpty;
- uint32_t m_nLastStopId;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp (removed)
@@ -1,1883 +0,0 @@
-//===-- MICmnLLDBDebuggerHandleEvents.cpp -----------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Third party headers:
-#include "lldb/API/SBAddress.h"
-#include "lldb/API/SBBreakpoint.h"
-#include "lldb/API/SBCommandInterpreter.h"
-#include "lldb/API/SBCommandReturnObject.h"
-#include "lldb/API/SBEvent.h"
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBStream.h"
-#include "lldb/API/SBTarget.h"
-#include "lldb/API/SBThread.h"
-#include "lldb/API/SBUnixSignals.h"
-#include "llvm/Support/Compiler.h"
-#ifdef _WIN32
-#include <io.h>
-#else
-#include <unistd.h>
-#endif // _WIN32
-
-// In-house headers:
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBDebugger.h"
-#include "MICmnLLDBDebuggerHandleEvents.h"
-#include "MICmnLog.h"
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnMIResultRecord.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIValueList.h"
-#include "MICmnResources.h"
-#include "MICmnStreamStderr.h"
-#include "MICmnStreamStdout.h"
-#include "MIDriver.h"
-#include "MIUtilDebug.h"
-#include "Platform.h"
-
-#include <algorithm>
-
-//++
-// Details: CMICmnLLDBDebuggerHandleEvents constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebuggerHandleEvents::CMICmnLLDBDebuggerHandleEvents() {}
-
-//++
-// Details: CMICmnLLDBDebuggerHandleEvents destructor.
-// Type: Overridable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBDebuggerHandleEvents::~CMICmnLLDBDebuggerHandleEvents() {
- Shutdown();
-}
-
-//++
-// Details: Initialize resources for *this broadcaster object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- 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;
-}
-
-//++
-// Details: Release resources for *this broadcaster object.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- m_bInitialized = false;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Interpret the event object to ascertain the action to take or
-// information to
-// to form and put in a MI Out-of-band record object which is given to
-// stdout.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// vrbHandledEvent - (W) True - event handled, false = not handled.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEvent(const lldb::SBEvent &vEvent,
- bool &vrbHandledEvent) {
- bool bOk = MIstatus::success;
- vrbHandledEvent = false;
-
- if (lldb::SBProcess::EventIsProcessEvent(vEvent)) {
- vrbHandledEvent = true;
- bOk = HandleEventSBProcess(vEvent);
- } else if (lldb::SBBreakpoint::EventIsBreakpointEvent(vEvent)) {
- vrbHandledEvent = true;
- bOk = HandleEventSBBreakPoint(vEvent);
- } else if (lldb::SBThread::EventIsThreadEvent(vEvent)) {
- vrbHandledEvent = true;
- bOk = HandleEventSBThread(vEvent);
- } else if (lldb::SBTarget::EventIsTargetEvent(vEvent)) {
- vrbHandledEvent = true;
- bOk = HandleEventSBTarget(vEvent);
- } else if (lldb::SBCommandInterpreter::EventIsCommandInterpreterEvent(
- vEvent)) {
- vrbHandledEvent = true;
- bOk = HandleEventSBCommandInterpreter(vEvent);
- }
-
- return bOk;
-}
-
-//++
-// Details: Handle a LLDB SBProcess event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBProcess(
- const lldb::SBEvent &vEvent) {
- bool bOk = MIstatus::success;
-
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType) {
- case lldb::SBProcess::eBroadcastBitInterrupt:
- pEventType = "eBroadcastBitInterrupt";
- break;
- case lldb::SBProcess::eBroadcastBitProfileData:
- pEventType = "eBroadcastBitProfileData";
- break;
- case lldb::SBProcess::eBroadcastBitStructuredData:
- pEventType = "eBroadcastBitStructuredData";
- break;
- case lldb::SBProcess::eBroadcastBitStateChanged:
- pEventType = "eBroadcastBitStateChanged";
- bOk = HandleProcessEventBroadcastBitStateChanged(vEvent);
- break;
- case lldb::SBProcess::eBroadcastBitSTDERR:
- pEventType = "eBroadcastBitSTDERR";
- bOk = GetProcessStderr();
- break;
- case lldb::SBProcess::eBroadcastBitSTDOUT:
- pEventType = "eBroadcastBitSTDOUT";
- bOk = GetProcessStdout();
- break;
- default: {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
- "SBProcess", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format(
- "##### An SB Process event occurred: %s", pEventType));
-
- return bOk;
-}
-
-//++
-// Details: Handle a LLDB SBBreakpoint event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakPoint(
- const lldb::SBEvent &vEvent) {
- bool bOk = MIstatus::success;
-
- const char *pEventType = "";
- const lldb::BreakpointEventType eEvent =
- lldb::SBBreakpoint::GetBreakpointEventTypeFromEvent(vEvent);
- switch (eEvent) {
- case lldb::eBreakpointEventTypeThreadChanged:
- pEventType = "eBreakpointEventTypeThreadChanged";
- break;
- case lldb::eBreakpointEventTypeLocationsRemoved:
- pEventType = "eBreakpointEventTypeLocationsRemoved";
- break;
- case lldb::eBreakpointEventTypeInvalidType:
- pEventType = "eBreakpointEventTypeInvalidType";
- break;
- case lldb::eBreakpointEventTypeLocationsAdded:
- pEventType = "eBreakpointEventTypeLocationsAdded";
- bOk = HandleEventSBBreakpointLocationsAdded(vEvent);
- break;
- case lldb::eBreakpointEventTypeAdded:
- pEventType = "eBreakpointEventTypeAdded";
- bOk = HandleEventSBBreakpointAdded(vEvent);
- break;
- case lldb::eBreakpointEventTypeRemoved:
- pEventType = "eBreakpointEventTypeRemoved";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeLocationsResolved:
- pEventType = "eBreakpointEventTypeLocationsResolved";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeEnabled:
- pEventType = "eBreakpointEventTypeEnabled";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeDisabled:
- pEventType = "eBreakpointEventTypeDisabled";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeCommandChanged:
- pEventType = "eBreakpointEventTypeCommandChanged";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeConditionChanged:
- pEventType = "eBreakpointEventTypeConditionChanged";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeIgnoreChanged:
- pEventType = "eBreakpointEventTypeIgnoreChanged";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- case lldb::eBreakpointEventTypeAutoContinueChanged:
- pEventType = "eBreakpointEventTypeAutoContinueChanged";
- bOk = HandleEventSBBreakpointCmn(vEvent);
- break;
- }
- m_pLog->WriteLog(CMIUtilString::Format(
- "##### An SB Breakpoint event occurred: %s", pEventType));
-
- return bOk;
-}
-
-//++
-// Details: Handle a LLDB SBBreakpoint event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointLocationsAdded(
- const lldb::SBEvent &vEvent) {
- const MIuint nLoc =
- lldb::SBBreakpoint::GetNumBreakpointLocationsFromEvent(vEvent);
- if (nLoc == 0)
- return MIstatus::success;
-
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
- const CMIUtilString plural((nLoc == 1) ? "" : "s");
- const CMIUtilString msg(
- CMIUtilString::Format("%d location%s added to breakpoint %d", nLoc,
- plural.c_str(), brkPt.GetID()));
-
- return TextToStdout(msg);
-}
-
-//++
-// Details: Handle a LLDB SBBreakpoint event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointCmn(
- const lldb::SBEvent &vEvent) {
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
- if (!brkPt.IsValid())
- return MIstatus::success;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo)) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET),
- "HandleEventSBBreakpointCmn()", brkPt.GetID()));
- return MIstatus::failure;
- }
-
- // CODETAG_LLDB_BREAKPOINT_CREATION
- // This is in a worker thread
- // Add more breakpoint information or overwrite existing information
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
- if (!rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec)) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_NOTFOUND),
- "HandleEventSBBreakpointCmn()", brkPt.GetID()));
- return MIstatus::failure;
- }
- sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp = "";
- sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
- sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
- sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
- sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
- sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
- sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
- sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
- sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
-
- // MI print
- // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
- // PRIx64 "\",
- // func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple)) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE),
- "HandleEventSBBreakpointCmn()"));
- return MIstatus::failure;
- }
-
- const CMICmnMIValueResult miValueResultC("bkpt", miValueTuple);
- const CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResultC);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
- return bOk;
-}
-
-//++
-// Details: Handle a LLDB SBBreakpoint added event.
-// Add more breakpoint information or overwrite existing information.
-// Normally a break point session info objects exists by now when an MI
-// command
-// was issued to insert a break so the retrieval would normally always
-// succeed
-// however should a user type "b main" into a console then LLDB will
-// create a
-// breakpoint directly, hence no MI command, hence no previous record
-// of the
-// breakpoint so RecordBrkPtInfoGet() will fail. We still get the event
-// though
-// so need to create a breakpoint info object here and send appropriate
-// MI
-// response.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBBreakpointAdded(
- const lldb::SBEvent &vEvent) {
- lldb::SBBreakpoint brkPt = lldb::SBBreakpoint::GetBreakpointFromEvent(vEvent);
- if (!brkPt.IsValid())
- return MIstatus::success;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfo;
- if (!rSessionInfo.GetBrkPtInfo(brkPt, sBrkPtInfo)) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET),
- "HandleEventSBBreakpointAdded()", brkPt.GetID()));
- return MIstatus::failure;
- }
-
- // CODETAG_LLDB_BREAKPOINT_CREATION
- // This is in a worker thread
- CMICmnLLDBDebugSessionInfo::SBrkPtInfo sBrkPtInfoRec;
- const bool bBrkPtExistAlready =
- rSessionInfo.RecordBrkPtInfoGet(brkPt.GetID(), sBrkPtInfoRec);
- if (bBrkPtExistAlready) {
- // Update breakpoint information object
- sBrkPtInfo.m_bDisp = sBrkPtInfoRec.m_bDisp;
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp.clear();
- sBrkPtInfo.m_nTimes = brkPt.GetHitCount();
- sBrkPtInfo.m_strOrigLoc = sBrkPtInfoRec.m_strOrigLoc;
- sBrkPtInfo.m_nIgnore = sBrkPtInfoRec.m_nIgnore;
- sBrkPtInfo.m_bPending = sBrkPtInfoRec.m_bPending;
- sBrkPtInfo.m_bCondition = sBrkPtInfoRec.m_bCondition;
- sBrkPtInfo.m_strCondition = sBrkPtInfoRec.m_strCondition;
- sBrkPtInfo.m_bBrkPtThreadId = sBrkPtInfoRec.m_bBrkPtThreadId;
- sBrkPtInfo.m_nBrkPtThreadId = sBrkPtInfoRec.m_nBrkPtThreadId;
- } else {
- // Create a breakpoint information object
- sBrkPtInfo.m_bDisp = brkPt.IsOneShot();
- sBrkPtInfo.m_bEnabled = brkPt.IsEnabled();
- sBrkPtInfo.m_bHaveArgOptionThreadGrp = false;
- sBrkPtInfo.m_strOptThrdGrp.clear();
- sBrkPtInfo.m_strOrigLoc = CMIUtilString::Format(
- "%s:%d", sBrkPtInfo.m_fileName.c_str(), sBrkPtInfo.m_nLine);
- sBrkPtInfo.m_nIgnore = brkPt.GetIgnoreCount();
- sBrkPtInfo.m_bPending = false;
- const char *pStrCondition = brkPt.GetCondition();
- sBrkPtInfo.m_bCondition = pStrCondition != nullptr;
- sBrkPtInfo.m_strCondition =
- (pStrCondition != nullptr) ? pStrCondition : "??";
- sBrkPtInfo.m_bBrkPtThreadId = brkPt.GetThreadID() != 0;
- sBrkPtInfo.m_nBrkPtThreadId = brkPt.GetThreadID();
- }
-
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormBrkPtInfo(sBrkPtInfo, miValueTuple)) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE),
- "HandleEventSBBreakpointAdded()"));
- return MIstatus::failure;
- }
-
- bool bOk = MIstatus::success;
- if (bBrkPtExistAlready) {
- // MI print
- // "=breakpoint-modified,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
- // PRIx64
- // "\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
- const CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified, miValueResult);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- } else {
- // CODETAG_LLDB_BRKPT_ID_MAX
- if (brkPt.GetID() > (lldb::break_id_t)rSessionInfo.m_nBrkPointCntMax) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_CMD_ERR_BRKPT_CNT_EXCEEDED),
- "HandleEventSBBreakpointAdded()", rSessionInfo.m_nBrkPointCntMax,
- sBrkPtInfo.m_id));
- return MIstatus::failure;
- }
- if (!rSessionInfo.RecordBrkPtInfo(brkPt.GetID(), sBrkPtInfo)) {
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_SET),
- "HandleEventSBBreakpointAdded()", sBrkPtInfo.m_id));
- return MIstatus::failure;
- }
-
- // MI print
- // "=breakpoint-created,bkpt={number=\"%d\",type=\"breakpoint\",disp=\"%s\",enabled=\"%c\",addr=\"0x%016"
- // PRIx64
- // "\",func=\"%s\",file=\"%s\",fullname=\"%s/%s\",line=\"%d\",times=\"%d\",original-location=\"%s\"}"
- const CMICmnMIValueResult miValueResult("bkpt", miValueTuple);
- const CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated, miValueResult);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- }
-
- return bOk;
-}
-
-//++
-// Details: Handle a LLDB SBThread event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThread(
- const lldb::SBEvent &vEvent) {
- if (!ChkForStateChanges())
- return MIstatus::failure;
-
- bool bOk = MIstatus::success;
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType) {
- case lldb::SBThread::eBroadcastBitStackChanged:
- pEventType = "eBroadcastBitStackChanged";
- bOk = HandleEventSBThreadBitStackChanged(vEvent);
- break;
- case lldb::SBThread::eBroadcastBitThreadSuspended:
- pEventType = "eBroadcastBitThreadSuspended";
- bOk = HandleEventSBThreadSuspended(vEvent);
- break;
- case lldb::SBThread::eBroadcastBitThreadResumed:
- pEventType = "eBroadcastBitThreadResumed";
- break;
- case lldb::SBThread::eBroadcastBitSelectedFrameChanged:
- pEventType = "eBroadcastBitSelectedFrameChanged";
- break;
- case lldb::SBThread::eBroadcastBitThreadSelected:
- pEventType = "eBroadcastBitThreadSelected";
- break;
- default: {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
- "SBThread", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format("##### An SBThread event occurred: %s",
- pEventType));
-
- return bOk;
-}
-
-//++
-// Details: Handle a LLDB SBThread event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadSuspended(
- const lldb::SBEvent &vEvent) {
- lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
- if (!thread.IsValid())
- return MIstatus::success;
-
- const lldb::StopReason eStopReason = thread.GetStopReason();
- if (eStopReason != lldb::eStopReasonSignal)
- return MIstatus::success;
-
- // MI print "@thread=%d,signal=%lld"
- const MIuint64 nId = thread.GetStopReasonDataAtIndex(0);
- const CMIUtilString strThread(
- CMIUtilString::Format("%d", thread.GetThreadID()));
- const CMICmnMIValueConst miValueConst(strThread);
- const CMICmnMIValueResult miValueResult("thread", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_Thread, miValueResult);
- const CMIUtilString strSignal(CMIUtilString::Format("%lld", nId));
- const CMICmnMIValueConst miValueConst2(strSignal);
- const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- return MiOutOfBandRecordToStdout(miOutOfBandRecord);
-}
-
-//++
-// Details: Handle a LLDB SBThread event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBThreadBitStackChanged(
- const lldb::SBEvent &vEvent) {
- lldb::SBThread thread = lldb::SBThread::GetThreadFromEvent(vEvent);
- if (!thread.IsValid())
- return MIstatus::success;
-
- lldb::SBStream streamOut;
- const bool bOk = thread.GetStatus(streamOut);
- return bOk && TextToStdout(streamOut.GetData());
-}
-
-//++
-// Details: Handle a LLDB SBTarget event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBTarget(
- const lldb::SBEvent &vEvent) {
- if (!ChkForStateChanges())
- return MIstatus::failure;
-
- bool bOk = MIstatus::success;
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType) {
- case lldb::SBTarget::eBroadcastBitBreakpointChanged:
- pEventType = "eBroadcastBitBreakpointChanged";
- break;
- case lldb::SBTarget::eBroadcastBitModulesLoaded:
- pEventType = "eBroadcastBitModulesLoaded";
- bOk = HandleTargetEventBroadcastBitModulesLoaded(vEvent);
- break;
- case lldb::SBTarget::eBroadcastBitModulesUnloaded:
- pEventType = "eBroadcastBitModulesUnloaded";
- bOk = HandleTargetEventBroadcastBitModulesUnloaded(vEvent);
- break;
- case lldb::SBTarget::eBroadcastBitWatchpointChanged:
- pEventType = "eBroadcastBitWatchpointChanged";
- break;
- case lldb::SBTarget::eBroadcastBitSymbolsLoaded:
- pEventType = "eBroadcastBitSymbolsLoaded";
- break;
- default: {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
- "SBTarget", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format("##### An SBTarget event occurred: %s",
- pEventType));
-
- return bOk;
-}
-
-//++
-// Details: Print to stdout
-// "=library-loaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016"
-// PRIx64"\""
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleTargetEventBroadcastBitModulesLoaded(
- const lldb::SBEvent &vEvent) {
- bool bOk = MIstatus::failure;
- const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent);
- for (MIuint nIndex = 0; nIndex < nSize; ++nIndex) {
- const lldb::SBModule sbModule =
- lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded);
- const bool bWithExtraFields = true;
- bOk = MiHelpGetModuleInfo(sbModule, bWithExtraFields, miOutOfBandRecord);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- break;
- }
-
- return bOk;
-}
-
-//++
-// Details: Print to stdout
-// "=library-unloaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016"
-// PRIx64"\""
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::
- HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent) {
- bool bOk = MIstatus::failure;
- const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent);
- for (MIuint nIndex = 0; nIndex < nSize; ++nIndex) {
- const lldb::SBModule sbModule =
- lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded);
- const bool bWithExtraFields = false;
- bOk = MiHelpGetModuleInfo(sbModule, bWithExtraFields, miOutOfBandRecord);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- break;
- }
-
- return bOk;
-}
-
-//++
-// Details: Build module information for =library-loaded/=library-unloaded:
-// "id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016"
-// PRIx64"\""
-// Type: Method.
-// Args: vwrMiValueList - (W) MI value list object.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::MiHelpGetModuleInfo(
- const lldb::SBModule &vModule, const bool vbWithExtraFields,
- CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord) {
- bool bOk = MIstatus::success;
-
- // First, build standard fields:
- // Build "id" field
- std::unique_ptr<char[]> apPath(new char[PATH_MAX]);
- vModule.GetFileSpec().GetPath(apPath.get(), PATH_MAX);
- const CMIUtilString strTargetPath(apPath.get());
- const CMICmnMIValueConst miValueConst(strTargetPath.AddSlashes());
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- vwrMiOutOfBandRecord.Add(miValueResult);
- // Build "target-name" field
- const CMICmnMIValueConst miValueConst2(strTargetPath.AddSlashes());
- const CMICmnMIValueResult miValueResult2("target-name", miValueConst2);
- vwrMiOutOfBandRecord.Add(miValueResult2);
- // Build "host-name" field
- vModule.GetPlatformFileSpec().GetPath(apPath.get(), PATH_MAX);
- const CMIUtilString strHostPath(apPath.get());
- const CMICmnMIValueConst miValueConst3(strHostPath.AddSlashes());
- const CMICmnMIValueResult miValueResult3("host-name", miValueConst3);
- vwrMiOutOfBandRecord.Add(miValueResult3);
-
- // Then build extra fields if needed:
- if (vbWithExtraFields) {
- // Build "symbols-loaded" field
- vModule.GetSymbolFileSpec().GetPath(apPath.get(), PATH_MAX);
- const CMIUtilString strSymbolsPath(apPath.get());
- const bool bSymbolsLoaded =
- !CMIUtilString::Compare(strHostPath, strSymbolsPath);
- const CMICmnMIValueConst miValueConst4(
- CMIUtilString::Format("%d", bSymbolsLoaded));
- const CMICmnMIValueResult miValueResult4("symbols-loaded", miValueConst4);
- vwrMiOutOfBandRecord.Add(miValueResult4);
- // Build "symbols-path" field
- if (bSymbolsLoaded) {
- const CMICmnMIValueConst miValueConst5(strSymbolsPath.AddSlashes());
- const CMICmnMIValueResult miValueResult5("symbols-path", miValueConst5);
- vwrMiOutOfBandRecord.Add(miValueResult5);
- }
- // Build "loaded_addr" field
- lldb::SBAddress sbAddress(vModule.GetObjectFileHeaderAddress());
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- const lldb::addr_t nLoadAddress(
- sbAddress.GetLoadAddress(rSessionInfo.GetTarget()));
- const CMIUtilString strLoadedAddr(
- nLoadAddress != LLDB_INVALID_ADDRESS
- ? CMIUtilString::Format("0x%016" PRIx64, nLoadAddress)
- : "-");
- const CMICmnMIValueConst miValueConst6(strLoadedAddr);
- const CMICmnMIValueResult miValueResult6("loaded_addr", miValueConst6);
- vwrMiOutOfBandRecord.Add(miValueResult6);
-
- // Build "size" field
- lldb::SBSection sbSection = sbAddress.GetSection();
- const CMIUtilString strSize(
- CMIUtilString::Format("%" PRIu64, sbSection.GetByteSize()));
- const CMICmnMIValueConst miValueConst7(strSize);
- const CMICmnMIValueResult miValueResult7("size", miValueConst7);
- vwrMiOutOfBandRecord.Add(miValueResult7);
- }
-
- return bOk;
-}
-
-//++
-// Details: Handle a LLDB SBCommandInterpreter event.
-// Type: Method.
-// Args: vEvent - (R) An LLDB command interpreter event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleEventSBCommandInterpreter(
- const lldb::SBEvent &vEvent) {
- // This function is not used
- // *** This function is under development
-
- const char *pEventType = "";
- const MIuint nEventType = vEvent.GetType();
- switch (nEventType) {
- case lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit:
- pEventType = "eBroadcastBitThreadShouldExit";
- // ToDo: IOR: Reminder to maybe handle this here
- // const MIuint nEventType = event.GetType();
- // if (nEventType &
- // lldb::SBCommandInterpreter::eBroadcastBitThreadShouldExit)
- //{
- // m_pClientDriver->SetExitApplicationFlag();
- // vrbYesExit = true;
- // return MIstatus::success;
- //}
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitResetPrompt:
- pEventType = "eBroadcastBitResetPrompt";
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitQuitCommandReceived: {
- pEventType = "eBroadcastBitQuitCommandReceived";
- const bool bForceExit = true;
- CMICmnLLDBDebugger::Instance().GetDriver().SetExitApplicationFlag(
- bForceExit);
- break;
- }
- case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousOutputData:
- pEventType = "eBroadcastBitAsynchronousOutputData";
- break;
- case lldb::SBCommandInterpreter::eBroadcastBitAsynchronousErrorData:
- pEventType = "eBroadcastBitAsynchronousErrorData";
- break;
- default: {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
- "SBCommandInterpreter", (MIuint)nEventType));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
- m_pLog->WriteLog(CMIUtilString::Format(
- "##### An SBCommandInterpreter event occurred: %s", pEventType));
-
- return MIstatus::success;
-}
-
-//++
-// Details: Handle SBProcess event eBroadcastBitStateChanged.
-// Type: Method.
-// Args: vEvent - (R) An LLDB event object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventBroadcastBitStateChanged(
- const lldb::SBEvent &vEvent) {
- // Make sure the program hasn't been auto-restarted:
- if (lldb::SBProcess::GetRestartedFromEvent(vEvent))
- return MIstatus::success;
-
- bool bOk = ChkForStateChanges();
- bOk = bOk && GetProcessStdout();
- bOk = bOk && GetProcessStderr();
- if (!bOk)
- return MIstatus::failure;
-
- // Something changed in the process; get the event and report the process's
- // current
- // status and location
- const lldb::StateType eEventState =
- lldb::SBProcess::GetStateFromEvent(vEvent);
- if (eEventState == lldb::eStateInvalid)
- return MIstatus::success;
-
- lldb::SBProcess process = lldb::SBProcess::GetProcessFromEvent(vEvent);
- if (!process.IsValid()) {
- const CMIUtilString msg(CMIUtilString::Format(
- MIRSRC(IDS_LLDBOUTOFBAND_ERR_PROCESS_INVALID), "SBProcess",
- "HandleProcessEventBroadcastBitStateChanged()"));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
-
- bool bShouldBrk = true;
- const char *pEventType = "";
- switch (eEventState) {
- case lldb::eStateUnloaded:
- pEventType = "eStateUnloaded";
- break;
- case lldb::eStateConnected:
- pEventType = "eStateConnected";
- break;
- case lldb::eStateAttaching:
- pEventType = "eStateAttaching";
- break;
- case lldb::eStateLaunching:
- pEventType = "eStateLaunching";
- break;
- case lldb::eStateStopped:
- pEventType = "eStateStopped";
- bOk = HandleProcessEventStateStopped(vEvent, bShouldBrk);
- if (bShouldBrk)
- break;
- LLVM_FALLTHROUGH;
- case lldb::eStateCrashed:
- case lldb::eStateSuspended:
- pEventType = "eStateSuspended";
- bOk = HandleProcessEventStateSuspended(vEvent);
- break;
- case lldb::eStateRunning:
- pEventType = "eStateRunning";
- bOk = HandleProcessEventStateRunning();
- break;
- case lldb::eStateStepping:
- pEventType = "eStateStepping";
- break;
- case lldb::eStateDetached:
- pEventType = "eStateDetached";
- break;
- case lldb::eStateExited:
- // Don't exit from lldb-mi here. We should be able to re-run target.
- pEventType = "eStateExited";
- bOk = HandleProcessEventStateExited();
- break;
- default: {
- const CMIUtilString msg(CMIUtilString::Format(
- MIRSRC(IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT),
- "SBProcess BroadcastBitStateChanged", (MIuint)eEventState));
- SetErrorDescription(msg);
- return MIstatus::failure;
- }
- }
-
- // ToDo: Remove when finished coding application
- m_pLog->WriteLog(CMIUtilString::Format(
- "##### An SB Process event BroadcastBitStateChanged occurred: %s",
- pEventType));
-
- return bOk;
-}
-
-//++
-// Details: Asynchronous event handler for LLDB Process state suspended.
-// Type: Method.
-// Args: vEvent - (R) An LLDB event object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateSuspended(
- const lldb::SBEvent &vEvent) {
- bool bOk = MIstatus::success;
- lldb::SBStream streamOut;
- lldb::SBDebugger &rDebugger =
- CMICmnLLDBDebugSessionInfo::Instance().GetDebugger();
- lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBTarget target = sbProcess.GetTarget();
- if (rDebugger.GetSelectedTarget() == target) {
- if (!UpdateSelectedThread())
- return MIstatus::failure;
- sbProcess.GetDescription(streamOut);
- // Add a delimiter between process' and threads' info.
- streamOut.Printf("\n");
- for (uint32_t i = 0, e = sbProcess.GetNumThreads(); i < e; ++i) {
- const lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
- if (!thread.IsValid())
- continue;
- thread.GetDescription(streamOut);
- }
- bOk = TextToStdout(streamOut.GetData());
- } else {
- const MIuint nTargetIndex = rDebugger.GetIndexOfTarget(target);
- if (nTargetIndex != UINT_MAX)
- streamOut.Printf("Target %" PRIu64 ": (", (uint64_t)nTargetIndex);
- else
- streamOut.Printf("Target <unknown index>: (");
- target.GetDescription(streamOut, lldb::eDescriptionLevelBrief);
- streamOut.Printf(") stopped.\n");
- bOk = TextToStdout(streamOut.GetData());
- }
-
- return bOk;
-}
-
-//++
-// Details: Print to stdout MI formatted text to indicate process stopped.
-// Type: Method.
-// Args: vwrbShouldBrk - (W) True = Yes break, false = do not.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateStopped(
- const lldb::SBEvent &vrEvent, bool &vwrbShouldBrk) {
- if (!UpdateSelectedThread())
- return MIstatus::failure;
-
- const char *pEventType = "";
- bool bOk = MIstatus::success;
- lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const lldb::StopReason eStoppedReason =
- sbProcess.GetSelectedThread().GetStopReason();
- switch (eStoppedReason) {
- case lldb::eStopReasonInvalid:
- pEventType = "eStopReasonInvalid";
- vwrbShouldBrk = false;
- break;
- case lldb::eStopReasonNone:
- pEventType = "eStopReasonNone";
- break;
- case lldb::eStopReasonTrace:
- pEventType = "eStopReasonTrace";
- bOk = HandleProcessEventStopReasonTrace();
- break;
- case lldb::eStopReasonBreakpoint:
- pEventType = "eStopReasonBreakpoint";
- bOk = HandleProcessEventStopReasonBreakpoint();
- break;
- case lldb::eStopReasonWatchpoint:
- pEventType = "eStopReasonWatchpoint";
- break;
- case lldb::eStopReasonSignal:
- pEventType = "eStopReasonSignal";
- bOk = HandleProcessEventStopSignal(vrEvent);
- break;
- case lldb::eStopReasonException:
- pEventType = "eStopReasonException";
- bOk = HandleProcessEventStopException();
- break;
- case lldb::eStopReasonExec:
- pEventType = "eStopReasonExec";
- break;
- case lldb::eStopReasonPlanComplete:
- pEventType = "eStopReasonPlanComplete";
- bOk = HandleProcessEventStopReasonTrace();
- break;
- case lldb::eStopReasonThreadExiting:
- pEventType = "eStopReasonThreadExiting";
- break;
- case lldb::eStopReasonInstrumentation:
- pEventType = "eStopReasonInstrumentation";
- break;
- }
-
- // ToDo: Remove when finished coding application
- m_pLog->WriteLog(CMIUtilString::Format(
- "##### An SB Process event stop state occurred: %s", pEventType));
-
- return bOk;
-}
-
-//++
-// Details: Asynchronous event handler for LLDB Process stop signal.
-// Type: Method.
-// Args: vrEvent - (R) An LLDB broadcast event.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopSignal(
- const lldb::SBEvent &vrEvent) {
- bool bOk = MIstatus::success;
-
- InitializeSignals();
- lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const MIuint64 nStopReason =
- sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
- const bool bInterrupted = lldb::SBProcess::GetInterruptedFromEvent(vrEvent);
- if (nStopReason == m_SIGINT || (nStopReason == m_SIGSTOP && bInterrupted)) {
- // 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);
- const CMICmnMIValueConst miValueConst2("SIGINT");
- const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3("Interrupt");
- const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
- const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(CMIUtilString::Format(
- "%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- miOutOfBandRecord.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6("all");
- const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
- 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);
- miOutOfBandRecord.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3("Stop");
- const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
- const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(CMIUtilString::Format(
- "%" PRIu32, sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- miOutOfBandRecord.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6("all");
- const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
- miOutOfBandRecord.Add(miValueResult6);
- 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}"
- 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);
- miOutOfBandRecord.Add(miValueResult2);
- const CMICmnMIValueConst miValueConst3("Segmentation fault");
- const CMICmnMIValueResult miValueResult3("signal-meaning", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk && MiHelpGetCurrentThreadFrame(miValueTuple);
- const CMICmnMIValueResult miValueResult4("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(CMIUtilString::Format(
- "%d", sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- 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::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");
-
- if (CMIUtilString::Compare(threadCloneFn, fnName)) {
- if (sbProcess.IsValid())
- sbProcess.Continue();
- }
- }
- }
- } else {
- // 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);
- lldb::SBUnixSignals sbUnixSignals = sbProcess.GetUnixSignals();
- const char *pSignal = sbUnixSignals.GetSignalAsCString(nStopReason);
- if (pSignal) {
- const CMICmnMIValueConst miValueConst2(pSignal);
- const CMICmnMIValueResult miValueResult2("signal-name", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- } else {
- const CMIUtilString strSignal(
- CMIUtilString::Format("%" PRIu64, nStopReason));
- const CMICmnMIValueConst miValueConst2(strSignal);
- const CMICmnMIValueResult miValueResult2("signal", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- }
- const CMIUtilString strThreadId(CMIUtilString::Format(
- "%d", sbProcess.GetSelectedThread().GetIndexID()));
- const CMICmnMIValueConst miValueConst3(strThreadId);
- const CMICmnMIValueResult miValueResult3("thread-id", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("all");
- const CMICmnMIValueResult miValueResult4("stopped-threads", miValueConst4);
- miOutOfBandRecord.Add(miValueResult4);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- }
- return bOk;
-}
-
-//++
-// Details: Asynchronous event handler for LLDB Process stop exception.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopException() {
- const lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread sbThread = sbProcess.GetSelectedThread();
- const size_t nStopDescriptionLen = sbThread.GetStopDescription(nullptr, 0);
- std::unique_ptr<char[]> apStopDescription(new char[nStopDescriptionLen]);
- sbThread.GetStopDescription(apStopDescription.get(), nStopDescriptionLen);
-
- // MI print
- // "*stopped,reason=\"exception-received\",exception=\"%s\",thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("exception-received");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMIUtilString strReason(apStopDescription.get());
- const CMICmnMIValueConst miValueConst2(strReason);
- const CMICmnMIValueResult miValueResult2("exception", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMIUtilString strThreadId(
- CMIUtilString::Format("%d", sbThread.GetIndexID()));
- const CMICmnMIValueConst miValueConst3(strThreadId);
- const CMICmnMIValueResult miValueResult3("thread-id", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("all");
- const CMICmnMIValueResult miValueResult4("stopped-threads", miValueConst4);
- miOutOfBandRecord.Add(miValueResult4);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
- return bOk;
-}
-
-//++
-// Details: Form partial MI response in a MI value tuple object.
-// Type: Method.
-// Args: vwrMiValueTuple - (W) MI value tuple object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::MiHelpGetCurrentThreadFrame(
- CMICmnMIValueTuple &vwrMiValueTuple) {
- CMIUtilString strThreadFrame;
- lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if (nFrame == 0) {
- // MI print
- // "addr=\"??\",func=\"??\",file=\"??\",fullname=\"??\",line=\"??\""
- const CMICmnMIValueConst miValueConst("??");
- const CMICmnMIValueResult miValueResult("addr", miValueConst);
- CMICmnMIValueTuple miValueTuple(miValueResult);
- const CMICmnMIValueResult miValueResult2("func", miValueConst);
- miValueTuple.Add(miValueResult2);
- const CMICmnMIValueResult miValueResult4("file", miValueConst);
- miValueTuple.Add(miValueResult4);
- const CMICmnMIValueResult miValueResult5("fullname", miValueConst);
- miValueTuple.Add(miValueResult5);
- const CMICmnMIValueResult miValueResult6("line", miValueConst);
- miValueTuple.Add(miValueResult6);
-
- vwrMiValueTuple = miValueTuple;
-
- return MIstatus::success;
- }
-
- CMICmnMIValueTuple miValueTuple;
- if (!CMICmnLLDBDebugSessionInfo::Instance().MIResponseFormFrameInfo(
- thread, 0, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_NoArguments,
- miValueTuple)) {
- SetErrorDescription(
- CMIUtilString::Format(MIRSRC(IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE),
- "MiHelpGetCurrentThreadFrame()"));
- return MIstatus::failure;
- }
-
- vwrMiValueTuple = miValueTuple;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Asynchronous event handler for LLDB Process stop reason breakpoint.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonBreakpoint() {
- // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
- if (!CMIDriver::Instance().SetDriverStateRunningNotDebugging()) {
- const CMIUtilString &rErrMsg(CMIDriver::Instance().GetErrorDescription());
- SetErrorDescription(CMIUtilString::Format(
- MIRSRC(IDS_LLDBOUTOFBAND_ERR_SETNEWDRIVERSTATE),
- "HandleProcessEventStopReasonBreakpoint()", rErrMsg.c_str()));
- return MIstatus::failure;
- }
-
- lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- const MIuint64 brkPtId =
- sbProcess.GetSelectedThread().GetStopReasonDataAtIndex(0);
- lldb::SBBreakpoint brkPt =
- CMICmnLLDBDebugSessionInfo::Instance().GetTarget().GetBreakpointAtIndex(
- (MIuint)brkPtId);
-
- return MiStoppedAtBreakPoint(brkPtId, brkPt);
-}
-
-//++
-// Details: Form the MI Out-of-band response for stopped reason on hitting a
-// break point.
-// Type: Method.
-// Args: vBrkPtId - (R) The LLDB break point's ID
-// vBrkPt - (R) THe LLDB break point object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::MiStoppedAtBreakPoint(
- const MIuint64 vBrkPtId, const lldb::SBBreakpoint &vBrkPt) {
- bool bOk = MIstatus::success;
-
- lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if (nFrame == 0) {
- // MI print
- // "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={},thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("breakpoint-hit");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConst2("del");
- const CMICmnMIValueResult miValueResult2("disp", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- const CMIUtilString strBkp(CMIUtilString::Format("%d", vBrkPtId));
- const CMICmnMIValueConst miValueConst3(strBkp);
- CMICmnMIValueResult miValueResult3("bkptno", miValueConst3);
- miOutOfBandRecord.Add(miValueResult3);
- const CMICmnMIValueConst miValueConst4("{}");
- const CMICmnMIValueResult miValueResult4("frame", miValueConst4);
- miOutOfBandRecord.Add(miValueResult4);
- const CMIUtilString strThreadId(
- CMIUtilString::Format("%d", vBrkPt.GetThreadIndex()));
- const CMICmnMIValueConst miValueConst5(strThreadId);
- const CMICmnMIValueResult miValueResult5("thread-id", miValueConst5);
- miOutOfBandRecord.Add(miValueResult5);
- const CMICmnMIValueConst miValueConst6("all");
- const CMICmnMIValueResult miValueResult6("stopped-threads", miValueConst6);
- miOutOfBandRecord.Add(miValueResult6);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- return bOk;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- // MI print
- // "*stopped,reason=\"breakpoint-hit\",disp=\"del\",bkptno=\"%d\",frame={addr=\"0x%016"
- // PRIx64
- // "\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("breakpoint-hit");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConstA("del");
- const CMICmnMIValueResult miValueResultA("disp", miValueConstA);
- miOutOfBandRecord.Add(miValueResultA);
- const CMIUtilString strBkp(CMIUtilString::Format("%d", vBrkPtId));
- const CMICmnMIValueConst miValueConstB(strBkp);
- CMICmnMIValueResult miValueResultB("bkptno", miValueConstB);
- miOutOfBandRecord.Add(miValueResultB);
-
- // frame={addr=\"0x%016" PRIx64
- // "\",func=\"%s\",args=[],file=\"%s\",fullname=\"%s\",line=\"%d\"}
- if (bOk) {
- CMICmnMIValueTuple miValueTuple;
- bOk = bOk &&
- rSessionInfo.MIResponseFormFrameInfo(
- thread, 0,
- CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_AllArguments,
- miValueTuple);
- const CMICmnMIValueResult miValueResult8("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult8);
- }
-
- // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
- if (bOk) {
- const CMIUtilString strThreadId(
- CMIUtilString::Format("%d", thread.GetIndexID()));
- const CMICmnMIValueConst miValueConst8(strThreadId);
- const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
- miOutOfBandRecord.Add(miValueResult8);
- }
- if (bOk) {
- const CMICmnMIValueConst miValueConst9("all");
- const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
- miOutOfBandRecord.Add(miValueResult9);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Asynchronous event handler for LLDB Process stop reason trace.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStopReasonTrace() {
- bool bOk = true;
- lldb::SBProcess sbProcess =
- CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBThread thread = sbProcess.GetSelectedThread();
- const MIuint nFrame = thread.GetNumFrames();
- if (nFrame == 0) {
- // MI print "*stopped,reason=\"trace\",stopped-threads=\"all\""
- const CMICmnMIValueConst miValueConst("trace");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueConst miValueConst2("all");
- const CMICmnMIValueResult miValueResult2("stopped-threads", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
- return bOk;
- }
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
-
- // MI print
- // "*stopped,reason=\"end-stepping-range\",frame={addr=\"0x%016" PRIx64
- // "\",func=\"%s\",args=[\"%s\"],file=\"%s\",fullname=\"%s\",line=\"%d\"},thread-id=\"%d\",stopped-threads=\"all\""
-
- // Function args
- CMICmnMIValueTuple miValueTuple;
- if (!rSessionInfo.MIResponseFormFrameInfo(
- thread, 0, CMICmnLLDBDebugSessionInfo::eFrameInfoFormat_AllArguments,
- miValueTuple))
- return MIstatus::failure;
-
- const CMICmnMIValueConst miValueConst("end-stepping-range");
- const CMICmnMIValueResult miValueResult("reason", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult);
- const CMICmnMIValueResult miValueResult2("frame", miValueTuple);
- miOutOfBandRecord.Add(miValueResult2);
-
- // Add to MI thread-id=\"%d\",stopped-threads=\"all\"
- const CMIUtilString strThreadId(
- CMIUtilString::Format("%d", thread.GetIndexID()));
- const CMICmnMIValueConst miValueConst8(strThreadId);
- const CMICmnMIValueResult miValueResult8("thread-id", miValueConst8);
- miOutOfBandRecord.Add(miValueResult8);
-
- const CMICmnMIValueConst miValueConst9("all");
- const CMICmnMIValueResult miValueResult9("stopped-threads", miValueConst9);
- miOutOfBandRecord.Add(miValueResult9);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
- return bOk;
-}
-
-//++
-// Details: Asynchronous function update selected thread.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::UpdateSelectedThread() {
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance()
- .GetDebugger()
- .GetSelectedTarget()
- .GetProcess();
- if (!process.IsValid())
- return MIstatus::success;
-
- lldb::SBThread currentThread = process.GetSelectedThread();
- lldb::SBThread thread;
- const lldb::StopReason eCurrentThreadStoppedReason =
- currentThread.GetStopReason();
- if (!currentThread.IsValid() ||
- (eCurrentThreadStoppedReason == lldb::eStopReasonInvalid) ||
- (eCurrentThreadStoppedReason == lldb::eStopReasonNone)) {
- // Prefer a thread that has just completed its plan over another thread as
- // current thread
- lldb::SBThread planThread;
- lldb::SBThread otherThread;
- const size_t nThread = process.GetNumThreads();
- for (MIuint i = 0; i < nThread; i++) {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- thread = process.GetThreadAtIndex(i);
- const lldb::StopReason eThreadStopReason = thread.GetStopReason();
- switch (eThreadStopReason) {
- case lldb::eStopReasonTrace:
- case lldb::eStopReasonBreakpoint:
- case lldb::eStopReasonWatchpoint:
- case lldb::eStopReasonSignal:
- case lldb::eStopReasonException:
- if (!otherThread.IsValid())
- otherThread = thread;
- break;
- case lldb::eStopReasonPlanComplete:
- if (!planThread.IsValid())
- planThread = thread;
- break;
- case lldb::eStopReasonInvalid:
- case lldb::eStopReasonNone:
- default:
- break;
- }
- }
- if (planThread.IsValid())
- process.SetSelectedThread(planThread);
- else if (otherThread.IsValid())
- process.SetSelectedThread(otherThread);
- else {
- if (currentThread.IsValid())
- thread = currentThread;
- else
- thread = process.GetThreadAtIndex(0);
-
- if (thread.IsValid())
- process.SetSelectedThread(thread);
- }
- } // if( !currentThread.IsValid() || (eCurrentThreadStoppedReason ==
- // lldb::eStopReasonInvalid) || (eCurrentThreadStoppedReason ==
- // lldb::eStopReasonNone) )
-
- return MIstatus::success;
-}
-
-//++
-// Details: Print to stdout "*running,thread-id=\"all\"", "(gdb)".
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateRunning() {
- CMICmnMIValueConst miValueConst("all");
- CMICmnMIValueResult miValueResult("thread-id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_Running, miValueResult);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
- return bOk;
-}
-
-//++
-// Details: Print to stdout "=thread-exited,id=\"%ld\",group-id=\"i1\"",
-// "=thread-group-exited,id=\"i1\",exit-code=\"0\""),
-// "*stopped,reason=\"exited-normally\"",
-// "(gdb)"
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::HandleProcessEventStateExited() {
- const CMIUtilString strId(CMIUtilString::Format("%ld", 1));
- CMICmnMIValueConst miValueConst(strId);
- CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
- CMICmnMIValueConst miValueConst2("i1");
- CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
- miOutOfBandRecord.Add(miValueResult2);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (bOk) {
- CMICmnMIValueConst miValueConst3("i1");
- CMICmnMIValueResult miValueResult3("id", miValueConst3);
- CMICmnMIOutOfBandRecord miOutOfBandRecord2(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited, miValueResult3);
- CMICmnMIValueConst miValueConst2("0");
- CMICmnMIValueResult miValueResult2("exit-code", miValueConst2);
- miOutOfBandRecord2.Add(miValueResult2);
- bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord2);
- }
- if (bOk) {
- CMICmnMIValueConst miValueConst4("exited-normally");
- CMICmnMIValueResult miValueResult4("reason", miValueConst4);
- CMICmnMIOutOfBandRecord miOutOfBandRecord3(
- CMICmnMIOutOfBandRecord::eOutOfBand_Stopped, miValueResult4);
- bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord3);
- }
- bOk = bOk && CMICmnStreamStdout::WritePrompt();
-
- return bOk;
-}
-
-//++
-// Details: Drain all stdout so we don't see any output come after we print our
-// prompts.
-// The process has stuff waiting for stdout; get it and write it out to
-// the
-// appropriate place.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::GetProcessStdout() {
- CMIUtilString text;
- std::unique_ptr<char[]> apStdoutBuffer(new char[1024]);
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance()
- .GetDebugger()
- .GetSelectedTarget()
- .GetProcess();
- while (1) {
- const size_t nBytes = process.GetSTDOUT(apStdoutBuffer.get(), 1024);
- text.append(apStdoutBuffer.get(), nBytes);
-
- while (1) {
- const size_t nNewLine = text.find('\n');
- if (nNewLine == std::string::npos)
- break;
-
- const CMIUtilString line(text.substr(0, nNewLine + 1));
- text.erase(0, nNewLine + 1);
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
- const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- return MIstatus::failure;
- }
-
- if (nBytes == 0) {
- if (!text.empty()) {
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput,
- miValueConst);
- return MiOutOfBandRecordToStdout(miOutOfBandRecord);
- }
- break;
- }
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Drain all stderr so we don't see any output come after we print our
-// prompts.
-// The process has stuff waiting for stderr; get it and write it out to
-// the
-// appropriate place.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::GetProcessStderr() {
- CMIUtilString text;
- std::unique_ptr<char[]> apStderrBuffer(new char[1024]);
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance()
- .GetDebugger()
- .GetSelectedTarget()
- .GetProcess();
- while (1) {
- const size_t nBytes = process.GetSTDERR(apStderrBuffer.get(), 1024);
- text.append(apStderrBuffer.get(), nBytes);
-
- while (1) {
- const size_t nNewLine = text.find('\n');
- if (nNewLine == std::string::npos)
- break;
-
- const CMIUtilString line(text.substr(0, nNewLine + 1));
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(line.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, miValueConst);
- const bool bOk = MiOutOfBandRecordToStdout(miOutOfBandRecord);
- if (!bOk)
- return MIstatus::failure;
- }
-
- if (nBytes == 0) {
- if (!text.empty()) {
- const bool bEscapeQuotes(true);
- CMICmnMIValueConst miValueConst(text.Escape(bEscapeQuotes));
- CMICmnMIOutOfBandRecord miOutOfBandRecord(
- CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput,
- miValueConst);
- return MiOutOfBandRecordToStdout(miOutOfBandRecord);
- }
- break;
- }
- }
-
- return MIstatus::success;
-}
-
-//++
-// Details: Asynchronous event function check for state changes.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::ChkForStateChanges() {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- if (!sbProcess.IsValid())
- return MIstatus::success;
-
- // Check for created threads
- const MIuint nThread = sbProcess.GetNumThreads();
- for (MIuint i = 0; i < nThread; i++) {
- // GetThreadAtIndex() uses a base 0 index
- // GetThreadByIndexID() uses a base 1 index
- lldb::SBThread thread = sbProcess.GetThreadAtIndex(i);
- if (!thread.IsValid())
- continue;
-
- const MIuint threadIndexID = thread.GetIndexID();
- const bool bFound =
- std::find(rSessionInfo.m_vecActiveThreadId.cbegin(),
- rSessionInfo.m_vecActiveThreadId.cend(),
- threadIndexID) != rSessionInfo.m_vecActiveThreadId.end();
- if (!bFound) {
- rSessionInfo.m_vecActiveThreadId.push_back(threadIndexID);
-
- // Form MI "=thread-created,id=\"%d\",group-id=\"i1\""
- const CMIUtilString strValue(CMIUtilString::Format("%d", threadIndexID));
- const CMICmnMIValueConst miValueConst(strValue);
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated, miValueResult);
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
- miOutOfBand.Add(miValueResult2);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBand);
- if (!bOk)
- return MIstatus::failure;
- }
- }
-
- lldb::SBThread currentThread = sbProcess.GetSelectedThread();
- if (currentThread.IsValid()) {
- const MIuint currentThreadIndexID = currentThread.GetIndexID();
- if (rSessionInfo.m_currentSelectedThread != currentThreadIndexID) {
- rSessionInfo.m_currentSelectedThread = currentThreadIndexID;
-
- // Form MI "=thread-selected,id=\"%d\""
- const CMIUtilString strValue(
- CMIUtilString::Format("%d", currentThreadIndexID));
- const CMICmnMIValueConst miValueConst(strValue);
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected, miValueResult);
- if (!MiOutOfBandRecordToStdout(miOutOfBand))
- return MIstatus::failure;
- }
- }
-
- // Check for invalid (removed) threads
- CMICmnLLDBDebugSessionInfo::VecActiveThreadId_t::iterator it =
- rSessionInfo.m_vecActiveThreadId.begin();
- while (it != rSessionInfo.m_vecActiveThreadId.end()) {
- const MIuint threadIndexID = *it;
- lldb::SBThread thread = sbProcess.GetThreadByIndexID(threadIndexID);
- if (!thread.IsValid()) {
- // Form MI "=thread-exited,id=\"%ld\",group-id=\"i1\""
- const CMIUtilString strValue(CMIUtilString::Format("%ld", threadIndexID));
- const CMICmnMIValueConst miValueConst(strValue);
- const CMICmnMIValueResult miValueResult("id", miValueConst);
- CMICmnMIOutOfBandRecord miOutOfBand(
- CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, miValueResult);
- const CMICmnMIValueConst miValueConst2("i1");
- const CMICmnMIValueResult miValueResult2("group-id", miValueConst2);
- miOutOfBand.Add(miValueResult2);
- bool bOk = MiOutOfBandRecordToStdout(miOutOfBand);
- if (!bOk)
- return MIstatus::failure;
-
- // Remove current thread from cache and get next
- it = rSessionInfo.m_vecActiveThreadId.erase(it);
- } else
- // Next
- ++it;
- }
-
- return CMICmnStreamStdout::WritePrompt();
-}
-
-//++
-// Details: Take a fully formed MI result record and send to the stdout stream.
-// Also output to the MI Log file.
-// Type: Method.
-// Args: vrMiResultRecord - (R) MI result record object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::MiResultRecordToStdout(
- const CMICmnMIResultRecord &vrMiResultRecord) {
- return TextToStdout(vrMiResultRecord.GetString());
-}
-
-//++
-// Details: Take a fully formed MI Out-of-band record and send to the stdout
-// stream.
-// Also output to the MI Log file.
-// Type: Method.
-// Args: vrMiOutOfBandRecord - (R) MI Out-of-band record object.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::MiOutOfBandRecordToStdout(
- const CMICmnMIOutOfBandRecord &vrMiOutOfBandRecord) {
- return TextToStdout(vrMiOutOfBandRecord.GetString());
-}
-
-//++
-// Details: Take a text data and send to the stdout stream. Also output to the
-// MI Log
-// file.
-// Type: Method.
-// Args: vrTxt - (R) Text.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::TextToStdout(const CMIUtilString &vrTxt) {
- return CMICmnStreamStdout::TextToStdout(vrTxt);
-}
-
-//++
-// Details: Take a text data and send to the stderr stream. Also output to the
-// MI Log
-// file.
-// Type: Method.
-// Args: vrTxt - (R) Text.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBDebuggerHandleEvents::TextToStderr(const CMIUtilString &vrTxt) {
- 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;
- }
- }
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h (removed)
@@ -1,99 +0,0 @@
-//===-- MICmnLLDBDebuggerHandleEvents.h -------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MICmnMIValueList.h"
-#include "MICmnMIValueTuple.h"
-#include "MIUtilSingletonBase.h"
-#include "lldb/API/SBEvent.h"
-
-// Declarations:
-class CMICmnLLDBDebugSessionInfo;
-class CMICmnMIResultRecord;
-class CMICmnStreamStdout;
-class CMICmnMIOutOfBandRecord;
-
-//++
-//============================================================================
-// Details: MI class to take LLDB SBEvent objects, filter them and form
-// MI Out-of-band records from the information inside the event object.
-// These records are then pushed to stdout.
-// A singleton class.
-//--
-class CMICmnLLDBDebuggerHandleEvents
- : public CMICmnBase,
- public MI::ISingleton<CMICmnLLDBDebuggerHandleEvents> {
- friend class MI::ISingleton<CMICmnLLDBDebuggerHandleEvents>;
-
- // Methods:
-public:
- bool Initialize() override;
- bool Shutdown() override;
- //
- bool HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent);
-
- // Methods:
-private:
- /* ctor */ CMICmnLLDBDebuggerHandleEvents();
- /* ctor */ CMICmnLLDBDebuggerHandleEvents(
- const CMICmnLLDBDebuggerHandleEvents &);
- void operator=(const CMICmnLLDBDebuggerHandleEvents &);
- //
- bool ChkForStateChanges();
- bool GetProcessStdout();
- bool GetProcessStderr();
- bool HandleEventSBBreakPoint(const lldb::SBEvent &vEvent);
- bool HandleEventSBBreakpointCmn(const lldb::SBEvent &vEvent);
- bool HandleEventSBBreakpointAdded(const lldb::SBEvent &vEvent);
- bool HandleEventSBBreakpointLocationsAdded(const lldb::SBEvent &vEvent);
- bool HandleEventSBProcess(const lldb::SBEvent &vEvent);
- bool HandleEventSBTarget(const lldb::SBEvent &vEvent);
- bool HandleEventSBThread(const lldb::SBEvent &vEvent);
- bool HandleEventSBThreadBitStackChanged(const lldb::SBEvent &vEvent);
- bool HandleEventSBThreadSuspended(const lldb::SBEvent &vEvent);
- bool HandleEventSBCommandInterpreter(const lldb::SBEvent &vEvent);
- bool HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent);
- bool HandleProcessEventStateRunning();
- bool HandleProcessEventStateExited();
- bool HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent,
- bool &vwrbShouldBrk);
- bool HandleProcessEventStopReasonTrace();
- bool HandleProcessEventStopReasonBreakpoint();
- bool HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent);
- bool HandleProcessEventStopException();
- bool HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent);
- bool HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent);
- bool
- HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent);
- bool MiHelpGetModuleInfo(const lldb::SBModule &vModule,
- const bool vbWithExtraFields,
- CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord);
- bool MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple);
- bool MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord);
- bool
- MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiResultRecord);
- bool MiStoppedAtBreakPoint(const MIuint64 vBrkPtId,
- const lldb::SBBreakpoint &vBrkPt);
- bool TextToStdout(const CMIUtilString &vrTxt);
- bool TextToStderr(const CMIUtilString &vrTxt);
- bool UpdateSelectedThread();
-
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLLDBDebuggerHandleEvents() override;
- void InitializeSignals();
- bool m_bSignalsInitialized;
- MIuint64 m_SIGINT;
- MIuint64 m_SIGSTOP;
- MIuint64 m_SIGSEGV;
- MIuint64 m_SIGTRAP;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.cpp (removed)
@@ -1,134 +0,0 @@
-//===-- MICmnLLDBProxySBValue.cpp -------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include <stdlib.h>
-
-// Third Party Headers:
-#include "lldb/API/SBError.h"
-
-// In-house headers:
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBProxySBValue.h"
-#include "MIUtilString.h"
-
-//++
-// Details: Retrieve the numerical value from the SBValue object. If the
-// function fails
-// it could indicate the SBValue object does not represent an internal
-// type.
-// Type: Static method.
-// Args: vrValue - (R) The SBValue object to get a value from.
-// vwValue - (W) The numerical value.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBProxySBValue::GetValueAsUnsigned(const lldb::SBValue &vrValue,
- MIuint64 &vwValue) {
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- bool bCompositeType = true;
- MIuint64 nFailValue = 0;
- MIuint64 nValue = rValue.GetValueAsUnsigned(nFailValue);
- if (nValue == nFailValue) {
- nFailValue = 5; // Some arbitrary number
- nValue = rValue.GetValueAsUnsigned(nFailValue);
- if (nValue != nFailValue) {
- bCompositeType = false;
- vwValue = nValue;
- }
- } else {
- bCompositeType = false;
- vwValue = nValue;
- }
-
- return (bCompositeType ? MIstatus::failure : MIstatus::success);
-}
-
-//++
-// Details: Retrieve the numerical value from the SBValue object. If the
-// function fails
-// it could indicate the SBValue object does not represent an internal
-// type.
-// Type: Static method.
-// Args: vrValue - (R) The SBValue object to get a value from.
-// vwValue - (W) The numerical value.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed.
-// Throws: None.
-//--
-bool CMICmnLLDBProxySBValue::GetValueAsSigned(const lldb::SBValue &vrValue,
- MIint64 &vwValue) {
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- bool bCompositeType = true;
- MIuint64 nFailValue = 0;
- MIuint64 nValue = rValue.GetValueAsSigned(nFailValue);
- if (nValue == nFailValue) {
- nFailValue = 5; // Some arbitrary number
- nValue = rValue.GetValueAsSigned(nFailValue);
- if (nValue != nFailValue) {
- bCompositeType = false;
- vwValue = nValue;
- }
- } else {
- bCompositeType = false;
- vwValue = nValue;
- }
-
- return (bCompositeType ? MIstatus::failure : MIstatus::success);
-}
-
-//++
-// Details: Retrieve the NUL terminated string from the SBValue object if it of
-// the type
-// unsigned char *.
-// Type: Static method.
-// Args: vrValue - (R) The SBValue object to get a value from.
-// vwCString - (W) The text data '\0' terminated.
-// Return: MIstatus::success - Functionality succeeded.
-// MIstatus::failure - Functionality failed, not suitable type.
-// Throws: None.
-//--
-bool CMICmnLLDBProxySBValue::GetCString(const lldb::SBValue &vrValue,
- CMIUtilString &vwCString) {
- lldb::SBValue &rValue = const_cast<lldb::SBValue &>(vrValue);
- const char *pCType = rValue.GetTypeName();
- if (pCType == nullptr)
- return MIstatus::failure;
-
- const char *pType = "unsigned char *";
- if (!CMIUtilString::Compare(pCType, pType))
- return MIstatus::failure;
-
- const CMIUtilString strAddr(rValue.GetValue());
- MIint64 nNum = 0;
- if (!strAddr.ExtractNumber(nNum))
- return MIstatus::failure;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- lldb::SBProcess sbProcess = rSessionInfo.GetProcess();
- MIuint nBufferSize = 64;
- bool bNeedResize = false;
- char *pBuffer = static_cast<char *>(::malloc(nBufferSize));
- do {
- lldb::SBError error;
- const size_t nReadSize = sbProcess.ReadCStringFromMemory(
- (lldb::addr_t)nNum, pBuffer, nBufferSize, error);
- if (nReadSize == (nBufferSize - 1)) {
- bNeedResize = true;
- nBufferSize = nBufferSize << 1;
- pBuffer = static_cast<char *>(::realloc(pBuffer, nBufferSize));
- } else
- bNeedResize = false;
- } while (bNeedResize);
-
- vwCString = pBuffer;
- free((void *)pBuffer);
-
- return MIstatus::success;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBProxySBValue.h (removed)
@@ -1,34 +0,0 @@
-//===-- MICmnLLDBProxySBValue.h ---------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third Party Headers:
-#include "lldb/API/SBValue.h"
-
-// In-house headers:
-#include "MIDataTypes.h"
-
-// Declarations:
-class CMIUtilString;
-
-//++
-//============================================================================
-// Details: MI proxy wrapper class to lldb::SBValue. The class provides
-// functionality
-// to assist in the use of SBValue's particular function usage.
-//--
-class CMICmnLLDBProxySBValue {
- // Statics:
-public:
- static bool GetValueAsSigned(const lldb::SBValue &vrValue, MIint64 &vwValue);
- static bool GetValueAsUnsigned(const lldb::SBValue &vrValue,
- MIuint64 &vwValue);
- static bool GetCString(const lldb::SBValue &vrValue,
- CMIUtilString &vwCString);
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.cpp (removed)
@@ -1,497 +0,0 @@
-//===-- MICmnLLDBUtilSBValue.cpp --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Third party headers:
-#include "lldb/API/SBTypeSummary.h"
-#include <cinttypes>
-
-// In-house headers:
-#include "MICmnLLDBDebugSessionInfo.h"
-#include "MICmnLLDBUtilSBValue.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIValueTuple.h"
-#include "MIUtilString.h"
-
-static const char *kUnknownValue = "??";
-static const char *kUnresolvedCompositeValue = "{...}";
-
-//++
-// Details: CMICmnLLDBUtilSBValue constructor.
-// Type: Method.
-// Args: vrValue - (R) The LLDB value object.
-// vbHandleCharType - (R) True = Yes return text molding to char
-// type,
-// False = just return data.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBUtilSBValue::CMICmnLLDBUtilSBValue(
- const lldb::SBValue &vrValue, const bool vbHandleCharType /* = false */,
- const bool vbHandleArrayType /* = true */)
- : m_rValue(const_cast<lldb::SBValue &>(vrValue)),
- m_bHandleCharType(vbHandleCharType),
- m_bHandleArrayType(vbHandleArrayType) {
- m_bValidSBValue = m_rValue.IsValid();
-}
-
-//++
-// Details: CMICmnLLDBUtilSBValue destructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLLDBUtilSBValue::~CMICmnLLDBUtilSBValue() {}
-
-//++
-// Details: Retrieve from the LLDB SB Value object the name of the variable. If
-// the name
-// is invalid (or the SBValue object invalid) then "??" is returned.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString - Name of the variable or "??" for unknown.
-// Throws: None.
-//--
-CMIUtilString CMICmnLLDBUtilSBValue::GetName() const {
- const char *pName = m_bValidSBValue ? m_rValue.GetName() : nullptr;
- const CMIUtilString text((pName != nullptr) ? pName : CMIUtilString());
-
- return text;
-}
-
-//++
-// Details: Retrieve from the LLDB SB Value object the value of the variable
-// described in
-// text. If the value is invalid (or the SBValue object invalid) then
-// "??" is
-// returned.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString - Text description of the variable's value or "??".
-// Throws: None.
-//--
-CMIUtilString CMICmnLLDBUtilSBValue::GetValue(
- const bool vbExpandAggregates /* = false */) const {
- if (!m_bValidSBValue)
- return kUnknownValue;
-
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- bool bPrintExpandAggregates = false;
- bPrintExpandAggregates = rSessionInfo.SharedDataRetrieve<bool>(
- rSessionInfo.m_constStrPrintExpandAggregates,
- bPrintExpandAggregates) &&
- bPrintExpandAggregates;
-
- const bool bHandleArrayTypeAsSimple =
- m_bHandleArrayType && !vbExpandAggregates && !bPrintExpandAggregates;
- CMIUtilString value;
- const bool bIsSimpleValue = GetSimpleValue(bHandleArrayTypeAsSimple, value);
- if (bIsSimpleValue)
- return value;
-
- if (!vbExpandAggregates && !bPrintExpandAggregates)
- return kUnresolvedCompositeValue;
-
- bool bPrintAggregateFieldNames = false;
- bPrintAggregateFieldNames =
- !rSessionInfo.SharedDataRetrieve<bool>(
- rSessionInfo.m_constStrPrintAggregateFieldNames,
- bPrintAggregateFieldNames) ||
- bPrintAggregateFieldNames;
-
- CMICmnMIValueTuple miValueTuple;
- const bool bOk = GetCompositeValue(bPrintAggregateFieldNames, miValueTuple);
- if (!bOk)
- return kUnknownValue;
-
- value = miValueTuple.GetString();
- return value;
-}
-
-//++
-// Details: Retrieve from the LLDB SB Value object the value of the variable
-// described in
-// text if it has a simple format (not composite).
-// Type: Method.
-// Args: vwrValue - (W) The SBValue in a string format.
-// Return: MIstatus::success - Function succeeded.
-// MIstatus::failure - Function failed.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::GetSimpleValue(const bool vbHandleArrayType,
- CMIUtilString &vwrValue) const {
- const MIuint nChildren = m_rValue.GetNumChildren();
- if (nChildren == 0) {
- vwrValue = GetValueSummary(!m_bHandleCharType && IsCharType(), kUnknownValue);
- return MIstatus::success;
- } else if (IsPointerType()) {
- vwrValue =
- GetValueSummary(!m_bHandleCharType && IsPointeeCharType(), kUnknownValue);
- return MIstatus::success;
- } else if (IsArrayType()) {
- CMICmnLLDBDebugSessionInfo &rSessionInfo(
- CMICmnLLDBDebugSessionInfo::Instance());
- bool bPrintCharArrayAsString = false;
- bPrintCharArrayAsString = rSessionInfo.SharedDataRetrieve<bool>(
- rSessionInfo.m_constStrPrintCharArrayAsString,
- bPrintCharArrayAsString) &&
- bPrintCharArrayAsString;
- if (bPrintCharArrayAsString && m_bHandleCharType &&
- IsFirstChildCharType()) {
- vwrValue = GetValueSummary(false);
- return MIstatus::success;
- } else if (vbHandleArrayType) {
- vwrValue = CMIUtilString::Format("[%u]", nChildren);
- return MIstatus::success;
- }
- } else {
- // Treat composite value which has registered summary
- // (for example with AddCXXSummary) as simple value
- vwrValue = GetValueSummary(false);
- if (!vwrValue.empty())
- return MIstatus::success;
- }
-
- // Composite variable type i.e. struct
- return MIstatus::failure;
-}
-
-bool CMICmnLLDBUtilSBValue::GetCompositeValue(
- const bool vbPrintFieldNames, CMICmnMIValueTuple &vwrMiValueTuple,
- const MIuint vnDepth /* = 1 */) const {
- const MIuint nMaxDepth = 10;
- const MIuint nChildren = m_rValue.GetNumChildren();
- for (MIuint i = 0; i < nChildren; ++i) {
- const lldb::SBValue member = m_rValue.GetChildAtIndex(i);
- const CMICmnLLDBUtilSBValue utilMember(member, m_bHandleCharType,
- m_bHandleArrayType);
- const bool bHandleArrayTypeAsSimple = false;
- CMIUtilString value;
- const bool bIsSimpleValue =
- utilMember.GetSimpleValue(bHandleArrayTypeAsSimple, value);
- if (bIsSimpleValue) {
- // OK. Value is simple (not composite) and was successfully got
- } else if (vnDepth < nMaxDepth) {
- // Need to get value from composite type
- CMICmnMIValueTuple miValueTuple;
- const bool bOk = utilMember.GetCompositeValue(vbPrintFieldNames,
- miValueTuple, vnDepth + 1);
- if (!bOk)
- // Can't obtain composite type
- value = kUnknownValue;
- else
- // OK. Value is composite and was successfully got
- value = miValueTuple.GetString();
- } else {
- // Need to get value from composite type, but vnMaxDepth is reached
- value = kUnresolvedCompositeValue;
- }
- const bool bNoQuotes = true;
- const CMICmnMIValueConst miValueConst(value, bNoQuotes);
- if (vbPrintFieldNames) {
- const bool bUseSpacing = true;
- const CMICmnMIValueResult miValueResult(utilMember.GetName(),
- miValueConst, bUseSpacing);
- vwrMiValueTuple.Add(miValueResult, bUseSpacing);
- } else {
- const bool bUseSpacing = false;
- vwrMiValueTuple.Add(miValueConst, bUseSpacing);
- }
- }
-
- return MIstatus::success;
-}
-
-// Returns value or value + summary, depending on valueOnly parameter value.
-// If result is an empty string returns failVal.
-CMIUtilString
-CMICmnLLDBUtilSBValue::GetValueSummary(bool valueOnly,
- const CMIUtilString &failVal) const {
- if (!m_rValue.IsValid())
- return failVal;
-
- CMIUtilString value, valSummary;
- const char *c_value = m_rValue.GetValue();
- if (valueOnly)
- return c_value == nullptr ? failVal : c_value;
-
- const char *c_summary = m_rValue.GetSummary();
- if (c_value)
- value = c_value;
- else if (c_summary == nullptr)
- return failVal;
-
- if (c_summary && c_summary[0]) {
- valSummary = c_summary;
- lldb::SBTypeSummary summary = m_rValue.GetTypeSummary();
- if (summary.IsValid() && summary.DoesPrintValue(m_rValue) &&
- !value.empty()) {
- valSummary.insert(0, value + " ");
- }
- return valSummary;
- }
- // no summary - return just value
- return value;
-}
-
-//++
-// Details: Check that basic type is a char type. Char type can be signed or
-// unsigned.
-// Type: Static.
-// Args: eType - type to check
-// Return: bool - True = Yes is a char type, false = some other type.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsCharBasicType(lldb::BasicType eType) {
- switch (eType) {
- case lldb::eBasicTypeChar:
- case lldb::eBasicTypeSignedChar:
- case lldb::eBasicTypeUnsignedChar:
- case lldb::eBasicTypeChar16:
- case lldb::eBasicTypeChar32:
- return true;
- default:
- return false;
- }
-}
-
-//++
-// Details: Retrieve the flag stating whether this value object is a char type
-// or some
-// other type. Char type can be signed or unsigned.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes is a char type, false = some other type.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsCharType() const {
- const lldb::BasicType eType = m_rValue.GetType().GetBasicType();
- return IsCharBasicType(eType);
-}
-
-//++
-// Details: Retrieve the flag stating whether first child value object of *this
-// object is
-// a char type or some other type. Returns false if there are not
-// children. Char
-// type can be signed or unsigned.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes is a char type, false = some other type.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsFirstChildCharType() const {
- const MIuint nChildren = m_rValue.GetNumChildren();
-
- // Is it a basic type
- if (nChildren == 0)
- return false;
-
- const lldb::SBValue member = m_rValue.GetChildAtIndex(0);
- const CMICmnLLDBUtilSBValue utilValue(member);
- return utilValue.IsCharType();
-}
-
-//++
-// Details: Retrieve the flag stating whether pointee object of *this object is
-// a char type or some other type. Returns false if there are not
-// children. Char
-// type can be signed or unsigned.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes is a char type, false = some other type.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsPointeeCharType() const {
- const MIuint nChildren = m_rValue.GetNumChildren();
-
- // Is it a basic type
- if (nChildren == 0)
- return false;
-
- const lldb::BasicType eType =
- m_rValue.GetType().GetPointeeType().GetBasicType();
- return IsCharBasicType(eType);
-}
-
-//++
-// Details: Retrieve the flag stating whether this value object is a integer
-// type or some
-// other type. Char type can be signed or unsigned and short or
-// long/very long.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes is a integer type, false = some other type.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsIntegerType() const {
- const lldb::BasicType eType = m_rValue.GetType().GetBasicType();
- return ((eType == lldb::eBasicTypeShort) ||
- (eType == lldb::eBasicTypeUnsignedShort) ||
- (eType == lldb::eBasicTypeInt) ||
- (eType == lldb::eBasicTypeUnsignedInt) ||
- (eType == lldb::eBasicTypeLong) ||
- (eType == lldb::eBasicTypeUnsignedLong) ||
- (eType == lldb::eBasicTypeLongLong) ||
- (eType == lldb::eBasicTypeUnsignedLongLong) ||
- (eType == lldb::eBasicTypeInt128) ||
- (eType == lldb::eBasicTypeUnsignedInt128));
-}
-
-//++
-// Details: Retrieve the flag stating whether this value object is a pointer
-// type or some
-// other type.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes is a pointer type, false = some other type.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsPointerType() const {
- return m_rValue.GetType().IsPointerType();
-}
-
-//++
-// Details: Retrieve the flag stating whether this value object is an array type
-// or some
-// other type.
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes is an array type, false = some other type.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsArrayType() const {
- return m_rValue.GetType().IsArrayType();
-}
-
-//++
-// Details: Retrieve the C string data of value object by read the memory where
-// the
-// variable is held.
-// Type: Method.
-// Args: vrValue - (R) LLDB SBValue variable object.
-// Return: CMIUtilString - Text description of the variable's value.
-// Throws: None.
-//--
-template <typename charT>
-CMIUtilString
-CMICmnLLDBUtilSBValue::ReadCStringFromHostMemory(lldb::SBValue &vrValue,
- const MIuint vnMaxLen) const {
- std::string result;
- lldb::addr_t addr = vrValue.GetLoadAddress(),
- end_addr = addr + vnMaxLen * sizeof(charT);
- lldb::SBProcess process = CMICmnLLDBDebugSessionInfo::Instance().GetProcess();
- lldb::SBError error;
- while (addr < end_addr) {
- charT ch;
- const MIuint64 nReadBytes =
- process.ReadMemory(addr, &ch, sizeof(ch), error);
- if (error.Fail() || nReadBytes != sizeof(ch))
- return kUnknownValue;
- else if (ch == 0)
- break;
- result.append(
- CMIUtilString::ConvertToPrintableASCII(ch, true /* bEscapeQuotes */));
- addr += sizeof(ch);
- }
-
- return result;
-}
-
-//++
-// Details: Retrieve the state of the value object's name.
-// Type: Method.
-// Args: None.
-// Return: bool - True = yes name is indeterminate, false = name is valid.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsNameUnknown() const {
- const CMIUtilString name(GetName());
- return (name == kUnknownValue);
-}
-
-//++
-// Details: Retrieve the state of the value object's value data.
-// Type: Method.
-// Args: None.
-// Return: bool - True = yes value is indeterminate, false = value valid.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsValueUnknown() const {
- const CMIUtilString value(GetValue());
- return (value == kUnknownValue);
-}
-
-//++
-// Details: Retrieve the value object's type name if valid.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString - The type name or "??".
-// Throws: None.
-//--
-CMIUtilString CMICmnLLDBUtilSBValue::GetTypeName() const {
- const char *pName = m_bValidSBValue ? m_rValue.GetTypeName() : nullptr;
- const CMIUtilString text((pName != nullptr) ? pName : kUnknownValue);
-
- return text;
-}
-
-//++
-// Details: Retrieve the value object's display type name if valid.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString - The type name or "??".
-// Throws: None.
-//--
-CMIUtilString CMICmnLLDBUtilSBValue::GetTypeNameDisplay() const {
- const char *pName = m_bValidSBValue ? m_rValue.GetDisplayTypeName() : nullptr;
- const CMIUtilString text((pName != nullptr) ? pName : kUnknownValue);
-
- return text;
-}
-
-//++
-// Details: Retrieve whether the value object's is valid or not.
-// Type: Method.
-// Args: None.
-// Return: bool - True = valid, false = not valid.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsValid() const { return m_bValidSBValue; }
-
-//++
-// Details: Retrieve the value object' has a name. A value object can be valid
-// but still
-// have no name which suggest it is not a variable.
-// Type: Method.
-// Args: None.
-// Return: bool - True = valid, false = not valid.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::HasName() const {
- bool bHasAName = false;
-
- const char *pName = m_bValidSBValue ? m_rValue.GetDisplayTypeName() : nullptr;
- if (pName != nullptr) {
- bHasAName = (CMIUtilString(pName).length() > 0);
- }
-
- return bHasAName;
-}
-
-//++
-// Details: Determine if the value object' represents a LLDB variable i.e. "$0".
-// Type: Method.
-// Args: None.
-// Return: bool - True = Yes LLDB variable, false = no.
-// Throws: None.
-//--
-bool CMICmnLLDBUtilSBValue::IsLLDBVariable() const {
- return (GetName().at(0) == '$');
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBUtilSBValue.h (removed)
@@ -1,77 +0,0 @@
-//===-- MICmnLLDBUtilSBValue.h ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third Party Headers:
-#include "lldb/API/SBValue.h"
-
-// In-house headers:
-#include "MICmnMIValueTuple.h"
-#include "MIDataTypes.h"
-
-// Declarations:
-class CMIUtilString;
-
-//++
-//============================================================================
-// Details: Utility helper class to lldb::SBValue. Using a lldb::SBValue extract
-// value object information to help form verbose debug information.
-//--
-class CMICmnLLDBUtilSBValue {
- // Methods:
-public:
- /* ctor */ CMICmnLLDBUtilSBValue(const lldb::SBValue &vrValue,
- const bool vbHandleCharType = false,
- const bool vbHandleArrayType = true);
- /* dtor */ ~CMICmnLLDBUtilSBValue();
- //
- CMIUtilString GetName() const;
- CMIUtilString GetValue(const bool vbExpandAggregates = false) const;
- CMIUtilString GetTypeName() const;
- CMIUtilString GetTypeNameDisplay() const;
- bool IsCharType() const;
- bool IsFirstChildCharType() const;
- bool IsPointeeCharType() const;
- bool IsIntegerType() const;
- bool IsPointerType() const;
- bool IsArrayType() const;
- bool IsLLDBVariable() const;
- bool IsNameUnknown() const;
- bool IsValueUnknown() const;
- bool IsValid() const;
- bool HasName() const;
-
- // Methods:
-private:
- template <typename charT>
- CMIUtilString
- ReadCStringFromHostMemory(lldb::SBValue &vrValue,
- const MIuint vnMaxLen = UINT32_MAX) const;
- bool GetSimpleValue(const bool vbHandleArrayType,
- CMIUtilString &vrValue) const;
- bool GetCompositeValue(const bool vbPrintFieldNames,
- CMICmnMIValueTuple &vwrMiValueTuple,
- const MIuint vnDepth = 1) const;
- CMIUtilString
- GetValueSummary(bool valueOnly,
- const CMIUtilString &failVal = CMIUtilString()) const;
-
- // Statics:
-private:
- static bool IsCharBasicType(lldb::BasicType eType);
-
- // Attributes:
-private:
- lldb::SBValue &m_rValue;
- bool m_bValidSBValue; // True = SBValue is a valid object, false = not valid.
- bool m_bHandleCharType; // True = Yes return text molding to char type, false
- // = just return data.
- bool m_bHandleArrayType; // True = Yes return special stub for array type,
- // false = just return data.
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnLog.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLog.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLog.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLog.cpp (removed)
@@ -1,330 +0,0 @@
-//===-- MICmnLog.cpp --------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnLog.h"
-#include "MICmnLogMediumFile.h"
-#include "MICmnResources.h"
-#include "MIDriverMgr.h"
-#include "MIUtilDateTimeStd.h"
-
-//++
-// Details: CMICmnLog constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLog::CMICmnLog() : m_bEnabled(false), m_bInitializingATM(false) {
- // Do not use this constructor, use Initialize()
-}
-
-//++
-// Details: CMICmnLog destructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLog::~CMICmnLog() { Shutdown(); }
-
-//++
-// Details: Initialize resources for *this Logger.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::Initialize() {
- m_clientUsageRefCnt++;
-
- if (m_bInitialized)
- return MIstatus::success;
-
- ClrErrorDescription();
-
- // Mediums set inside because explicitly initing in MIDriverMain.cpp causes
- // compile errors with CAtlFile
- CMICmnLogMediumFile &rFileLog(CMICmnLogMediumFile::Instance());
- bool bOk = RegisterMedium(rFileLog);
- if (bOk) {
- // Set the Log trace file's header
- const CMIUtilString &rCR(rFileLog.GetLineReturn());
- CMIUtilDateTimeStd date;
- CMIUtilString msg;
- msg = CMIUtilString::Format(
- "%s\n", CMIDriverMgr::Instance().GetAppVersion().c_str());
- CMIUtilString logHdr(msg);
- msg = CMIUtilString::Format(MIRSRC(IDS_LOG_MSG_CREATION_DATE),
- date.GetDate().c_str(), date.GetTime().c_str(),
- rCR.c_str());
- logHdr += msg;
- msg =
- CMIUtilString::Format(MIRSRC(IDS_LOG_MSG_FILE_LOGGER_PATH),
- rFileLog.GetFileNamePath().c_str(), rCR.c_str());
- logHdr += msg;
-
- bOk = rFileLog.SetHeaderTxt(logHdr);
-
- // Note log file medium's status is not available until we write at least
- // once to the file (so just write the title 1st line)
- m_bInitializingATM = true;
- CMICmnLog::WriteLog(".");
- if (!rFileLog.IsOk()) {
- const CMIUtilString msg(
- CMIUtilString::Format(MIRSRC(IDS_LOG_ERR_FILE_LOGGER_DISABLED),
- rFileLog.GetErrorDescription().c_str()));
- CMICmnLog::WriteLog(msg);
- }
- m_bInitializingATM = false;
- }
-
- m_bInitialized = bOk;
-
- return bOk;
-}
-
-//++
-// Details: Release resources for *this Logger.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::Shutdown() {
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
-
- if (!m_bInitialized)
- return MIstatus::success;
-
- ClrErrorDescription();
-
- const bool bOk = UnregisterMediumAll();
-
- m_bInitialized = bOk;
-
- return bOk;
-}
-
-//++
-// Details: Enabled or disable *this Logger from writing any data to registered
-// clients.
-// Type: Method.
-// Args: vbYes - (R) True = Logger enabled, false = disabled.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::SetEnabled(const bool vbYes) {
- m_bEnabled = vbYes;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve state whether *this Logger is enabled writing data to
-// registered clients.
-// Type: Method.
-// Args: None.
-// Return: True = Logger enable.
-// False = disabled.
-// Throws: None.
-//--
-bool CMICmnLog::GetEnabled() const { return m_bEnabled; }
-
-//++
-// Details: Unregister all the Mediums registered with *this Logger.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::UnregisterMediumAll() {
- MapMediumToName_t::const_iterator it = m_mapMediumToName.begin();
- for (; it != m_mapMediumToName.end(); it++) {
- IMedium *pMedium = (*it).first;
- pMedium->Shutdown();
- }
-
- m_mapMediumToName.clear();
-
- return MIstatus::success;
-}
-
-//++
-// Details: Register a Medium with *this Logger.
-// Type: Method.
-// Args: vrMedium - (R) The medium to register.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::RegisterMedium(const IMedium &vrMedium) {
- if (HaveMediumAlready(vrMedium))
- return MIstatus::success;
-
- IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
- if (!pMedium->Initialize()) {
- const CMIUtilString &rStrMedName(pMedium->GetName());
- const CMIUtilString &rStrMedErr(pMedium->GetError());
- SetErrorDescription(CMIUtilString::Format(MIRSRC(IDS_LOG_MEDIUM_ERR_INIT),
- rStrMedName.c_str(),
- rStrMedErr.c_str()));
- return MIstatus::failure;
- }
-
- MapPairMediumToName_t pr(pMedium, pMedium->GetName());
- m_mapMediumToName.insert(pr);
-
- return MIstatus::success;
-}
-
-//++
-// Details: Query the Logger to see if a medium is already registered.
-// Type: Method.
-// Args: vrMedium - (R) The medium to query.
-// Return: True - registered.
-// False - not registered.
-// Throws: None.
-//--
-bool CMICmnLog::HaveMediumAlready(const IMedium &vrMedium) const {
- IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
- const MapMediumToName_t::const_iterator it = m_mapMediumToName.find(pMedium);
- return it != m_mapMediumToName.end();
-}
-
-//++
-// Details: Unregister a medium from the Logger.
-// Type: Method.
-// Args: vrMedium - (R) The medium to unregister.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::UnregisterMedium(const IMedium &vrMedium) {
- IMedium *pMedium = const_cast<IMedium *>(&vrMedium);
- m_mapMediumToName.erase(pMedium);
-
- return MIstatus::success;
-}
-
-//++
-// Details: The callee client uses this function to write to the Logger. The
-// data to be
-// written is given out to all the mediums registered. The verbosity
-// type parameter
-// indicates to the medium(s) the type of data or message given to it.
-// The medium has
-// modes of verbosity and depending on the verbosity set determines
-// which writes
-// go in to the logger.
-// The logger must be initialized successfully before a write to any
-// registered
-// can be carried out.
-// Type: Method.
-// Args: vData - (R) The data to write to the logger.
-// veType - (R) Verbosity type.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::Write(const CMIUtilString &vData, const ELogVerbosity veType) {
- if (!m_bInitialized && !m_bInitializingATM)
- return MIstatus::success;
- if (m_bRecursiveDive)
- return MIstatus::success;
- if (!m_bEnabled)
- return MIstatus::success;
-
- m_bRecursiveDive = true;
-
- MIuint cnt = 0;
- MIuint cntErr = 0;
- {
- MapMediumToName_t::const_iterator it = m_mapMediumToName.begin();
- while (it != m_mapMediumToName.end()) {
- IMedium *pMedium = (*it).first;
- const CMIUtilString &rNameMedium = (*it).second;
- MIunused(rNameMedium);
- if (pMedium->Write(vData, veType))
- cnt++;
- else
- cntErr++;
-
- // Next
- ++it;
- }
- }
-
- bool bOk = MIstatus::success;
- const MIuint mediumCnt = m_mapMediumToName.size();
- if ((cnt == 0) && (mediumCnt > 0)) {
- SetErrorDescription(MIRSRC(IDS_LOG_MEDIUM_ERR_WRITE_ANY));
- bOk = MIstatus::failure;
- }
- if (bOk && (cntErr != 0)) {
- SetErrorDescription(MIRSRC(IDS_LOG_MEDIUM_ERR_WRITE_MEDIUMFAIL));
- bOk = MIstatus::failure;
- }
-
- m_bRecursiveDive = false;
-
- return bOk;
-}
-
-//++
-// Details: Short cut function call to write only to the Log file.
-// The logger must be initialized successfully before a write to any
-// registered
-// can be carried out.
-// Type: Static.
-// Args: vData - (R) The data to write to the logger.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLog::WriteLog(const CMIUtilString &vData) {
- return CMICmnLog::Instance().Write(vData, CMICmnLog::eLogVerbosity_Log);
-}
-
-//++
-// Details: Retrieve a string detailing the last error.
-// Type: Method.
-// Args: None,
-// Return: CMIUtilString.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLog::GetErrorDescription() const {
- return m_strMILastErrorDescription;
-}
-
-//++
-// Details: Set the internal description of the last error.
-// Type: Method.
-// Args: (R) String containing a description of the last error.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnLog::SetErrorDescription(const CMIUtilString &vrTxt) const {
- m_strMILastErrorDescription = vrTxt;
-}
-
-//++
-// Details: Clear the last error.
-// Type: None.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnLog::ClrErrorDescription() const {
- m_strMILastErrorDescription = CMIUtilString("");
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLog.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLog.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLog.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLog.h (removed)
@@ -1,138 +0,0 @@
-//===-- MICmnLog.h ----------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// Third party headers:
-#include <map>
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MIUtilSingletonBase.h"
-#include "MIUtilString.h"
-
-//++
-//============================================================================
-// Details: MI common code implementation class. Handle application trace
-// activity logging. Medium objects derived from the Medium abstract
-/// class are registered with this logger. The function Write is called
-// by a client callee to log information. That information is given to
-// registered relevant mediums. The medium file is registered during
-// *this logs initialization so it will always have a file log for the
-// application.
-// Singleton class.
-//--
-class CMICmnLog : public MI::ISingleton<CMICmnLog> {
- friend MI::ISingleton<CMICmnLog>;
-
- // Enumeration:
-public:
- //++
- // Description: Data given to the Logger can be of several types. The Logger
- // can be
- // set at levels of verbosity. Can determine how data is sent to
- // one or
- // mediums.
- //--
- enum ELogVerbosity { // Descriptions of what 'may' occur, depends ultimately
- // on the medium itself. See the medium.
- eLogVerbosity_FnTrace = 0x00000004, // Debug function stack call tracing
- eLogVerbosity_DbgOp = 0x00000008, // Send a string to the debugger for
- // display (not implemented)
- eLogVerbosity_ClientMsg = 0x00000010, // A client using MI can insert
- // messages into the log (not
- // implemented)
- eLogVerbosity_Log = 0x00000020 // Send to only the Log file.
- };
-
- // Class:
-public:
- //++
- // Description: Register a medium derived from this interface which will be
- // called writing log trace data i.e. a file or a console.
- // Medium objects registered are not owned by *this logger.
- //--
- class IMedium {
- public:
- virtual bool Initialize() = 0;
- virtual const CMIUtilString &GetName() const = 0;
- virtual bool Write(const CMIUtilString &vData,
- const ELogVerbosity veType) = 0;
- virtual const CMIUtilString &GetError() const = 0;
- virtual bool Shutdown() = 0;
-
- // Not part of the interface, ignore
- // AD: This virtual destructor seems to hit a bug in the stdlib
- // where vector delete is incorrectly called. Workaround is
- // to comment this out while I investigate.
- /* dtor */ virtual ~IMedium() {}
- };
-
- // Statics:
-public:
- static bool WriteLog(const CMIUtilString &vData);
-
- // Methods:
-public:
- bool RegisterMedium(const IMedium &vrMedium);
- bool UnregisterMedium(const IMedium &vrMedium);
- bool Write(const CMIUtilString &vData, const ELogVerbosity veType);
- bool SetEnabled(const bool vbYes);
- bool GetEnabled() const;
-
- // MI common object handling - duplicate of CMICmnBase functions, necessary
- // for LINUX build
- // Done to stop locking on object construction init circular dependency.
- const CMIUtilString &GetErrorDescription() const;
- void SetErrorDescription(const CMIUtilString &vrTxt) const;
- void ClrErrorDescription() const;
-
- // Overridden:
-public:
- // From MI::ISingleton
- bool Initialize() override;
- bool Shutdown() override;
-
- // Methods:
-private:
- /* ctor */ CMICmnLog();
- /* ctor */ CMICmnLog(const CMICmnLog &);
- void operator=(const CMICmnLog &);
-
- // Overridden:
-private:
- // From CMICmnBase
- /* dtor */ ~CMICmnLog() override;
-
- // Typedef:
-private:
- typedef std::map<IMedium *, CMIUtilString> MapMediumToName_t;
- typedef std::pair<IMedium *, CMIUtilString> MapPairMediumToName_t;
-
- // Methods:
-private:
- bool HaveMediumAlready(const IMedium &vrMedium) const;
- bool UnregisterMediumAll();
-
- // Attributes:
-private:
- bool m_bRecursiveDive; // True = yes recursive, false = no
- MapMediumToName_t m_mapMediumToName;
- bool m_bEnabled; // True = Logger enabled for writing to mediums, false =
- // medium not written to
- bool m_bInitializingATM; // True = Yes in process of initing *this logger,
- // false = not initing
- //
- // MI common object handling - duplicate of CMICmnBase functions, necessary
- // for LINUX build
- bool m_bInitialized; // True = yes successfully initialized, false = no yet or
- // failed
- mutable CMIUtilString m_strMILastErrorDescription;
- MIint m_clientUsageRefCnt; // Count of client using *this object so not
- // shutdown() object to early
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.cpp (removed)
@@ -1,385 +0,0 @@
-//===-- MICmnLogMediumFile.cpp ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnLogMediumFile.h"
-#include "MICmnResources.h"
-
-//++
-// Details: CMICmnLogMediumFile constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLogMediumFile::CMICmnLogMediumFile()
- : m_constThisMediumName(MIRSRC(IDS_MEDIUMFILE_NAME)),
- m_constMediumFileNameFormat("lldb-mi-%s.log"),
- m_strMediumFileName(MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH)),
- m_strMediumFileDirectory("."),
- m_fileNamePath(MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH)),
- m_eVerbosityType(CMICmnLog::eLogVerbosity_Log),
- m_strDate(CMIUtilDateTimeStd().GetDate()),
- m_fileHeaderTxt(MIRSRC(IDS_MEDIUMFILE_ERR_FILE_HEADER)) {}
-
-//++
-// Details: CMICmnLogMediumFile destructor.
-// Type: Overridden.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnLogMediumFile::~CMICmnLogMediumFile() {}
-
-//++
-// Details: Get the singleton instance of *this class.
-// Type: Static.
-// Args: None.
-// Return: CMICmnLogMediumFile - Reference to *this object.
-// Throws: None.
-//--
-CMICmnLogMediumFile &CMICmnLogMediumFile::Instance() {
- static CMICmnLogMediumFile instance;
-
- return instance;
-}
-
-//++
-// Details: Initialize setup *this medium ready for use.
-// Type: Overridden.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::Initialize() {
- m_bInitialized = true;
- return FileFormFileNamePath();
-}
-
-//++
-// Details: Unbind detach or release resources used by *this medium.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::Shutdown() {
- if (m_bInitialized) {
- m_bInitialized = false;
- m_file.Close();
- }
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve the name of *this medium.
-// Type: Overridden.
-// Args: None.
-// Return: CMIUtilString - Text data.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLogMediumFile::GetName() const {
- return m_constThisMediumName;
-}
-
-//++
-// Details: The callee client calls the write function on the Logger. The data
-// to be
-// written is given out to all the mediums registered. The verbosity
-// type parameter
-// indicates to the medium the type of data or message given to it. The
-// medium has
-// modes of verbosity and depending on the verbosity set determines
-// which data is
-// sent to the medium's output.
-// Type: Method.
-// Args: vData - (R) The data to write to the logger.
-// veType - (R) Verbosity type.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::Write(const CMIUtilString &vData,
- const CMICmnLog::ELogVerbosity veType) {
- if (m_bInitialized && m_file.IsOk()) {
- const bool bDoWrite = (m_eVerbosityType & veType);
- if (bDoWrite) {
- bool bNewCreated = false;
- bool bOk = m_file.CreateWrite(m_fileNamePath, bNewCreated);
- if (bOk) {
- if (bNewCreated)
- bOk = FileWriteHeader();
- bOk = bOk && FileWriteEnglish(MassagedData(vData, veType));
- }
- return bOk;
- }
- }
-
- return MIstatus::failure;
-}
-
-//++
-// Details: Retrieve *this medium's last error condition.
-// Type: Method.
-// Args: None.
-// Return: CString & - Text description.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLogMediumFile::GetError() const {
- return m_strMILastErrorDescription;
-}
-
-//++
-// Details: Set the verbosity mode for this medium.
-// Type: Method.
-// Args: veType - (R) Mask value.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::SetVerbosity(const MIuint veType) {
- m_eVerbosityType = veType;
- return MIstatus::success;
-}
-
-//++
-// Details: Get the verbosity mode for this medium.
-// Type: Method.
-// Args: veType - (R) Mask value.
-// Return: CMICmnLog::ELogVerbosity - Mask value.
-// Throws: None.
-//--
-MIuint CMICmnLogMediumFile::GetVerbosity() const { return m_eVerbosityType; }
-
-//++
-// Details: Write data to a file English font.
-// Type: Method.
-// Args: vData - (R) The data to write to the logger.
-// Return: None.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::FileWriteEnglish(const CMIUtilString &vData) {
- return m_file.Write(vData);
-}
-
-//++
-// Details: Determine and form the medium file's directory path and name.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::FileFormFileNamePath() {
- ClrErrorDescription();
-
- m_fileNamePath = MIRSRC(IDS_MEDIUMFILE_ERR_INVALID_PATH);
-
- CMIUtilDateTimeStd date;
- m_strMediumFileName =
- CMIUtilString::Format(m_constMediumFileNameFormat.c_str(),
- date.GetDateTimeLogFilename().c_str());
-
-#if defined(_MSC_VER)
- m_fileNamePath = CMIUtilString::Format(
- "%s\\%s", m_strMediumFileDirectory.c_str(), m_strMediumFileName.c_str());
-#else
- m_fileNamePath = CMIUtilString::Format(
- "%s/%s", m_strMediumFileDirectory.c_str(), m_strMediumFileName.c_str());
-#endif // defined ( _MSC_VER )
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve the medium file's directory path and name.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - File path.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLogMediumFile::GetFileNamePath() const {
- return m_fileNamePath;
-}
-
-//++
-// Details: Retrieve the medium file's name.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - File name.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLogMediumFile::GetFileName() const {
- return m_strMediumFileName;
-}
-
-//++
-// Details: Massage the data to behave correct when submitted to file. Insert
-// extra log
-// specific text. The veType is there to allow in the future to parse
-// the log and
-// filter in out specific types of message to make viewing the log more
-// manageable.
-// Type: Method.
-// Args: vData - (R) Raw data.
-// veType - (R) Message type.
-// Return: CMIUtilString - Massaged data.
-// Throws: None.
-//--
-CMIUtilString
-CMICmnLogMediumFile::MassagedData(const CMIUtilString &vData,
- const CMICmnLog::ELogVerbosity veType) {
- const CMIUtilString strCr("\n");
- CMIUtilString data;
- const char verbosityCode(ConvertLogVerbosityTypeToId(veType));
- const CMIUtilString dt(CMIUtilString::Format("%s %s", m_strDate.c_str(),
- m_dateTime.GetTime().c_str()));
-
- data = CMIUtilString::Format("%c,%s,%s", verbosityCode, dt.c_str(),
- vData.c_str());
- data = ConvertCr(data);
-
- // Look for EOL...
- const size_t pos = vData.rfind(strCr);
- if (pos == vData.size())
- return data;
-
- // ... did not have an EOL so add one
- data += GetLineReturn();
-
- return data;
-}
-
-//++
-// Details: Convert the Log's verbosity type number into a single char
-// character.
-// Type: Method.
-// Args: veType - (R) Message type.
-// Return: wchar_t - A letter.
-// Throws: None.
-//--
-char CMICmnLogMediumFile::ConvertLogVerbosityTypeToId(
- const CMICmnLog::ELogVerbosity veType) const {
- char c = 0;
- if (veType != 0) {
- MIuint cnt = 0;
- MIuint number(veType);
- while (1 != number) {
- number = number >> 1;
- ++cnt;
- }
- c = 'A' + cnt;
- } else {
- c = '*';
- }
-
- return c;
-}
-
-//++
-// Details: Retrieve state of whether the file medium is ok.
-// Type: Method.
-// Args: None.
-// Return: True - file ok.
-// False - file has a problem.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::IsOk() const { return m_file.IsOk(); }
-
-//++
-// Details: Status on the file log medium existing already.
-// Type: Method.
-// Args: None.
-// Return: True - Exists.
-// False - Not found.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::IsFileExist() const {
- return m_file.IsFileExist(GetFileNamePath());
-}
-
-//++
-// Details: Write the header text the logger file.
-// Type: Method.
-// Args: vText - (R) Text.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::FileWriteHeader() {
- return FileWriteEnglish(ConvertCr(m_fileHeaderTxt));
-}
-
-//++
-// Details: Convert any carriage line returns to be compatible with the platform
-// the
-// Log file is being written to.
-// Type: Method.
-// Args: vData - (R) Text data.
-// Return: CMIUtilString - Converted string data.
-// Throws: None.
-//--
-CMIUtilString CMICmnLogMediumFile::ConvertCr(const CMIUtilString &vData) const {
- const CMIUtilString strCr("\n");
- const CMIUtilString &rCrCmpat(GetLineReturn());
-
- if (strCr == rCrCmpat)
- return vData;
-
- const size_t nSizeCmpat(rCrCmpat.size());
- const size_t nSize(strCr.size());
- CMIUtilString strConv(vData);
- size_t pos = strConv.find(strCr);
- while (pos != CMIUtilString::npos) {
- strConv.replace(pos, nSize, rCrCmpat);
- pos = strConv.find(strCr, pos + nSizeCmpat);
- }
-
- return strConv;
-}
-
-//++
-// Details: Set the header text that is written to the logger file at the
-// beginning.
-// Type: Method.
-// Args: vText - (R) Text.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::SetHeaderTxt(const CMIUtilString &vText) {
- m_fileHeaderTxt = vText;
-
- return MIstatus::success;
-}
-
-//++
-// Details: Retrieve the file current carriage line return characters used.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - Text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnLogMediumFile::GetLineReturn() const {
- return m_file.GetLineReturn();
-}
-
-//++
-// Details: Set the directory to place the log file.
-// Type: Method.
-// Args: vPath - (R) Path to log.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnLogMediumFile::SetDirectory(const CMIUtilString &vPath) {
- m_strMediumFileDirectory = vPath;
-
- return FileFormFileNamePath();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLogMediumFile.h (removed)
@@ -1,84 +0,0 @@
-//===-- MICmnLogMediumFile.h ------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MICmnLog.h"
-#include "MIUtilDateTimeStd.h"
-#include "MIUtilFileStd.h"
-#include "MIUtilString.h"
-
-//++
-//============================================================================
-// Details: MI common code implementation class. Logs application fn
-// trace/message/
-// error messages to a file. Used as part of the CMICmnLog Logger
-// system. When instantiated *this object is register with the Logger
-// which the Logger when given data to write to registered medium comes
-// *this medium.
-// Singleton class.
-//--
-class CMICmnLogMediumFile : public CMICmnBase, public CMICmnLog::IMedium {
- // Statics:
-public:
- static CMICmnLogMediumFile &Instance();
-
- // Methods:
-public:
- bool SetHeaderTxt(const CMIUtilString &vText);
- bool SetVerbosity(const MIuint veType);
- MIuint GetVerbosity() const;
- const CMIUtilString &GetFileName() const;
- const CMIUtilString &GetFileNamePath() const;
- bool IsOk() const;
- bool IsFileExist() const;
- const CMIUtilString &GetLineReturn() const;
- bool SetDirectory(const CMIUtilString &vPath);
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnLogMediumFile() override;
- // From CMICmnLog::IMedium
- bool Initialize() override;
- const CMIUtilString &GetName() const override;
- bool Write(const CMIUtilString &vData,
- const CMICmnLog::ELogVerbosity veType) override;
- const CMIUtilString &GetError() const override;
- bool Shutdown() override;
-
- // Methods:
-private:
- /* ctor */ CMICmnLogMediumFile();
- /* ctor */ CMICmnLogMediumFile(const CMICmnLogMediumFile &);
- void operator=(const CMICmnLogMediumFile &);
-
- bool FileWriteEnglish(const CMIUtilString &vData);
- bool FileFormFileNamePath();
- CMIUtilString MassagedData(const CMIUtilString &vData,
- const CMICmnLog::ELogVerbosity veType);
- bool FileWriteHeader();
- char ConvertLogVerbosityTypeToId(const CMICmnLog::ELogVerbosity veType) const;
- CMIUtilString ConvertCr(const CMIUtilString &vData) const;
-
- // Attributes:
-private:
- const CMIUtilString m_constThisMediumName;
- const CMIUtilString m_constMediumFileNameFormat;
- //
- CMIUtilString m_strMediumFileName;
- CMIUtilString m_strMediumFileDirectory;
- CMIUtilString m_fileNamePath;
- MIuint m_eVerbosityType;
- CMIUtilString m_strDate;
- CMIUtilString m_fileHeaderTxt;
- CMIUtilFileStd m_file;
- CMIUtilDateTimeStd m_dateTime;
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp (removed)
@@ -1,202 +0,0 @@
-//===-- MICmnMIOutOfBandRecord.cpp ------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Third Party Headers:
-#include <assert.h>
-
-// In-house headers:
-#include "MICmnMIOutOfBandRecord.h"
-#include "MICmnResources.h"
-
-// Instantiations:
-static const char *
-MapOutOfBandToText(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
- switch (veType) {
- case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
- return "running";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
- return "stopped";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
- return "breakpoint-created";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
- return "breakpoint-modified";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
- return ""; // "" Meant to be empty
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
- return "thread-group-added";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
- return "thread-group-exited";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
- return "thread-group-removed";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
- return "thread-group-started";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
- return "thread-created";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
- return "thread-exited";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
- return "thread-selected";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
- return "library-loaded";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
- return "library-unloaded";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
- return "";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ConsoleStreamOutput:
- return "";
- case CMICmnMIOutOfBandRecord::eOutOfBand_LogStreamOutput:
- return "";
- }
- assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
- return nullptr;
-}
-
-static const char *
-MapOutOfBandToToken(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
- switch (veType) {
- case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
- return "*";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
- return "*";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
- return "@";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
- return "=";
- case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
- return "@";
- case CMICmnMIOutOfBandRecord::eOutOfBand_ConsoleStreamOutput:
- return "~";
- case CMICmnMIOutOfBandRecord::eOutOfBand_LogStreamOutput:
- return "&";
- }
- assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
- return nullptr;
-}
-
-//++
-// Details: Build the Out-of-band record's mandatory data part. The part up to
-// the first
-// (additional) result i.e. async-record ==> "*" type.
-// Args: veType - (R) A MI Out-of-Band enumeration.
-// Return: CMIUtilString - The async record text.
-// Throws: None.
-//--
-static CMIUtilString
-BuildAsyncRecord(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
- auto Token = MapOutOfBandToToken(veType);
- auto Text = MapOutOfBandToText(veType);
- return CMIUtilString::Format("%s%s", CMIUtilString::WithNullAsEmpty(Token),
- CMIUtilString::WithNullAsEmpty(Text));
-}
-
-//++
-// Details: CMICmnMIOutOfBandRecord constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord()
- : m_strAsyncRecord(MIRSRC(IDS_CMD_ERR_EVENT_HANDLED_BUT_NO_ACTION)) {}
-
-//++
-// Details: CMICmnMIOutOfBandRecord constructor.
-// Type: Method.
-// Args: veType - (R) A MI Out-of-Bound enumeration.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(OutOfBand_e veType)
- : m_strAsyncRecord(BuildAsyncRecord(veType)) {}
-
-//++
-// Details: CMICmnMIOutOfBandRecord constructor.
-// Type: Method.
-// Args: veType - (R) A MI Out-of-Bound enumeration.
-// vConst - (R) A MI const object.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(
- OutOfBand_e veType, const CMICmnMIValueConst &vConst)
- : m_strAsyncRecord(BuildAsyncRecord(veType)) {
- m_strAsyncRecord += vConst.GetString();
-}
-
-//++
-// Details: CMICmnMIOutOfBandRecord constructor.
-// Type: Method.
-// Args: veType - (R) A MI Out-of-Bound enumeration.
-// vResult - (R) A MI result object.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(
- OutOfBand_e veType, const CMICmnMIValueResult &vResult)
- : m_strAsyncRecord(BuildAsyncRecord(veType)) {
- Add(vResult);
-}
-
-//++
-// Details: CMICmnMIOutOfBandRecord destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIOutOfBandRecord::~CMICmnMIOutOfBandRecord() {}
-
-//++
-// Details: Return the MI Out-of-band record as a string. The string is a direct
-// result of
-// work done on *this Out-of-band record so if not enough data is added
-// then it is
-// possible to return a malformed Out-of-band record. If nothing has
-// been set or
-// added to *this MI Out-of-band record object then text "<Invalid>"
-// will be returned.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - MI output text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnMIOutOfBandRecord::GetString() const {
- return m_strAsyncRecord;
-}
-
-//++
-// Details: Add to *this Out-of-band record additional information.
-// Type: Method.
-// Args: vResult - (R) A MI result object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIOutOfBandRecord::Add(const CMICmnMIValueResult &vResult) {
- m_strAsyncRecord += ",";
- m_strAsyncRecord += vResult.GetString();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.h (removed)
@@ -1,93 +0,0 @@
-//===-- MICmnMIOutOfBandRecord.h --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIValueResult.h"
-#include "MIUtilString.h"
-
-//++
-//============================================================================
-// Details: MI common code MI Out-of-band (Async) Record class. A class that
-// encapsulates
-// MI result record data and the forming/format of data added to it.
-// Out-of-band records are used to notify the GDB/MI client of
-// additional
-// changes that have occurred. Those changes can either be a
-// consequence
-// of GDB/MI (e.g., a breakpoint modified) or a result of target
-// activity
-// (e.g., target stopped).
-// The syntax is as follows:
-// "*" type ( "," result )*
-// type ==> running | stopped
-//
-// The Out-of-band record can be retrieve at any time *this object is
-// instantiated so unless work is done on *this Out-of-band record then
-// it is
-// possible to return a malformed Out-of-band record. If nothing has
-// been set
-// or added to *this MI Out-of-band record object then text "<Invalid>"
-// will
-// be returned.
-//
-// More information see:
-// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html//
-//--
-class CMICmnMIOutOfBandRecord : public CMICmnBase {
- // Enumerations:
-public:
- //++
- // Details: Enumeration of the type of Out-of-band for *this Out-of-band
- // record
- //--
- enum OutOfBand_e {
- eOutOfBand_Running = 0,
- eOutOfBand_Stopped,
- eOutOfBand_BreakPointCreated,
- eOutOfBand_BreakPointModified,
- eOutOfBand_Thread,
- eOutOfBand_ThreadGroupAdded,
- eOutOfBand_ThreadGroupExited,
- eOutOfBand_ThreadGroupRemoved,
- eOutOfBand_ThreadGroupStarted,
- eOutOfBand_ThreadCreated,
- eOutOfBand_ThreadExited,
- eOutOfBand_ThreadSelected,
- eOutOfBand_TargetModuleLoaded,
- eOutOfBand_TargetModuleUnloaded,
- eOutOfBand_TargetStreamOutput,
- eOutOfBand_ConsoleStreamOutput,
- eOutOfBand_LogStreamOutput
- };
-
- // Methods:
-public:
- /* ctor */ CMICmnMIOutOfBandRecord();
- /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType);
- /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType,
- const CMICmnMIValueConst &vConst);
- /* ctor */ CMICmnMIOutOfBandRecord(OutOfBand_e veType,
- const CMICmnMIValueResult &vResult);
- //
- const CMIUtilString &GetString() const;
- void Add(const CMICmnMIValueResult &vResult);
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIOutOfBandRecord() override;
-
- // Attributes:
-private:
- CMIUtilString
- m_strAsyncRecord; // Holds the text version of the result record to date
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp (removed)
@@ -1,133 +0,0 @@
-//===-- MICmnMIResultRecord.cpp ---------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Third Party Headers:
-#include <assert.h>
-
-// In-house headers:
-#include "MICmnMIResultRecord.h"
-#include "MICmnResources.h"
-
-//++
-// Details: Map a result class to the corresponding string.
-// Args: veType - (R) A MI result class enumeration.
-// Return: const char* - The string corresponding to the result class.
-// Throws: None.
-//--
-static const char *
-MapResultClassToResultClassText(CMICmnMIResultRecord::ResultClass_e veType) {
- switch (veType) {
- case CMICmnMIResultRecord::eResultClass_Done:
- return "done";
- case CMICmnMIResultRecord::eResultClass_Running:
- return "running";
- case CMICmnMIResultRecord::eResultClass_Connected:
- return "connected";
- case CMICmnMIResultRecord::eResultClass_Error:
- return "error";
- case CMICmnMIResultRecord::eResultClass_Exit:
- return "exit";
- }
- assert(false && "unknown CMICmnMIResultRecord::ResultClass_e");
- return nullptr;
-}
-
-//++
-// Details: Build the result record's mandatory data part. The part up to the
-// first
-// (additional) result i.e. result-record ==> [ token ] "^"
-// result-class.
-// Args: vrToken - (R) The command's transaction ID or token.
-// veType - (R) A MI result class enumeration.
-// Return: CMIUtilString & - MI result record mandatory data
-// Throws: None.
-//--
-static const CMIUtilString
-BuildResultRecord(const CMIUtilString &vrToken,
- CMICmnMIResultRecord::ResultClass_e veType) {
- const char *pStrResultRecord = MapResultClassToResultClassText(veType);
- return CMIUtilString::Format("%s^%s", vrToken.c_str(),
- CMIUtilString::WithNullAsEmpty(pStrResultRecord));
-}
-
-//++
-// Details: CMICmnMIResultRecord constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIResultRecord::CMICmnMIResultRecord()
- : m_strResultRecord(MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION)) {}
-
-//++
-// Details: CMICmnMIResultRecord constructor.
-// Type: Method.
-// Args: vrToken - (R) The command's transaction ID or token.
-// veType - (R) A MI result class enumeration.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
- ResultClass_e veType)
- : m_strResultRecord(BuildResultRecord(vrToken, veType)) {}
-
-//++
-// Details: CMICmnMIResultRecord constructor.
-// Type: Method.
-// Args: vrToken - (R) The command's transaction ID or token.
-// veType - (R) A MI result class enumeration.
-// vMIResult - (R) A MI result object.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
- ResultClass_e veType,
- const CMICmnMIValueResult &vValue)
- : m_strResultRecord(BuildResultRecord(vrToken, veType)) {
- Add(vValue);
-}
-
-//++
-// Details: CMICmnMIResultRecord destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIResultRecord::~CMICmnMIResultRecord() {}
-
-//++
-// Details: Return the MI result record as a string. The string is a direct
-// result of
-// work done on *this result record so if not enough data is added then
-// it is
-// possible to return a malformed result record. If nothing has been
-// set or
-// added to *this MI result record object then text "<Invalid>" will be
-// returned.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - MI output text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnMIResultRecord::GetString() const {
- return m_strResultRecord;
-}
-
-//++
-// Details: Add to *this result record additional information.
-// Type: Method.
-// Args: vMIValue - (R) A MI value derived object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIResultRecord::Add(const CMICmnMIValue &vMIValue) {
- m_strResultRecord += ",";
- m_strResultRecord += vMIValue.GetString();
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.h (removed)
@@ -1,79 +0,0 @@
-//===-- MICmnMIResultRecord.h -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnBase.h"
-#include "MICmnMIValueResult.h"
-#include "MIUtilString.h"
-
-//++
-//============================================================================
-// Details: MI common code MI Result Record class. A class that encapsulates
-// MI result record data and the forming/format of data added to it.
-// The syntax is as follows:
-// result-record ==> [ token ] "^" result-class ( "," result )* nl
-// token = any sequence of digits
-// * = 0 to many
-// nl = CR | CR_LF
-// result-class ==> "done" | "running" | "connected" | "error" | "exit"
-// result ==> variable "=" value
-// value ==> const | tuple | list
-// const ==> c-string (7 bit iso c string content) i.e. "all" inc
-// quotes
-// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
-// result )* "]"
-//
-// The result record can be retrieve at any time *this object is
-// instantiated so unless work is done on *this result record then it
-// is
-// possible to return a malformed result record. If nothing has been
-// set
-// or added to *this MI result record object then text "<Invalid>" will
-// be returned.
-// More information see:
-// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
-//--
-class CMICmnMIResultRecord : public CMICmnBase {
- // Enumerations:
-public:
- //++
- // Details: Enumeration of the result class for *this result record
- //--
- enum ResultClass_e {
- eResultClass_Done = 0,
- eResultClass_Running,
- eResultClass_Connected,
- eResultClass_Error,
- eResultClass_Exit
- };
-
- // Methods:
-public:
- /* ctor */ CMICmnMIResultRecord();
- /* ctor */ CMICmnMIResultRecord(const CMIUtilString &vrToken,
- ResultClass_e veType);
- /* ctor */ CMICmnMIResultRecord(const CMIUtilString &vrToken,
- ResultClass_e veType,
- const CMICmnMIValueResult &vValue);
- //
- const CMIUtilString &GetString() const;
- void Add(const CMICmnMIValue &vMIValue);
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIResultRecord() override;
-
- // Attributes:
-private:
- CMIUtilString
- m_strResultRecord; // Holds the text version of the result record to date
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValue.cpp (removed)
@@ -1,43 +0,0 @@
-//===-- MICmnMIValue.cpp ----------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnMIValue.h"
-#include "MICmnResources.h"
-
-//++
-// Details: CMICmnMIValue constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValue::CMICmnMIValue()
- : m_strValue(MIRSRC(IDS_WORD_INVALIDBRKTS)), m_bJustConstructed(true) {}
-
-//++
-// Details: CMICmnMIValue destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValue::~CMICmnMIValue() {}
-
-//++
-// Details: Return the MI value as a string. The string is a direct result of
-// work done on *this value so if not enough data is added then it is
-// possible to return a malformed value. If nothing has been set or
-// added to *this MI value object then text "<Invalid>" will be
-// returned.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString & - MI output text.
-// Throws: None.
-//--
-const CMIUtilString &CMICmnMIValue::GetString() const { return m_strValue; }
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValue.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValue.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValue.h (removed)
@@ -1,50 +0,0 @@
-//===-- MICmnMIValue.h ------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnBase.h"
-
-//++
-//============================================================================
-// Details: MI common code MI Result class. Part of the CMICmnMIValueRecord
-// set of objects.
-// The syntax is as follows:
-// result-record ==> [ token ] "^" result-class ( "," result )* nl
-// token = any sequence of digits
-// * = 0 to many
-// nl = CR | CR_LF
-// result-class ==> "done" | "running" | "connected" | "error" | "exit"
-// result ==> variable "=" value
-// value ==> const | tuple | list
-// const ==> c-string (7 bit iso c string content)
-// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
-// result )* "]"
-// More information see:
-// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
-//--
-class CMICmnMIValue : public CMICmnBase {
- // Methods:
-public:
- /* ctor */ CMICmnMIValue();
- //
- const CMIUtilString &GetString() const;
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValue() override;
-
- // Attributes:
-protected:
- CMIUtilString m_strValue;
- bool m_bJustConstructed; // True = *this just constructed with no value, false
- // = *this has had value added to it
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueConst.cpp (removed)
@@ -1,77 +0,0 @@
-//===-- MICmnMIValueConst.cpp -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnMIValueConst.h"
-
-// Instantiations:
-const CMIUtilString CMICmnMIValueConst::ms_constStrDblQuote("\"");
-
-//++
-// Details: CMICmnMIValueConst constructor.
-// Type: Method.
-// Args: vString - (R) MI Const c-string value.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueConst::CMICmnMIValueConst(const CMIUtilString &vString)
- : m_strPartConst(vString), m_bNoQuotes(false) {
- BuildConst();
-}
-
-//++
-// Details: CMICmnMIValueConst constructor.
-// Type: Method.
-// Args: vString - (R) MI Const c-string value.
-// vbNoQuotes - (R) True = return string not surrounded with quotes,
-// false = use quotes.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueConst::CMICmnMIValueConst(const CMIUtilString &vString,
- const bool vbNoQuotes)
- : m_strPartConst(vString), m_bNoQuotes(vbNoQuotes) {
- BuildConst();
-}
-
-//++
-// Details: CMICmnMIValueConst destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueConst::~CMICmnMIValueConst() {}
-
-//++
-// Details: Build the Value Const data.
-// Type: Method.
-// Args: None.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-bool CMICmnMIValueConst::BuildConst() {
- if (m_strPartConst.length() != 0) {
- const CMIUtilString strValue(m_strPartConst.StripCREndOfLine());
- if (m_bNoQuotes) {
- m_strValue = strValue;
- } else {
- const char *pFormat = "%s%s%s";
- m_strValue =
- CMIUtilString::Format(pFormat, ms_constStrDblQuote.c_str(),
- strValue.c_str(), ms_constStrDblQuote.c_str());
- }
- } else {
- const char *pFormat = "%s%s";
- m_strValue = CMIUtilString::Format(pFormat, ms_constStrDblQuote.c_str(),
- ms_constStrDblQuote.c_str());
- }
-
- return MIstatus::success;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueConst.h (removed)
@@ -1,59 +0,0 @@
-//===-- MICmnMIValueConst.h -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnMIValue.h"
-
-//++
-//============================================================================
-// Details: MI common code MI Result class. Part of the CMICmnMIValueConstRecord
-// set of objects.
-// The syntax is as follows:
-// result-record ==> [ token ] "^" result-class ( "," result )* nl
-// token = any sequence of digits
-// * = 0 to many
-// nl = CR | CR_LF
-// result-class ==> "done" | "running" | "connected" | "error" | "exit"
-// result ==> variable "=" value
-// value ==> const | tuple | list
-// const ==> c-string (7 bit iso c string content)
-// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
-// result )* "]"
-// More information see:
-// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
-//
-// The text formed in *this Result class is stripped of any '\n'
-// characters.
-//--
-class CMICmnMIValueConst : public CMICmnMIValue {
- // Methods:
-public:
- /* ctor */ CMICmnMIValueConst(const CMIUtilString &vString);
- /* ctor */ CMICmnMIValueConst(const CMIUtilString &vString,
- const bool vbNoQuotes);
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValueConst() override;
-
- // Methods:
-private:
- bool BuildConst();
-
- // Attributes:
-private:
- static const CMIUtilString ms_constStrDblQuote;
- //
- CMIUtilString m_strPartConst;
- bool m_bNoQuotes; // True = return string not surrounded with quotes, false =
- // use quotes
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueList.cpp (removed)
@@ -1,177 +0,0 @@
-//===-- MICmnMIValueList.cpp ------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnMIValueList.h"
-#include "MICmnResources.h"
-
-//++
-// Details: CMICmnMIValueList constructor.
-// Type: Method.
-// Args: vbValueTypeList - (R) True = yes value type list, false = result
-// type list.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueList::CMICmnMIValueList(const bool vbValueTypeList) {
- m_strValue = "[]";
-}
-
-//++
-// Details: CMICmnMIValueList constructor.
-// Construct a results only list.
-// return MIstatus::failure.
-// Type: Method.
-// Args: vResult - (R) MI result object.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueList::CMICmnMIValueList(const CMICmnMIValueResult &vResult) {
- m_strValue = vResult.GetString();
- BuildList();
- m_bJustConstructed = false;
-}
-
-//++
-// Details: CMICmnMIValueList constructor.
-// Construct a value only list.
-// Type: Method.
-// Args: vValue - (R) MI value object.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueList::CMICmnMIValueList(const CMICmnMIValue &vValue) {
- m_strValue = vValue.GetString();
- BuildList();
- m_bJustConstructed = false;
-}
-
-//++
-// Details: CMICmnMIValueList destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueList::~CMICmnMIValueList() {}
-
-//++
-// Details: Build the result value's mandatory data part, one tuple
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueList::BuildList() {
- const char *pFormat = "[%s]";
- m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str());
-}
-
-//++
-// Details: Add another MI result object to the value list's of list is
-// results.
-// Only result objects can be added to a list of result otherwise this
-// function
-// will return MIstatus::failure.
-// Type: Method.
-// Args: vResult - (R) The MI result object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueList::Add(const CMICmnMIValueResult &vResult) {
- BuildList(vResult);
-}
-
-//++
-// Details: Add another MI value object to the value list's of list is values.
-// Only values objects can be added to a list of values otherwise this
-// function
-// will return MIstatus::failure.
-// Type: Method.
-// Args: vValue - (R) The MI value object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueList::Add(const CMICmnMIValue &vValue) { BuildList(vValue); }
-
-//++
-// Details: Add another MI result object to the value list's of list is
-// results.
-// Only result objects can be added to a list of result otherwise this
-// function
-// will return MIstatus::failure.
-// Type: Method.
-// Args: vResult - (R) The MI result object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueList::BuildList(const CMICmnMIValueResult &vResult) {
- // Clear out the default "<Invalid>" text
- if (m_bJustConstructed) {
- m_bJustConstructed = false;
- m_strValue = vResult.GetString();
- BuildList();
- return;
- }
-
- const CMIUtilString data(ExtractContentNoBrackets());
- const char *pFormat = "[%s,%s]";
- m_strValue =
- CMIUtilString::Format(pFormat, data.c_str(), vResult.GetString().c_str());
-}
-
-//++
-// Details: Add another MI value object to the value list's of list is values.
-// Only values objects can be added to a list of values otherwise this
-// function
-// will return MIstatus::failure.
-// Type: Method.
-// Args: vValue - (R) The MI value object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueList::BuildList(const CMICmnMIValue &vValue) {
- // Clear out the default "<Invalid>" text
- if (m_bJustConstructed) {
- m_bJustConstructed = false;
- m_strValue = vValue.GetString();
- BuildList();
- return;
- }
-
- // Remove already present '[' and ']' from the start and end
- m_strValue = m_strValue.Trim();
- size_t len = m_strValue.size();
- if ((len > 1) && (m_strValue[0] == '[') && (m_strValue[len - 1] == ']'))
- m_strValue = m_strValue.substr(1, len - 2);
- const char *pFormat = "[%s,%s]";
- m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str(),
- vValue.GetString().c_str());
-}
-
-//++
-// Details: Retrieve the contents of *this value object but without the outer
-// most
-// brackets.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString - Data within the object.
-// Throws: None.
-//--
-CMIUtilString CMICmnMIValueList::ExtractContentNoBrackets() const {
- CMIUtilString data(m_strValue);
-
- if (data[0] == '[') {
- data = data.substr(1, data.length() - 1);
- }
- if (data[data.size() - 1] == ']') {
- data = data.substr(0, data.length() - 1);
- }
-
- return data;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueList.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueList.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueList.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueList.h (removed)
@@ -1,55 +0,0 @@
-//===-- MICmnMIValueList.h --------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnMIValue.h"
-#include "MICmnMIValueResult.h"
-
-//++
-//============================================================================
-// Details: MI common code MI Result class. Part of the CMICmnMIValueListRecord
-// set of objects.
-// The syntax is as follows:
-// result-record ==> [ token ] "^" result-class ( "," result )* nl
-// token = any sequence of digits
-// * = 0 to many
-// nl = CR | CR_LF
-// result-class ==> "done" | "running" | "connected" | "error" | "exit"
-// result ==> variable "=" value
-// value ==> const | tuple | list
-// const ==> c-string (7 bit iso c string content)
-// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
-// result )* "]"
-// More information see:
-// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
-//--
-class CMICmnMIValueList : public CMICmnMIValue {
- // Methods:
-public:
- /* ctor */ CMICmnMIValueList(const bool vbValueTypeList);
- /* ctor */ CMICmnMIValueList(const CMICmnMIValueResult &vResult);
- /* ctor */ CMICmnMIValueList(const CMICmnMIValue &vValue);
- //
- void Add(const CMICmnMIValueResult &vResult);
- void Add(const CMICmnMIValue &vValue);
- CMIUtilString ExtractContentNoBrackets() const;
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValueList() override;
-
- // Methods:
-private:
- void BuildList();
- void BuildList(const CMICmnMIValueResult &vResult);
- void BuildList(const CMICmnMIValue &vResult);
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueResult.cpp (removed)
@@ -1,116 +0,0 @@
-//===-- MICmnMIValueResult.cpp ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnMIValueResult.h"
-#include "MICmnResources.h"
-
-// Instantiations:
-const CMIUtilString CMICmnMIValueResult::ms_constStrEqual("=");
-
-//++
-// Details: CMICmnMIValueResult constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueResult::CMICmnMIValueResult() : m_bEmptyConstruction(true) {}
-
-//++
-// Details: CMICmnMIValueResult constructor.
-// Type: Method.
-// Args: vrVariable - (R) MI value's name.
-// vrValue - (R) The MI value.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueResult::CMICmnMIValueResult(const CMIUtilString &vrVariable,
- const CMICmnMIValue &vrValue)
- : m_strPartVariable(vrVariable), m_partMIValue(vrValue),
- m_bEmptyConstruction(false), m_bUseSpacing(false) {
- BuildResult();
-}
-
-//++
-// Details: CMICmnMIValueResult constructor.
-// Type: Method.
-// Args: vrVariable - (R) MI value's name.
-// vrValue - (R) The MI value.
-// vbUseSpacing - (R) True = put space separators into the string,
-// false = no spaces used.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueResult::CMICmnMIValueResult(const CMIUtilString &vrVariable,
- const CMICmnMIValue &vrValue,
- const bool vbUseSpacing)
- : m_strPartVariable(vrVariable), m_partMIValue(vrValue),
- m_bEmptyConstruction(false), m_bUseSpacing(vbUseSpacing) {
- BuildResult();
-}
-
-//++
-// Details: CMICmnMIValueResult destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueResult::~CMICmnMIValueResult() {}
-
-//++
-// Details: Build the MI value result string.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueResult::BuildResult() {
- const char *pFormat = m_bUseSpacing ? "%s %s %s" : "%s%s%s";
- m_strValue = CMIUtilString::Format(pFormat, m_strPartVariable.c_str(),
- ms_constStrEqual.c_str(),
- m_partMIValue.GetString().c_str());
-}
-
-//++
-// Details: Build the MI value result string.
-// Type: Method.
-// Args: vrVariable - (R) MI value's name.
-// vrValue - (R) The MI value.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueResult::BuildResult(const CMIUtilString &vVariable,
- const CMICmnMIValue &vValue) {
- const char *pFormat = m_bUseSpacing ? "%s, %s %s %s" : "%s,%s%s%s";
- m_strValue = CMIUtilString::Format(
- pFormat, m_strValue.c_str(), vVariable.c_str(), ms_constStrEqual.c_str(),
- vValue.GetString().c_str());
-}
-
-//++
-// Details: Append another MI value object to *this MI value result.
-// Type: Method.
-// Args: vrVariable - (R) MI value's name.
-// vrValue - (R) The MI value.
-// Return: MIstatus::success - Functional succeeded.
-// MIstatus::failure - Functional failed.
-// Throws: None.
-//--
-void CMICmnMIValueResult::Add(const CMIUtilString &vrVariable,
- const CMICmnMIValue &vrValue) {
- if (!m_bEmptyConstruction)
- BuildResult(vrVariable, vrValue);
- else {
- m_bEmptyConstruction = false;
- m_strPartVariable = vrVariable;
- m_partMIValue = vrValue;
- BuildResult();
- }
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueResult.h (removed)
@@ -1,66 +0,0 @@
-//===-- MICmnMIValueResult.h ------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnMIValue.h"
-
-//++
-//============================================================================
-// Details: MI common code MI Result class. Part of the
-// CMICmnMIValueResultRecord
-// set of objects.
-// The syntax is as follows:
-// result-record ==> [ token ] "^" result-class ( "," result )* nl
-// token = any sequence of digits
-// * = 0 to many
-// nl = CR | CR_LF
-// result-class ==> "done" | "running" | "connected" | "error" | "exit"
-// result ==> variable "=" value
-// value ==> const | tuple | list
-// const ==> c-string (7 bit iso c string content)
-// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
-// result )* "]"
-// More information see:
-// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
-//--
-class CMICmnMIValueResult : public CMICmnMIValue {
- // Methods:
-public:
- /* ctor */ CMICmnMIValueResult();
- /* ctor */ CMICmnMIValueResult(const CMIUtilString &vVariable,
- const CMICmnMIValue &vValue);
- /* ctor */ CMICmnMIValueResult(const CMIUtilString &vVariable,
- const CMICmnMIValue &vValue,
- const bool vbUseSpacing);
- //
- void Add(const CMIUtilString &vVariable, const CMICmnMIValue &vValue);
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValueResult() override;
-
- // Methods:
-private:
- void BuildResult();
- void BuildResult(const CMIUtilString &vVariable, const CMICmnMIValue &vValue);
-
- // Attributes:
-private:
- static const CMIUtilString ms_constStrEqual;
- //
- CMIUtilString m_strPartVariable;
- CMICmnMIValue m_partMIValue;
- bool m_bEmptyConstruction; // True = *this object used constructor with no
- // parameters, false = constructor with parameters
- bool m_bUseSpacing; // True = put space separators into the string, false = no
- // spaces used
-};
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.cpp?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.cpp (removed)
@@ -1,194 +0,0 @@
-//===-- MICmnMIValueTuple.cpp -----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// In-house headers:
-#include "MICmnMIValueTuple.h"
-
-//++
-// Details: CMICmnMIValueTuple constructor.
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueTuple::CMICmnMIValueTuple() : m_bSpaceAfterComma(false) {
- m_strValue = "{}";
-}
-
-//++
-// Details: CMICmnMIValueTuple constructor.
-// Type: Method.
-// Args: vResult - (R) MI result object.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueTuple::CMICmnMIValueTuple(const CMICmnMIValueResult &vResult)
- : m_bSpaceAfterComma(false) {
- m_strValue = vResult.GetString();
- BuildTuple();
- m_bJustConstructed = false;
-}
-
-//++
-// Details: CMICmnMIValueTuple constructor.
-// Type: Method.
-// Args: vResult - (R) MI result object.
-// vbUseSpacing - (R) True = put space separators into the string,
-// false = no spaces used.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueTuple::CMICmnMIValueTuple(const CMICmnMIValueResult &vResult,
- const bool vbUseSpacing)
- : m_bSpaceAfterComma(vbUseSpacing) {
- m_strValue = vResult.GetString();
- BuildTuple();
- m_bJustConstructed = false;
-}
-
-//++
-// Details: CMICmnMIValueTuple destructor.
-// Type: Overrideable.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-CMICmnMIValueTuple::~CMICmnMIValueTuple() {}
-
-//++
-// Details: Build the result value's mandatory data part, one tuple
-// Type: Method.
-// Args: None.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueTuple::BuildTuple() {
- const char *pFormat = "{%s}";
- m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str());
-}
-
-//++
-// Details: Add another MI result object to the value's list of tuples.
-// Type: Method.
-// Args: vResult - (R) The MI result object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueTuple::BuildTuple(const CMICmnMIValueResult &vResult) {
- // Clear out the default "<Invalid>" text
- if (m_bJustConstructed) {
- m_bJustConstructed = false;
- m_strValue = vResult.GetString();
- BuildTuple();
- return;
- }
-
- if (m_strValue[0] == '{') {
- m_strValue = m_strValue.substr(1, m_strValue.size() - 1);
- }
- if (m_strValue[m_strValue.size() - 1] == '}') {
- m_strValue = m_strValue.substr(0, m_strValue.size() - 1);
- }
-
- const char *pFormat = m_bSpaceAfterComma ? "{%s, %s}" : "{%s,%s}";
- m_strValue = CMIUtilString::Format(pFormat, m_strValue.c_str(),
- vResult.GetString().c_str());
-}
-
-//++
-// Details: Add string value to the value's list of tuples.
-// Type: Method.
-// Args: vValue - (R) The string object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueTuple::BuildTuple(const CMIUtilString &vValue) {
- // Clear out the default "<Invalid>" text
- if (m_bJustConstructed) {
- m_bJustConstructed = false;
- m_strValue = vValue;
- BuildTuple();
- return;
- }
-
- const CMIUtilString data(ExtractContentNoBrackets());
- const char *pFormat = m_bSpaceAfterComma ? "{%s, %s}" : "{%s,%s}";
- m_strValue = CMIUtilString::Format(pFormat, data.c_str(), vValue.c_str());
-}
-
-//++
-// Details: Add another MI value object to the value list's of list is values.
-// Only values objects can be added to a list of values otherwise this
-// function
-// will return MIstatus::failure.
-// Type: Method.
-// Args: vValue - (R) The MI value object.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueTuple::Add(const CMICmnMIValueResult &vResult) {
- BuildTuple(vResult);
-}
-
-//++
-// Details: Add another MI value object to the value list's of list is values.
-// Only values objects can be added to a list of values otherwise this
-// function
-// will return MIstatus::failure.
-// Type: Method.
-// Args: vValue - (R) The MI value object.
-// vbUseSpacing - (R) True = put space separators into the string,
-// false = no spaces used.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueTuple::Add(const CMICmnMIValueResult &vResult,
- const bool vbUseSpacing) {
- m_bSpaceAfterComma = vbUseSpacing;
- BuildTuple(vResult);
-}
-
-//++
-// Details: Add another MI value object to the value list's of list is values.
-// Only values objects can be added to a list of values otherwise this
-// function
-// will return MIstatus::failure.
-// Type: Method.
-// Args: vValue - (R) The MI value object.
-// vbUseSpacing - (R) True = put space separators into the string,
-// false = no spaces used.
-// Return: None.
-// Throws: None.
-//--
-void CMICmnMIValueTuple::Add(const CMICmnMIValueConst &vValue,
- const bool vbUseSpacing) {
- m_bSpaceAfterComma = vbUseSpacing;
- BuildTuple(vValue.GetString());
-}
-
-//++
-// Details: Retrieve the contents of *this value object but without the outer
-// most
-// brackets.
-// Type: Method.
-// Args: None.
-// Return: CMIUtilString - Data within the object.
-// Throws: None.
-//--
-CMIUtilString CMICmnMIValueTuple::ExtractContentNoBrackets() const {
- CMIUtilString data(m_strValue);
-
- if (data[0] == '{') {
- data = data.substr(1, data.length() - 1);
- }
- if (data[data.size() - 1] == '}') {
- data = data.substr(0, data.length() - 1);
- }
-
- return data;
-}
Removed: lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.h?rev=366464&view=auto
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.h (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIValueTuple.h (removed)
@@ -1,63 +0,0 @@
-//===-- MICmnMIValueTuple.h -------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-// In-house headers:
-#include "MICmnMIValue.h"
-#include "MICmnMIValueConst.h"
-#include "MICmnMIValueResult.h"
-
-//++
-//============================================================================
-// Details: MI common code MI Result class. Part of the CMICmnMIValueTupleRecord
-// set of objects.
-// The syntax is as follows:
-// result-record ==> [ token ] "^" result-class ( "," result )* nl
-// token = any sequence of digits
-// * = 0 to many
-// nl = CR | CR_LF
-// result-class ==> "done" | "running" | "connected" | "error" | "exit"
-// result ==> variable "=" value
-// value ==> const | tuple | list
-// const ==> c-string (7 bit iso c string content)
-// tuple ==> "{}" | "{" result ( "," result )* "}"
-// list ==> "[]" | "[" value ( "," value )* "]" | "[" result ( ","
-// result )* "]"
-// More information see:
-// http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_22.html
-//--
-class CMICmnMIValueTuple : public CMICmnMIValue {
- // Methods:
-public:
- /* ctor */ CMICmnMIValueTuple();
- /* ctor */ CMICmnMIValueTuple(const CMICmnMIValueResult &vResult);
- /* ctor */ CMICmnMIValueTuple(const CMICmnMIValueResult &vResult,
- const bool vbUseSpacing);
- //
- void Add(const CMICmnMIValueResult &vResult);
- void Add(const CMICmnMIValueResult &vResult, const bool vbUseSpacing);
- void Add(const CMICmnMIValueConst &vValue, const bool vbUseSpacing);
- CMIUtilString ExtractContentNoBrackets() const;
-
- // Overridden:
-public:
- // From CMICmnBase
- /* dtor */ ~CMICmnMIValueTuple() override;
-
- // Methods:
-private:
- void BuildTuple();
- void BuildTuple(const CMICmnMIValueResult &vResult);
- void BuildTuple(const CMIUtilString &vValue);
-
- // Attributes:
-private:
- bool m_bSpaceAfterComma; // True = put space separators into the string, false
- // = no spaces used
-};
More information about the lldb-commits
mailing list