Summary: I observed that eclipse was passing --thread-group for many other commands then we are currently handling. Looking at the MI documentation, the following link states that each MI command accept the --thread and --frame option. Looking at the GDB implementation, it seems that apart from these 2, --thread-group is also handled the same way. https://sourceware.org/gdb/onlinedocs/gdb/Context-management.html#Context-management So instead of handling those arguments in every comamnds, I have moved them into the base class and removed them from elsewhere. Now any command can use these arguments. The patch seems big but most of the changes are mechanical. Reviewers: ki.stfu Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D14177 llvm-svn: 251636
86 lines
3.7 KiB
C++
86 lines
3.7 KiB
C++
//===-- MICmdCmdGdbSet.h ----------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// 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 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;
|
|
};
|