mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-12 19:38:50 +00:00

A lot of comments in LLDB are surrounded by an ASCII line to delimit the begging and end of the comment. Its use is not really consistent across the code base, sometimes the lines are longer, sometimes they are shorter and sometimes they are omitted. Furthermore, it looks kind of weird with the 80 column limit, where the comment actually extends past the line, but not by much. Furthermore, when /// is used for Doxygen comments, it looks particularly odd. And when // is used, it incorrectly gives the impression that it's actually a Doxygen comment. I assume these lines were added to improve distinguishing between comments and code. However, given that todays editors and IDEs do a great job at highlighting comments, I think it's worth to drop this for the sake of consistency. The alternative is fixing all the inconsistencies, which would create a lot more churn. Differential revision: https://reviews.llvm.org/D60508 llvm-svn: 358135
110 lines
3.3 KiB
C++
110 lines
3.3 KiB
C++
//===-- GDBRemoteCommunicationServerPlatform.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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_GDBRemoteCommunicationServerPlatform_h_
|
|
#define liblldb_GDBRemoteCommunicationServerPlatform_h_
|
|
|
|
#include <map>
|
|
#include <mutex>
|
|
#include <set>
|
|
|
|
#include "GDBRemoteCommunicationServerCommon.h"
|
|
#include "lldb/Host/Socket.h"
|
|
|
|
namespace lldb_private {
|
|
namespace process_gdb_remote {
|
|
|
|
class GDBRemoteCommunicationServerPlatform
|
|
: public GDBRemoteCommunicationServerCommon {
|
|
public:
|
|
typedef std::map<uint16_t, lldb::pid_t> PortMap;
|
|
|
|
GDBRemoteCommunicationServerPlatform(
|
|
const Socket::SocketProtocol socket_protocol, const char *socket_scheme);
|
|
|
|
~GDBRemoteCommunicationServerPlatform() override;
|
|
|
|
Status 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);
|
|
|
|
void SetInferiorArguments(const lldb_private::Args &args);
|
|
|
|
Status LaunchGDBServer(const lldb_private::Args &args, std::string hostname,
|
|
lldb::pid_t &pid, uint16_t &port,
|
|
std::string &socket_name);
|
|
|
|
void SetPendingGdbServer(lldb::pid_t pid, uint16_t port,
|
|
const std::string &socket_name);
|
|
|
|
protected:
|
|
const Socket::SocketProtocol m_socket_protocol;
|
|
const std::string m_socket_scheme;
|
|
std::recursive_mutex m_spawned_pids_mutex;
|
|
std::set<lldb::pid_t> m_spawned_pids;
|
|
|
|
PortMap m_port_map;
|
|
uint16_t m_port_offset;
|
|
struct {
|
|
lldb::pid_t pid;
|
|
uint16_t port;
|
|
std::string socket_name;
|
|
} m_pending_gdb_server;
|
|
|
|
PacketResult Handle_qLaunchGDBServer(StringExtractorGDBRemote &packet);
|
|
|
|
PacketResult Handle_qQueryGDBServer(StringExtractorGDBRemote &packet);
|
|
|
|
PacketResult Handle_qKillSpawnedProcess(StringExtractorGDBRemote &packet);
|
|
|
|
PacketResult Handle_qProcessInfo(StringExtractorGDBRemote &packet);
|
|
|
|
PacketResult Handle_qGetWorkingDir(StringExtractorGDBRemote &packet);
|
|
|
|
PacketResult Handle_QSetWorkingDir(StringExtractorGDBRemote &packet);
|
|
|
|
PacketResult Handle_qC(StringExtractorGDBRemote &packet);
|
|
|
|
PacketResult Handle_jSignalsInfo(StringExtractorGDBRemote &packet);
|
|
|
|
private:
|
|
bool KillSpawnedProcess(lldb::pid_t pid);
|
|
|
|
bool DebugserverProcessReaped(lldb::pid_t pid);
|
|
|
|
static const FileSpec &GetDomainSocketDir();
|
|
|
|
static FileSpec GetDomainSocketPath(const char *prefix);
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(GDBRemoteCommunicationServerPlatform);
|
|
};
|
|
|
|
} // namespace process_gdb_remote
|
|
} // namespace lldb_private
|
|
|
|
#endif // liblldb_GDBRemoteCommunicationServerPlatform_h_
|