aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lldb-mi/MICmdCmdGdbShow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmdCmdGdbShow.cpp')
-rw-r--r--tools/lldb-mi/MICmdCmdGdbShow.cpp395
1 files changed, 0 insertions, 395 deletions
diff --git a/tools/lldb-mi/MICmdCmdGdbShow.cpp b/tools/lldb-mi/MICmdCmdGdbShow.cpp
deleted file mode 100644
index 9ebd36202b7d..000000000000
--- a/tools/lldb-mi/MICmdCmdGdbShow.cpp
+++ /dev/null
@@ -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;
-}