diff options
author | emaste <emaste@FreeBSD.org> | 2015-07-03 16:57:06 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2015-07-03 16:57:06 +0000 |
commit | 8037fa4ee916fa20b3c63cbf531f4ee7e1c76138 (patch) | |
tree | 3c2e41c3be19b7fc7666ed45a5f91ec3b6e35f2a /source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.h | |
parent | d61b076ede88b56f3372a55e7d1eac6a9d717120 (diff) | |
download | FreeBSD-src-8037fa4ee916fa20b3c63cbf531f4ee7e1c76138.zip FreeBSD-src-8037fa4ee916fa20b3c63cbf531f4ee7e1c76138.tar.gz |
Import LLDB as of upstream SVN 241361 (git 612c075f)
Diffstat (limited to 'source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.h')
-rw-r--r-- | source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.h b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.h new file mode 100644 index 0000000..4124b04 --- /dev/null +++ b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.h @@ -0,0 +1,102 @@ +//===-- GDBRemoteCommunicationServerPlatform.h ------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef liblldb_GDBRemoteCommunicationServerPlatform_h_ +#define liblldb_GDBRemoteCommunicationServerPlatform_h_ + +#include "GDBRemoteCommunicationServerCommon.h" + +namespace lldb_private { +namespace process_gdb_remote { + +class GDBRemoteCommunicationServerPlatform : + public GDBRemoteCommunicationServerCommon +{ +public: + typedef std::map<uint16_t, lldb::pid_t> PortMap; + + GDBRemoteCommunicationServerPlatform(); + + virtual + ~GDBRemoteCommunicationServerPlatform(); + + Error + LaunchProcess () override; + + // Set both ports to zero to let the platform automatically bind to + // a port chosen by the OS. + void + SetPortMap (PortMap &&port_map); + + //---------------------------------------------------------------------- + // If we are using a port map where we can only use certain ports, + // get the next available port. + // + // If we are using a port map and we are out of ports, return UINT16_MAX + // + // If we aren't using a port map, return 0 to indicate we should bind to + // port 0 and then figure out which port we used. + //---------------------------------------------------------------------- + uint16_t + GetNextAvailablePort (); + + bool + AssociatePortWithProcess (uint16_t port, lldb::pid_t pid); + + bool + FreePort (uint16_t port); + + bool + FreePortForProcess (lldb::pid_t pid); + + void + SetPortOffset (uint16_t port_offset); + +protected: + lldb::PlatformSP m_platform_sp; + + PortMap m_port_map; + uint16_t m_port_offset; + + PacketResult + Handle_qLaunchGDBServer (StringExtractorGDBRemote &packet); + + PacketResult + Handle_qProcessInfo (StringExtractorGDBRemote &packet); + + PacketResult + Handle_qGetWorkingDir (StringExtractorGDBRemote &packet); + + PacketResult + Handle_QSetWorkingDir (StringExtractorGDBRemote &packet); + + PacketResult + Handle_qC (StringExtractorGDBRemote &packet); + +private: + bool + DebugserverProcessReaped (lldb::pid_t pid); + + static bool + ReapDebugserverProcess (void *callback_baton, + lldb::pid_t pid, + bool exited, + int signal, + int status); + + //------------------------------------------------------------------ + // For GDBRemoteCommunicationServerPlatform only + //------------------------------------------------------------------ + DISALLOW_COPY_AND_ASSIGN (GDBRemoteCommunicationServerPlatform); +}; + +} // namespace process_gdb_remote +} // namespace lldb_private + +#endif // liblldb_GDBRemoteCommunicationServerPlatform_h_ |