//===-- GDBRemote.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 LLDB_UTILITY_GDBREMOTE_H #define LLDB_UTILITY_GDBREMOTE_H #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/StreamString.h" #include "lldb/lldb-enumerations.h" #include "lldb/lldb-public.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include namespace lldb_private { class StreamGDBRemote : public StreamString { public: StreamGDBRemote(); StreamGDBRemote(uint32_t flags, uint32_t addr_size, lldb::ByteOrder byte_order); ~StreamGDBRemote() override; /// Output a block of data to the stream performing GDB-remote escaping. /// /// \param[in] s /// A block of data. /// /// \param[in] src_len /// The amount of data to write. /// /// \return /// Number of bytes written. // TODO: Convert this function to take ArrayRef int PutEscapedBytes(const void *s, size_t src_len); }; /// GDB remote packet as used by the GDB remote communication history. Packets /// can be serialized to file. struct GDBRemotePacket { enum Type { ePacketTypeInvalid = 0, ePacketTypeSend, ePacketTypeRecv }; GDBRemotePacket() = default; void Clear() { packet.data.clear(); type = ePacketTypeInvalid; bytes_transmitted = 0; packet_idx = 0; tid = LLDB_INVALID_THREAD_ID; } struct BinaryData { std::string data; }; void Dump(Stream &strm) const; BinaryData packet; Type type = ePacketTypeInvalid; uint32_t bytes_transmitted = 0; uint32_t packet_idx = 0; lldb::tid_t tid = LLDB_INVALID_THREAD_ID; private: llvm::StringRef GetTypeStr() const; }; } // namespace lldb_private #endif // LLDB_UTILITY_GDBREMOTE_H