diff options
Diffstat (limited to 'tools/lldb-mi/MICmnLLDBDebugSessionInfo.h')
-rw-r--r-- | tools/lldb-mi/MICmnLLDBDebugSessionInfo.h | 292 |
1 files changed, 0 insertions, 292 deletions
diff --git a/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h b/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h deleted file mode 100644 index 1fa81951f43a..000000000000 --- a/tools/lldb-mi/MICmnLLDBDebugSessionInfo.h +++ /dev/null @@ -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; -} |