aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmnLLDBDebugger.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmnLLDBDebugger.h')
-rw-r--r--tools/lldb-mi/MICmnLLDBDebugger.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/tools/lldb-mi/MICmnLLDBDebugger.h b/tools/lldb-mi/MICmnLLDBDebugger.h
new file mode 100644
index 000000000000..0d608997d959
--- /dev/null
+++ b/tools/lldb-mi/MICmnLLDBDebugger.h
@@ -0,0 +1,125 @@
+//===-- MICmnLLDBDebugger.h -------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+//++
+// File: MICmnLLDBDebugger.h
+//
+// Overview: CMICmnLLDBDebugger interface.
+//
+// Environment: Compilers: Visual C++ 12.
+// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+// Libraries: See MIReadmetxt.
+//
+// Copyright: None.
+//--
+
+#pragma once
+
+// Third party headers
+#include <queue>
+#include <map>
+#include <lldb/API/SBDebugger.h>
+#include <lldb/API/SBListener.h>
+#include <lldb/API/SBEvent.h>
+
+// In-house headers:
+#include "MICmnBase.h"
+#include "MIUtilThreadBaseStd.h"
+#include "MIUtilSingletonBase.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.
+// Gotchas: None.
+// Authors: Illya Rudkin 26/02/2014.
+// Changes: None.
+//--
+class CMICmnLLDBDebugger
+: public CMICmnBase
+, public CMIUtilThreadActiveObjBase
+, public MI::ISingleton< CMICmnLLDBDebugger >
+{
+ friend class MI::ISingleton< CMICmnLLDBDebugger >;
+
+// Methods:
+public:
+ bool Initialize( void );
+ bool Shutdown( void );
+
+ bool SetDriver( const CMIDriverBase & vClientDriver );
+ CMIDriverBase & GetDriver( void ) const;
+ lldb::SBDebugger & GetTheDebugger( void );
+ lldb::SBListener & GetTheListener( void );
+
+ // 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
+ virtual const CMIUtilString & ThreadGetName( void ) const;
+
+// Overridden:
+protected:
+ // From CMIUtilThreadActiveObjBase
+ virtual bool ThreadRun( bool & vrIsAlive );
+ virtual bool ThreadFinish( void );
+
+// 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( void );
+ /* ctor */ CMICmnLLDBDebugger( const CMICmnLLDBDebugger & );
+ void operator=( const CMICmnLLDBDebugger & );
+
+ bool InitSBDebugger( void );
+ bool InitSBListener( void );
+ bool InitStdStreams( void );
+ 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 );
+
+// Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ virtual ~CMICmnLLDBDebugger( void );
+
+// 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;
+};
+